Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup 检查是否安装了任何(自定义)应用程序的早期版本并自动卸载(应用程序安装程序是使用NSIS开发的)_Inno Setup - Fatal编程技术网

Inno setup 检查是否安装了任何(自定义)应用程序的早期版本并自动卸载(应用程序安装程序是使用NSIS开发的)

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开发的 还有一件事

在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脚本:


所以请提供代码。非常感谢

首先为应用程序创建一个新的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键值中存储的内容或执行。