2010-04-23 49 views
4

我在寫一個新的重要升級產品。 在我的安裝程序中,我先找到以前版本的配置設置,然後我想卸載以前的版本。WiX:強力推出卸載以前使用CustomAction

我發現了幾個指南,告訴我應該如何讓MSI適合這種升級。

但是,以前不是MSI。
它不是根據最佳實踐。但是,它在註冊表HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall {GUID}中指定了一個UninstallString

使用RegistrySearch我可以很容易地找到下面的命令,我存儲在UNINSTALL_CMD中。

RunDll32 C:\PROGRA~1\COMMON~1\INSTAL~1\PROFES~1\RunTime\10\01\Intel32\Ctor.dll,LaunchSetup 
    "C:\Program Files\InstallShield Installation Information\{GUID}\setup.exe" 
    -l0x9 -removeonly 4: 

我無法獲得執行實際卸載所需的CustomAction掛起。

 <CustomAction Id="ca.UninstPrev" Property="UNINSTALL_CMD" ExeCommand="" /> 

微星記錄說:
信息1721。與此Windows安裝程序包的問題。此安裝完成所需的程序無法運行。聯繫您的支持人員或軟件包供應商。操作:ca.UninstallPrevious,位置:RunDll32 C:\ PROGRA〜1 \ COMMON〜1 \ INSTAL〜1 \ PROFES〜1 \ RunTime \ 10 \ 01 \ Intel32 \ Ctor.dll,LaunchSetup「C:\ Program Files \ InstallShield安裝信息{GUID} \ setup.exe「-l0x9 -removeonly,命令:

任何人看到我在做什麼錯在這裏?

問候
雷夫

回答

5

我沒有申請重新包裝好幾年大陸航空公司在那裏我做了SMS推向18000座森林。我經常在野外使用遺留的應用程序,這些應用程序未使用MSI安裝,需要使用MSI重新部署,一旦完成,我支持將來進行重大升級。

這些以前部署的應用程序通常具有非常破碎和不正確的卸載程序。我將使用SMS來查詢森林以獲取所有已部署的版本,而不是調用這些。然後,我會將這些舊軟件包部署到一個集成實驗室,並計算出每個安裝程序對該機器所做的事情,並編寫自己的聚合「強制清理」自定義操作,該操作能夠將各種版本的應用程序從機器上清除。

我在CostInitialize之前執行了這個自定義操作,這樣當新的MSI執行成本時,它不會受到機器上不再存在的廢話的影響。這對我來說很合適,因爲我將軟件包推送爲System,而且我不必擔心提升問題。如果你想完全符合UAC,你需要從prereq包中運行這個自定義代碼,並讓你的用戶手動運行它,或者將它連接到引導程序之前,在你的MSI之前運行。

2

經過一個良好的夜間睡眠,我發現我的錯誤。 如果你真的http://wix.sourceforge.net/manual-wix3/wix_xsd_customaction.htm答案就在那裏。

我試圖做一個類型50自定義操作,啓動已安裝在系統上的可執行文件。

物業指定的完整路徑的可執行文件來啓動

ExeCommand規定了高於這個可執行程序的命令行參數。

而我的錯在於我沒有將完整的exe +命令行放在Property字段中。

/L

+1

你可以發佈代碼,得到這個工作嗎? – JProgrammer 2010-09-29 05:54:47