C# 修改MSI数据库属性时出现问题
我需要通过C#修改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
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();
}
}