簡體   English   中英

在MSI中啟用CustomAction表

[英]Enabling CustomAction table in msi

我正在嘗試向我的CustomActions表中添加新的自定義動作。問題是,如果我使用orca打開了msi,則在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工具中有一個選項可以激活一個表,如果該表不能持久存儲在數據庫中。

在此處輸入圖片說明

我認為您只需要SQL Create Table命令-我相信它就是這樣工作的。 您需要定義表結構。

更具體地說,我相信所有創建MSI文件的工具(也許包括Orca)都將Windows SDK / Kits中的schema.msi用作其工作的模板。 這些工具並不隱式知道MSI文件是什么樣子-它們依賴於Microsoft的模板。

將空的'CustomAction'表保存到Orca的.idt文件中,該文件來自具有CustomAction表為空的msi。 然后,我們可以使用帶有Windows工具包的Msidb.exe將表添加到msi。

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

最后一個參數-f給出.idt文件所屬的文件夾路徑,這會將表添加到msi中,之后我們就可以執行插入語句了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM