我正在尝试向我的CustomActions表添加一个新的自定义操作。问题是msi中没有自定义操作表,如果我用orca.So打开它之前插入表中我应该创建表和然后插入。
如何使用c#code
在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中有一个选项可以激活表。 / p>
答案 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语句。