在制作Installer中,有一些安裝包,要求先把老版本的程序卸載后,才能安裝最新的程序。這樣就設計涉及如何檢查當前電腦是否已經安裝過老版本的程序,如果安裝過老的程序,就應該提示用戶先把老版本的程序卸載了,才能安裝最新的程序。
InstallShield里的Product Code這個選項,就是一個特定是產品編碼,來確定是否是同一個軟件的同一個版本。一般我們在有新的版本要發布的時候,都需要修改這個Product Code。比如我的產品:
1.0.1:
{2A15BA78-5070-4D58-9D87-1CB4EF9F0591}
1.0.2:
{60576944-6FF1-4B24-99DD-3F1C93ADA9C2}
現在我有最新的2.0.1要發布,其Product Code為:
{E6246A67-2A88-49C4-B949-40AC600BBDAA}
我想安裝2.0.1的時候,檢查1.0.1、1.0.2...等版本是否被安裝過,如果安裝過,提示用戶卸載了再來安裝我的2.0.1。
不管怎么樣我們先在InstallScript的腳本文件中,建立如下的函數:
export prototype CheckOldVersion(HWND); function CheckOldVersion(hMSI) begin RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); if( (RegDBKeyExist("\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{2A15BA78-5070-4D58-9D87-1CB4EF9F0591}")>0) || (RegDBKeyExist("\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{60576944-6FF1-4B24-99DD-3F1C93ADA9C2}")>0) )then MessageBox("1Another version of this product is already installed.\nInstallation of this version cannot continue. To \nconfigure or remove the existing version of this product,\nuse Add/Remove Programs on the Control Panel.",WARNING); abort; endif; return ERROR_SUCCESS; end;
接下去按照安裝工程的類型,分兩種情況:
1.Basic MSI Project
a. 在Behavior and Logic-->Custom Action and Sequences-->Cutom Action右鍵,new InstallShield,名字改為CheckOldVersion
b. Function Name選擇我們剛創建的函數
c.Custom Action and Sequences-->Sequences-->Installtion-->User Interface右鍵-->Insert,選擇我們剛新建的Cutom Action(CheckOldVersion)
2.InstallScript Project
InstallScript Project中只要在OnFirstUIBefore中的Dlg_Start中插入以上代碼就可以了:
當然InstallScript Project也可以使用1的方法來實現版本的檢查。
附:把一個Basic MSI Project轉為InstallScript Project:
Project-->Project Converters-->Convert to InstallScript Project.