【问题标题】:Enabling CustomAction table in msi在 msi 中启用 CustomAction 表
【发布时间】:2016-02-25 02:11:59
【问题描述】:

我正在尝试向我的 CustomActions 表中添加一个新的自定义操作。问题是如果我用 orca 打开它,msi 中没有自定义操作表。所以在插入表之前我应该​​创建表和然后插入。

如何通过c#代码在msi中创建新表CustomAction

如果表已经存在,我可以正确添加。有没有办法在 msi 中激活具有预定义定义的自定义操作表。

检查表是否存在的代码是这样的

 if (db3.TablePersistent["CustomAction"].ToString() == "msiEvaluateConditionTrue")
            {

                string query = "INSERT INTO CustomAction (Action,Type,Source,Target) VALUES ('" + name + "'," + type + ",'" + source + "','" + target + "')";
                Console.WriteLine(query);
                vw3 = db3.OpenView(query);
                vw3.Execute(null);
                db3.Commit();
                vw3.Close();
            }

如果表不存在,我的疑问是如何创建表。或者是否有一些直接的方法来启用这些表。工具 Orca 中有一个选项可以激活表,如果它在数据库中不持久。

【问题讨论】:

  • 您是否创建了此 MSI?如果是这样,使用哪个工具?
  • 如果您使用 WiX 创建 MSI,请使用 EnsureTable 元素。

标签: c# mysql wix windows-installer


【解决方案1】:

将空的“CustomAction”表保存到来自 Orca 的 .idt 文件,该文件来自具有空 CustomAction 表的 msi。然后我们可以使用windows工具包中可用的Msidb.exe将表添加到msi。

Msidb.exe -d File.msi -i CustomAction.idt -f "C:\ABC"

最后一个参数 -f 是给出 .idt 文件所属的文件夹路径。这会将表添加到 msi 中,之后我们可以执行插入语句。

【讨论】:

    【解决方案2】:

    我认为您只需要 SQL Create Table 命令 - 我相信它就是这样工作的。您需要表结构的定义。

    更具体地说,我相信所有创建 MSI 文件的工具(可能包括 Orca)都使用 Windows SDK/Kits 中的 schema.msi 作为他们所做的任何事情的模板。这些工具并不隐含地知道 MSI 文件的样子——它们依赖于 Microsoft 的模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多