2010-11-18 76 views
2

我一直在使用Orca手動將屬性「REINSTALLMODE」值「amus」添加到msi屬性表中,每次構建它時都會如此。需要添加一個屬性到VS2010安裝項目中的msi屬性表

我厭倦了這一點。我看着維克斯,但到目前爲止,我認爲它不值得花時間學習它/切換到它,儘管它可以解決這個問題。有沒有一種方法可以在構建完成後自動將這一個屬性插入到msi中?優選地,它將僅使用vanilla visual studio 2010而不依賴於第三方程序或系統環境變量。

有什麼想法?

感謝,

艾薩克

+1

請注意,如果您在安裝程序中包含任何共享文件,REINSTALLMODE = amus可以做很糟糕的事情。通過替換**所有**版本,它會降級任何東西。如果REINSTALLMODE = emus適合你,我會強烈建議。 – 2010-11-20 16:23:36

回答

5

使用一個VBScript

改變現有的屬性

set o_installer = CreateObject("WindowsInstaller.Installer") 
set o_database = o_Installer.OpenDatabase("path_to_your_msi", 1) 
s_SQL = "SELECT Property, Value FROM Property Where Property = 'ReinstallMode'" 
Set o_MSIView = o_DataBase.OpenView(s_SQL) 
o_MSIView.Execute 
Set o_MSIRecord = o_MSIView.Fetch 
o_MSIRecord.StringData(2) = "amus" 
o_MSIView.Modify 2, o_MSIRecord 
o_DataBase.Commit 

添加一個新的屬性

set o_installer = CreateObject("WindowsInstaller.Installer") 
set o_database = o_Installer.OpenDatabase("path_to_your_msi", 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 
+0

該屬性稱爲REINSTALLMODE而不是ReinstallMode。你也可能需要做一個不是INSERT的UPDATE。 – 2010-11-18 14:08:48

+0

這個快速入侵很有效。我會弄清楚如何讓它以某種方式發佈。 – 2010-11-18 22:51:55

1

我的真實想法?你開始走下坡路「VDPROJ很好,除了我也需要它做[x]」。你會找到一種方法來破解它,然後你會重複。在你知道它之前,你將擁有一個frankenstein解決方案,它可以爲你的MSI做各種奇怪的事情,因爲這個工具沒有公開它,或者更糟的是它實現了錯誤。我真的建議去InstallShield 2010LE/Pro或者WiX。但是,如果您只想將REINSTALLMODE從omus更改爲amus,那麼我建議您使用Orca創建一次轉換,然後在後期構建步驟中將轉換應用於構建的MSI。

cscript WiUseXfm.vbs [path to original database][path to transform file][options] 

Apply a Transform

+0

是的,當看着威克斯時,我認爲我們不得不採取行動......有一天......當我想要學習新東西的時候。 – 2010-11-18 22:00:10

+0

雖然這個程序將被安裝在<20臺計算機上,但實際上擁有一個msi文件已經是我們正在取代(foxpro)的一大步。 – 2010-11-18 22:02:31

+0

感謝您的幫助,我與其他人一起去,因爲我無法在任何地方找到wiusexfm文件。它應該在這個sdk中,但是sdk是2.5演出,我等不及了。如果我們需要比這更復雜的腳本,我將使用轉換。如果他們變得更糟,我會去wix。感謝您今天的想法! -Isaac – 2010-11-18 22:51:21

3

另一種選擇是包括在應用程序的安裝文件夾的版本號。
設置應用程序文件夾的默認位置是這樣的:
[ProgramFilesFolder] \ [產品名稱] \ [的ProductVersion]
安裝項目的 'RemovePreviousVersions' 屬性也設置爲true。
這應刪除舊版本的文件夾併爲新版本創建一個新文件夾。
請記住在每次執行新版本時更改安裝項目的版本屬性。

+0

+1 - 這對我來說非常合適。 – 2013-05-14 20:50:26

+0

這工作完美;它刪除了錯誤版本的舊DLL,並且它也安裝了正確的版本!冰雹古斯塔夫! – 2016-09-23 23:33:57

+0

你是我的英雄! – Jeremi 2017-04-11 13:05:52