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

C# 修改MSI数据库属性时出现问题,c#,database,windows-installer,C#,Database,Windows Installer,我需要通过C#修改UpgradeCode升级MSI表的UpgradeCode属性。 这段代码可以处理其他表的属性,但在尝试修改这些属性时会抛出一个错误 using (var database = new Database(TEMPDATABASE, DatabaseOpenMode.Direct)) { string upgradeCode = Guid.NewGuid().ToString("B").ToUpper(); database.Execute("Up

我需要通过C#修改
UpgradeCode
升级MSI表的
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:“函数在执行过程中失败。”

报告说:

更新查询仅适用于非主键列

UpgradeCode
Upgrade
表的主键。

表示:

更新查询仅适用于非主键列


UpgradeCode
Upgrade
表的主键。

我感到好奇和掠夺-它给出了以下信息:-只需整体下载它

实际代码是(上的文件中存在一些unicode换行问题,我已在此处修复):

我采取了上述措施,制作了以下模型(非常难看,但效果不错):


我感到好奇和被掠夺-它给出了以下信息:-只需下载它作为一个整体

实际代码是(上的文件中存在一些unicode换行问题,我已在此处修复):

我采取了上述措施,制作了以下模型(非常难看,但效果不错):


您是否检查过数据库是否确实包含表和列属性?当然,msi数据库包含升级表,并且该表还包含升级代码属性。您的`可能正在丢弃它。您可以尝试:
Update-Upgrade-Set-Upgrade.UpgradeCode='{0}'
instead或尝试使用$“{UpdgradeCode}”instead。您是否检查了数据库是否确实包含表和列属性?当然,msi数据库包含升级表,并且该表还包含UpgradeCode属性。您可能正在将其丢弃。您可以尝试:
Update-Upgrade-Set-Upgrade.UpgradeCode='{0}'
instead或尝试使用$“{UpdgradeCode}”insteadGreat解决方案!谢谢。我们可以问一下您为什么更改升级代码吗?它通常不应该被改变。伟大的解决方案!谢谢。我们可以问一下您为什么更改升级代码吗?它通常不应该被改变。
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();
    }
}