修改 MSI 数据库属性时出现问题



我需要通过 C# 修改UpgradeMSI 表的UpgradeCode属性。 此代码适用于其他表的属性,但在我尝试修改这些属性时会引发错误。

using (var database = new Database(TEMPDATABASE, DatabaseOpenMode.Direct))        
{
string upgradeCode = Guid.NewGuid().ToString("B").ToUpper();
database.Execute("Update `Upgrade` Set `Upgrade`.`UpgradeCode` = '{0}'", upgradeCode);
}

错误是:

Microsoft.Deployment.WindowsInstaller.InstallerException:"函数在执行过程中失败。

我感到好奇并掠夺了 github.com - 它给出了以下内容: 完整项目 - 只需将其作为一个整体下载即可。

实际代码是(github.com 上文件中的一些 unicode 换行问题,我在这里修复了它们(:

public static void UpdateUpgradeTable(this Database db, Guid upgradeCode)
{
using (View view = db.OpenView("SELECT * FROM `Upgrade`", new object[0]))
{
view.Execute();
using (Record record = view.Fetch())
{
record[1] = upgradeCode.ToString("B").ToUpperInvariant();
view.Replace(record);
}
db.Commit();
}
}

我拿了上面的并制作了以下模型(非常丑陋,但它有效(:

using (Database db = new Database(@"C:Test.msi", DatabaseOpenMode.Direct))
{
using (View view = db.OpenView("SELECT * FROM `Upgrade`", new object[0]))
{
view.Execute();
using (Record record = view.Fetch())
{
record[1] = "{777888DD-1111-1111-1111-222222222222}";
record[2] = "";
record[3] = "4.0.1";
record[4] = "";
record[5] = "1";
record[6] = "";
record[7] = "WIX_UPGRADE_DETECTED";
view.Replace(record);
}
db.Commit();
using (Record record = view.Fetch())
{
record[1] = "{777888DD-1111-1111-1111-222222222222}";
record[2] = "";
record[3] = "";
record[4] = "4.0.1";
record[5] = "1";
record[6] = "";
record[7] = "WIX_DOWNGRADE_DETECTED";
view.Replace(record);
}
db.Commit();
}
}

SDK 文档说:

UPDATE 查询仅适用于非主键列。

UpgradeCodeUpgrade表的主键。

相关内容

最新更新