在Inno设置中,我想检查是否安装了以前版本的应用程序,如果检测到它,则自动将其卸载。用于检查应用程序是否存在的注册表项是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player
静默卸载命令是这样的:C:\Windows\system32\Adobe\Shockwave 12\uninstaller.exe /S
。 注意 - 应用程序的设置是使用NSIS开发的。
还有一件事,如果找到以前的版本,我希望不显示消息框。同一应用程序的先前版本为v12.1.3.153或更低版本。 完整的Inno脚本供参考:http://pastebin.com/HmrNcFd4
所以请提供代码。非常感谢!!
答案 0 :(得分: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;