【问题标题】:How to change ProductCode using Microsoft.Deployment.WindowsInstaller?如何使用 Microsoft.Deployment.WindowsInstaller 更改 ProductCode?
【发布时间】:2013-10-08 15:57:38
【问题描述】:

在部署场景中,我们的想法是允许管理员更改安装程序和 ProductCode 中的属性。然后管理员应该使用 GPO 策略推出较新的 msi。由于这将是一次重大升级,因此应卸载具有旧属性的旧版本,并应安装具有新属性的新版本。
但是更新 ProductCode 不起作用。

执行时
db.Execute("UPDATE Property SET Value = '{30571D61-8994-449B-9725-90760DFE0467}' WHERE Property = 'ProductCode'")
抛出异常。
[Microsoft.Deployment.WindowsInstaller.InstallerException] = {"Function failed during execution. Database: C:\..\MyInstaller.msi Table(s) Update failed."}

我应该如何升级 ProductCode?
(有可能吗?)

编辑:
如果表以只读方式打开,则会显示错误。
这里就是这种情况。

【问题讨论】:

    标签: wix windows-installer setup-deployment


    【解决方案1】:

    SDK 文档指出 ExecuteScalar 只能用于返回单个结果的 SELECT 语句。相反,您应该使用 Execute 方法。

    using (Database database = new Database(@"C:\MSM\ISWIX.MSI", DatabaseOpenMode.Direct))
    {
        database.Execute("UPDATE Property SET Value = '{00000000-0000-0000-0000-000000000000}' WHERE Property = 'ProductCode'");
    }
    

    还要意识到这不能作为安装期间的自定义操作来完成,因为 ProductCode 是不可变的。通常在 MajorUpgrade 场景中,您在构建/编译时分配一个新的 ProductCode。

    【讨论】:

    • 抱歉,打错了。我实际上正在使用执行。我发现了错误。我的包装类有一个倒置的 if,所以当我想修改时我以只读方式打开。
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 2011-06-27
    • 2013-03-22
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多