2012-07-04 52 views
5

我有一個打包成MSI的產品。當我的客戶在現有版本的頂部安裝我的產品的新版本時,由於自定義的VBS操作而不能很好地工作,如下所述。我的問題是:我可以如何更改我的MSI,以便在頂部安裝將始終完全卸載任何現有的版本?如何卸載以前的版本作爲msi安裝的一部分?

的細節是:

我有多種部署在各種不同的公司版本的產品。每年大約有一次我的客戶會收到我的產品的新版本並部署到他們公司的工作站。負責部署的人員更喜歡他們可以在舊版本的頂部安裝新版本,而不必在他們的安裝包中包含卸載步驟。

msi安裝會創建一些文件並將其寫入[CommonApplicationData] \ MyApp文件夾。在執行過程中,應用程序在[CommonApplicationData] \ MyApp文件夾中創建更多文件。在卸載過程中,我需要刪除所有這些文件。由於它們不是由msi安裝的,因此它們不會自動卸載,所以我創建了一個vbs腳本,用於刪除該文件夾以及其他任何內容。我把要執行的命令在ExecuteDeferred是VBS:

... 
RemoveFiles 
RemoveFolders 
CreateFolders 
MoveFiles 
InstallFiles 
PatchFiles 
If REMOVE="ALL" Then 
    REM line below is my custom script 
    call VBScript From Installation (MyApp_UninstallCleanup) 
End 
DuplicateFiles 
BindImage 
CreateShortcuts 
... 

到目前爲止好和安裝&卸載時,它工作正常。但是,如果我在現有版本的頂部安裝新版本的產品,則會按以下順序進行安裝: a)安裝新版本,在[CommonApplicationData] \ MyApp文件夾中創建各種文件,並在[程序文件] \ MyApp ...覆蓋舊版本的文件 b)運行我的vbs,刪除[CommonApplicationData] \ MyApp文件夾

我的新MSI中的升級表中列出了舊版本的GUID,並且除了這個自定義腳本之外,升級過程似乎還行。

該產品本身非常小,所以如果安裝程序在安裝新版本之前總是刪除以前的版本,那將會很好。工作站上沒有需要保留的用戶設置,文件大小也不大。因此,爲了簡單起見,我希望卸載以前的版本,而不是僅更新已更改的位。

有沒有一種方法可以改變我的新MSI,以便它會先卸載以前的版本?

值得注意的是,我有許多公司已經安裝了包含自定義vbs的MSI的現有版本。所以該解決方案確實需要能夠應對現有安裝的msi。

我用Wise Installation Express 7.0創建了MSI。

謝謝!!

(交叉貼here

回答

5

計劃之前RemoveExistingProducts行動InstallInitialize行動:

在這種情況下,安裝程序完全安裝新的應用程序之前刪除舊的應用程序。這是一個效率低下的行爲,因爲所有重用的文件必須重新複製。賽門鐵克論壇

如果您已經使用了您的安裝標準智者模板

1

回答from EdT,那麼RemoveExistingProducts操作是在InstallExecute序列的末端測序。雖然技術上這是最「高效」的放置,但除非在創建新軟件包以升級舊版軟件時非常小心地運行UpgradeSync,否則最終結果通常是丟失的文件或其他偏差之一。

修復程序是重新請求RemoveExistingProducts操作,以便它在InstallValidate和InstallInitialize之間運行。這可確保在安裝新版本之前完全刪除舊應用程序。

在幫助文件MSI.CHM中查找「RemoveExistingProducts」,以獲取有關定位此操作的選項的更詳細說明。

相關問題