2014-11-23 49 views
0

在Inno設置中,我想檢查是否安裝了先前版本的應用程序,如果它已經自動卸載被檢測到。用於檢查應用程序是否存在的註冊表項是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player 而靜默卸載命令是這樣的:C:\Windows\system32\Adobe\Shockwave 12\uninstaller.exe /S注意 - 應用程序的設置是使用NSIS開發的。檢查是否安裝了以前版本的任何(自定義)應用程序並自動卸載(應用程序設置是使用NSIS開發的)

還有一件事,我想沒有消息框顯示如果以前的版本被發現。同一應用程序的以前版本是v12.1.3.153或更低版本。 任何參考的完整Inno腳本:http://pastebin.com/HmrNcFd4

所以請提供代碼。非常感謝!!

+0

您應該從該章的'DisplayVersion'中比較[Display version](http://stackoverflow.com/a/22356942/960757)值。鍵(請注意,可以安裝64位播放器,因此您應該在兩個視圖中檢查它們)與要安裝的內容。如果該版本較低,請運行「UninstallString」鍵值(或執行['uninstaller from here'](http://www.adobe.com/shockwave/download/alternates/#sp))中存儲的內容。 – TLama 2014-11-24 15:07:09

回答

1

首先,爲應用程序創建一個新的GUID(這就像在註冊表中爲您的應用程序中的主鍵)

; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
#define MyAppGUID "D8C85F98-A805-4237-8D7C-C2F050C19B47" 
#define MyAppId MyAppName + "_" + MyAppGUID 

在節[編號]和功能InitializeSetup添加該指令()。

[Code] 
function InitializeSetup(): Boolean; 
var 
    ResultCode: Integer; 
    ResultStr:string; 
begin 
    // Check if the application is already install 
    // MsgBox('MyAppId = ' + '{#MyAppId}', mbInformation, mb_Ok); 
    begin 
    If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'UninstallString', ResultStr) then begin 
     If ResultStr<>'' then begin 
     ResultStr:=RemoveQuotes(ResultStr); 
      if MsgBox('This application is already install. ' #13#13 'Uninstall it ?', mbConfirmation, MB_YESNO) = idYes then 
      if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
      MsgBox('Erreur !!! ' #13#13 '' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); 
     end; 
    end; 
    end ; 
    Result := True; 
end; 
+0

這與問題無關。問題是關於* foreign *應用程序(Adobe Shockwave Player更具體)。 – TLama 2014-11-24 09:27:48

+0

當然,但他可以找到信息來做他的工作... – v20100v 2014-11-24 09:28:34

+0

還有一件事:我不想要一個消息框,應該卸載prev版本**自動**如果fonund – 2014-11-24 11:49:25

相關問題