【问题标题】:How to add a new row to Property table of msi file using c#/cmd如何使用 c#/cmd 向 msi 文件的属性表添加新行
【发布时间】:2021-09-30 12:59:12
【问题描述】:

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

  1. 无需启动安装程序。
  2. 不使用逆戟鲸

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

【问题讨论】:

    标签: c# .net wix windows-installer wix3.5


    【解决方案1】:

    自从我看到这个已经有一段时间了,我只会指出你以前的两个答案。

    重要提示!:如果可以,您应该始终避免对 MSI 进行后处理。您可以创建一个 MST(转换)以在安装期间将其添加到 MSI,或在命令行中将其设置为属性。请参阅这个旧答案:Transforms and PUBLIC PROPERTIES: heavy-weight and light-weight customization of MSI installersfrom section "Customizing Silent Install" onwards


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

    您可以使用此文件和批处理文件对 MSI (sample here) 进行后处理:

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

    a previous answer here关于如何更改 ControlCondition 表中的内容。


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

    或者尝试this source。您需要知道此源的 DTF 是什么。 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);
       }
    }
    

    一些链接

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多