在InstallShield中判斷是否已安裝老版本程序


 
 

     在制作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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM