2
我正在使用WIX安裝應用程序的項目。其中一個要求是在安裝當前版本之前刪除舊版本。舊版本是不是基於MSI的,它是使用SetupApi(依賴於inf文件)創建的。Wix自定義操作以刪除使用INF文件安裝的舊版本
我想這可以通過自定義操作來實現,邏輯如下:
- 尋找在HKLM \ SOFTWARE 「古」 版\微軟\的Windows \ CurrentVersion \卸載\%NAME如果該值被設置%並提取UninstallString值如果可能
- ,運行,將執行該命令的自定義動作,通常它像RUNDLL32 advpack.dll一個字符串,LaunchINFSection C:\ PROGRA〜1 \ PROGRAM \ file.inf,DefaultUninstall
- 此操作必須在安裝程序之前執行,因爲它們具有共享文件和註冊表項。如果自定義操作在MSI安裝結束時執行的,它會破壞程序
我的問題是:
- 這是拆除舊,基於INF計劃的建議呢?
-
有沒有一種方法可以靜默卸載基於INF的程序?否則,用戶體驗將會非常糟糕 - 一個人正在安裝一個程序,並且他們突然看到一個「卸載程序」窗口。這是違反直覺的。[通過將解決」,3" ,以卸載命令]
如果你有興趣,這裏是做什麼上述我的代碼片段:
<Property Id="ANCIENTVERSION">
<RegistrySearch Id="RegistrySearchAncientVersion" Type="raw"
Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Program"
Name="UninstallString" />
</Property>
<CustomAction Id="removeAncientVersion"
Directory="SystemFolder"
<!--ExeCommand="[ANCIENTVERSION]" regular uninstall-->
ExeCommand="[ANCIENTVERSION],3" <!--silent uninstall-->
Execute="immediate"
Return="check"/>
<InstallExecuteSequence>
<Custom Action='removeAncientVersion' After='InstallValidate'>ANCIENTVERSION</Custom>
</InstallExecuteSequence>
我想你可以創建一個應用程序,並用你自己的相應INF調用SetupAPI函數。這樣你可以禁止默認的進度UI。或者,您可以向用戶顯示一個對話框,您可以在其中說您將要刪除該應用程序的先前版本。 – 2012-02-01 06:36:53
直接調用SetupAPI函數是一個選項 - 但不幸的是,我無法找到有關如何使用SetupAPI執行無提示卸載的任何詳細信息。 有關於靜默安裝的討論,但我不確定這適用於刪除過程。到目前爲止,我的實驗並不成功。 – Alex 2012-02-01 14:04:44