0

在部署场景中,我们的想法是允许管理员更改安装程序和 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?
(这甚至可能吗?)

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

4

1 回答 1

2

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。

于 2013-10-08T18:19:11.737 回答