1. 程式人生 > >inno setup製作安裝軟體防止重複安裝原始碼

inno setup製作安裝軟體防止重複安裝原始碼

                                                                                                         INNO:檢測程式是否已經安裝,是則彈出解除安裝提示   

實現原理:

探測登錄檔HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall(即“新增/刪除程式”)中的解除安裝專案,若檢測到則啟動解除安裝確認對話方塊。 在實際應用的時候,各位需要將上面程式碼中“{86D79F54-E485-4011-83FE-FFC558F3DB86}”修改成自己指令碼中的AppId。 基本:檢測程式是否已經安裝
用Inno Setup打包時,我們有時想要這樣的功能:安裝程式自動檢測是否已經安裝過,是則彈出解除安裝提示,否則正常安裝。以下是程式碼片段:

試例一:

[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;