我一直在使用Orca手動將屬性「REINSTALLMODE」值「amus」添加到msi屬性表中,每次構建它時都會如此。需要添加一個屬性到VS2010安裝項目中的msi屬性表
我厭倦了這一點。我看着維克斯,但到目前爲止,我認爲它不值得花時間學習它/切換到它,儘管它可以解決這個問題。有沒有一種方法可以在構建完成後自動將這一個屬性插入到msi中?優選地,它將僅使用vanilla visual studio 2010而不依賴於第三方程序或系統環境變量。
有什麼想法?
感謝,
艾薩克
我一直在使用Orca手動將屬性「REINSTALLMODE」值「amus」添加到msi屬性表中,每次構建它時都會如此。需要添加一個屬性到VS2010安裝項目中的msi屬性表
我厭倦了這一點。我看着維克斯,但到目前爲止,我認爲它不值得花時間學習它/切換到它,儘管它可以解決這個問題。有沒有一種方法可以在構建完成後自動將這一個屬性插入到msi中?優選地,它將僅使用vanilla visual studio 2010而不依賴於第三方程序或系統環境變量。
有什麼想法?
感謝,
艾薩克
使用一個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
該屬性稱爲REINSTALLMODE而不是ReinstallMode。你也可能需要做一個不是INSERT的UPDATE。 – 2010-11-18 14:08:48
這個快速入侵很有效。我會弄清楚如何讓它以某種方式發佈。 – 2010-11-18 22:51:55
我的真實想法?你開始走下坡路「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]
是的,當看着威克斯時,我認爲我們不得不採取行動......有一天......當我想要學習新東西的時候。 – 2010-11-18 22:00:10
雖然這個程序將被安裝在<20臺計算機上,但實際上擁有一個msi文件已經是我們正在取代(foxpro)的一大步。 – 2010-11-18 22:02:31
感謝您的幫助,我與其他人一起去,因爲我無法在任何地方找到wiusexfm文件。它應該在這個sdk中,但是sdk是2.5演出,我等不及了。如果我們需要比這更復雜的腳本,我將使用轉換。如果他們變得更糟,我會去wix。感謝您今天的想法! -Isaac – 2010-11-18 22:51:21
另一種選擇是包括在應用程序的安裝文件夾的版本號。
設置應用程序文件夾的默認位置是這樣的:
[ProgramFilesFolder] \ [產品名稱] \ [的ProductVersion]
安裝項目的 'RemovePreviousVersions' 屬性也設置爲true。
這應刪除舊版本的文件夾併爲新版本創建一個新文件夾。
請記住在每次執行新版本時更改安裝項目的版本屬性。
+1 - 這對我來說非常合適。 – 2013-05-14 20:50:26
這工作完美;它刪除了錯誤版本的舊DLL,並且它也安裝了正確的版本!冰雹古斯塔夫! – 2016-09-23 23:33:57
你是我的英雄! – Jeremi 2017-04-11 13:05:52
請注意,如果您在安裝程序中包含任何共享文件,REINSTALLMODE = amus可以做很糟糕的事情。通過替換**所有**版本,它會降級任何東西。如果REINSTALLMODE = emus適合你,我會強烈建議。 – 2010-11-20 16:23:36