2009-12-22 42 views
6

我正在使用VisualStudio2005和vdproj創建一個簡單的MSI文件。當我啓動它時,我需要傳入REINSTALLMODE屬性。將REINSTALLMODE傳遞給MSI文件

我知道這可以通過命令行來完成,像這樣: msiexec.exe /i foo.msi REINSTALLMODE=amus

然而,如果用戶選擇直接點擊MSI(啓動向導),屬性未通過。是否有可能通過VS和vdproj做到這一點?

一些選項我已經調查:

  • 當我通過VS打造微星,它也產生一個setup.exe文件。有沒有辦法通過這可能通過REINSTALLMODE屬性?
  • 我安裝了Orca,它允許我查看/編輯MSI的屬性表。我可以用這種方式添加它,但是我必須在每次執行MSI構建時添加它。

感謝您的任何建議。

回答

4

不幸的是,我找不到在VStudio中正確設置其他MSI屬性的方法。

儘管如此,應該工作的一種方法是這樣的:

  1. 使用Orca創建變換(MST),只有更改屬性REINSTALLMODE。 (簡而言之,您將編輯屬性&另存爲新變換,然後使用「生成變換」命令創建MST。)
  2. 此變換可以使用MSITRAN.EXE命令直接應用於您的MSI(可在相同Windows Installer SDK在哪裏找到Orca)。您可以: (a)找到一種方法讓Visual Studio始終在MSI構建後立即運行MSITRAN命令,或者在構建後手動運行MSITRAN(從批處理文件等),然後運行MSITRAN。測試前。
+0

我喜歡你的風格,謝謝你的詳細回覆。讓我試試這個... – Ken

+1

(我應該嘗試使用WiX,如果這個msi變得更復雜) – Ken

+0

確實,WiX可以讓你訪問所有複雜的Windows安裝程序。但這是一個學習曲線。祝你好運! – ewall

7

我發現了一個更自動的方式來做到這一點。

與如下因素創建一個名爲add_reinstall_prop.vbs(例如)腳本:

set objArgs = WScript.Arguments 
set o_installer = CreateObject("WindowsInstaller.Installer") 
set o_database = o_Installer.OpenDatabase(objArgs(0), 1) 
s_SQL = "INSERT INTO Property (Property, Value) Values('REINSTALLMODE', 'amus')" 
set o_MSIView = o_DataBase.OpenView(s_SQL) 
o_MSIView.Execute 
o_DataBase.Commit 

一個生成後事件添加到您的安裝項目調用與以下腳本:

add_reinstall_prop.vbs $(BuiltOuputPath) 

這會自動將所需的條目添加到內置的MSI中。 然後,您可以使用Orca進行檢查,以便在構建後自動添加條目。

+0

感謝男人它的魅力。我需要使用雙引號 add_reinstall_prop.vbs「$(BuiltOutputPath)」 –