inno setup製作安裝軟體防止重複安裝原始碼
阿新 • • 發佈:2019-01-29
INNO:檢測程式是否已經安裝,是則彈出解除安裝提示
實現原理:
探測登錄檔HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(即“新增/刪除程式”)中的解除安裝專案,若檢測到則啟動解除安裝確認對話方塊。 在實際應用的時候,各位需要將上面程式碼中“{86D79F54-E485-4011-83FE-FFC558F3DB86}”修改成自己指令碼中的AppId。 基本:檢測程式是否已經安裝試例一:
[code]
function InitializeSetup():boolean; var MykeynotExist:boolean; ResultCode: Integer; uicmd: String; begin MykeynotExist:= true; if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{86D79F54-E485-4011-83FE-FFC558F3DB86}_is1', 'UninstallString', uicmd) then begin MyKeynotExist:= false; Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); end; Result:= MykeynotExist end;
擴充套件:兩次檢測系統是否已經安裝目標程式
先檢測系統是否已安裝官方的程式,若已安裝則彈出一個訊息框,當點選“確定”後自動啟動官方程式解除安裝功能。若檢測不到官方的程式,則再檢測是否已經已經安裝了本程式,若已經安裝,則直接啟動解除安裝程式,若檢測不到則程式開始安裝。這樣做的目的是防止在未解除安裝官方的程式的情況安裝本程式,防止軟體衝突。試例二:
[code]
function InitializeSetup():boolean; var MykeynotExist:boolean; ResultCode: Integer; uicmd: String; begin MykeynotExist:= true; if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{B7F653CF-1BE5-4F40-BA4A-E3BBC6869116}', 'UninstallString', uicmd) then begin MyKeynotExist:= false; MsgBox('安裝程式檢測到您的系統中已經安裝了官方的 {#AppName} '#10#10'你最好先解除安裝此 {#AppName} 再安裝本 {#AppName}',mbInformation,MB_OK) Exec(ExpandConstant('{pf}\InstallShield Installation Information\{{B7F653CF-1BE5-4F40-BA4A-E3BBC6869116}\Setup.exe'), '', '', SW_Show, ewNoWait, ResultCode); end; Result:= MykeynotExist if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{49D79F54-D485-4011-83FE-FFC938F3DB86}_is1', 'UninstallString', uicmd) then begin MyKeynotExist:= false; Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); end; Result:= MykeynotExist end;