如何使用 c#/cmd 向 msi 文件的 属性 table 添加新行

How to add a new row to Property table of msi file using c#/cmd

我需要在 msi 文件数据库中添加一个新行,即我需要在 属性 table 中添加一个新行。 ServerUrl =“www.google.com”。我试过使用 orca 并且能够做到。但这是一个手动过程。我需要通过代码来完成。

  1. 不启动安装程序。
  2. 不使用 orca

如何在 C# 中实现这一点?我尝试使用命令行选项,但它会启动安装程序。我需要在不启动现有 msi 文件中的安装程序的情况下编辑 table。

我已经有一段时间没看过这个了,我将向您指出之前的两个答案。

重要提示!:您应该尽可能避免 post 处理 MSI。您可以创建一个 MST(转换)以在安装期间将其添加到 MSI 或在命令行将其设置为 属性。看到这个旧答案: and from section "Customizing Silent Install" onwards.


VBScript:有一个 VBScript WiRunSQL.vbs - 这是一部分Windows SDK - 如果您安装了 Visual Studio,只需搜索您的 SDK 文件夹即可。

您可以使用这个和一个批处理文件来post-处理 MSI (sample here):

cscript.exe "%~dp0"\WiRunSQL.vbs "MySetup.msi" "INSERT INTO `Property` (`Property`, `Value`) VALUES ('MYPROPERTY', 'PropertyValue')"  
pause

关于如何更改 ControlCondition table。


C#:还有可以测试一下。没有经过很好的测试,总体上也不是最好的代码,但是看看?

或者尝试 this source. You need to know what DTF is for this source. What is DTF? DTF 通过此引用包含在代码中:using Microsoft.Deployment.WindowsInstaller;

简要内联:

public static void Set(string msi, string name, string value)
{
   using (Database db = new Database(msi, DatabaseOpenMode.Direct))
   {
      db.Execute("UPDATE `Property` SET `Value` = '{0}' WHERE `Property` = '{1}'", value, name);
   }
}

部分链接: