在部署方案中,我们想让管理员更改安装程序和ProductCode中的属性。然后,管理员应使用GPO策略推出较新的msi。由于现在这将是一个MajorUpgrade,旧版本的旧版本应该被卸载,并且应该安装具有新属性的新版本。
但是,更新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应该怎么做? (它甚至可能吗?)
修改
如果表格以ReadOnly方式打开,则会显示错误
这就是这种情况。
答案 0 :(得分: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。