在msi中启用CustomAction表

时间:2016-02-22 08:27:29

标签: c# mysql wix windows-installer

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

如何使用c#code

在msi中创建新表CustomAction

enter image description here

如果表已经存在,我可以正确添加。有没有办法在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中有一个选项可以激活表。 / p>

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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