Inno setup 检查是否安装了任何(自定义)应用程序的早期版本并自动卸载(应用程序安装程序是使用NSIS开发的)
在Inno安装程序中,我想检查是否安装了应用程序的早期版本,如果检测到,则自动卸载。检查应用程序是否存在的注册表项如下:HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player 静默卸载命令如下:C:\Windows\system32\Adobe\Shockwave 12\uninstall.exe/S . 注意:应用程序的设置是使用NSIS开发的 还有一件事,如果找到以前的版本,我不希望显示任何消息框。同一应用程序的早期版本为v12.1.3.153或更低版本。 任何参考的完整Inno脚本:Inno setup 检查是否安装了任何(自定义)应用程序的早期版本并自动卸载(应用程序安装程序是使用NSIS开发的),inno-setup,Inno Setup,在Inno安装程序中,我想检查是否安装了应用程序的早期版本,如果检测到,则自动卸载。检查应用程序是否存在的注册表项如下:HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player 静默卸载命令如下:C:\Windows\system32\Adobe\Shockwave 12\uninstall.exe/S . 注意:应用程序的设置是使用NSIS开发的 还有一件事
所以请提供代码。非常感谢 首先为应用程序创建一个新的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
在[代码]部分和函数初始化设置中添加此指令
[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;
这与提出的问题无关。问题是关于国外应用程序Adobe Shockwave Player的,更具体一点。还有一件事:我不想要一个消息框,如果是Foundand,prev版本应该自动卸载。还有一件事:我只想检查名为“Shockwave”的组件,查看我的完整iss。如果用户未选择“冲击波”组件,则不应进行检查。不太重要,但如果可能的话,也可以加上:hiv20100v,您的代码不工作。这是我新修改的inno脚本,包含您的代码:。不是语法错误,我在安装旧版本的shockwave后测试了它,然后运行新版本。没有对话框,旧版本未卸载!启动regedit.exe并验证HKLM中关键软件\Microsoft\Windows\CurrentVersion\Uninstall{MyAppId}\u is1的内容。使用定义定义MyAppId Adobe Shockwave Player,您必须找到类似此软件\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player\u is1的条目。您的注册表中可能不存在此项。您应该从该注册表的DisplayVersion中获取值。请注意,可以安装64位播放机,因此您应该在这两个视图中对照要安装的内容进行检查。如果该版本较低,请运行UninstallString键值中存储的内容或执行。