Inno setup 如何使用Inno检测和安装必备软件?

Inno setup 如何使用Inno检测和安装必备软件?,inno-setup,Inno Setup,我需要为使用Inno的应用程序安装一些先决条件。我只希望在必备软件不存在或是早期版本时安装必备软件。我找到了一些解决方案,例如: [Code] procedure InstallFramework; var ResultCode: Integer; begin if not Exec(ExpandConstant('{tmp}\NDP472-KB4054530-x86-x64-AllOS-ENU.exe'), '/q /norestart', '', SW_SHOW, ewWaitUnt

我需要为使用Inno的应用程序安装一些先决条件。我只希望在必备软件不存在或是早期版本时安装必备软件。我找到了一些解决方案,例如:

[Code]
procedure InstallFramework;
var
  ResultCode: Integer;
begin
  if not Exec(ExpandConstant('{tmp}\NDP472-KB4054530-x86-x64-AllOS-ENU.exe'), '/q /norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
  begin
    { you can interact with the user that the installation failed }
    MsgBox('.NET installation failed with code: ' + IntToStr(ResultCode) + '.',
      mbError, MB_OK);
  end;
end;
这看起来不像是检查框架是否已经存在,或者可能已经安装了哪个版本


使用什么模式查找以前安装的版本,如果存在,则检查版本;如果版本较旧或不存在,则安装?

这是一个简单的答案,可以帮助您找到多种可能的解决方案之一

在测试环境(或您的计算机)中,您安装了应用程序和所有必需的组件,使它们显示在控制面板的程序和功能中

然后在注册表中搜索程序和功能中显示的名称

您希望找到包含该名称的值DisplayName。你可以在一把钥匙里找到它

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\, HKEY\U LOCAL\U MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

HKEY\ U当前\用户\软件\ Microsoft\Windows\CurrentVersion\Uninstall

,具体取决于安装类型

注意:如果对应键中的值SystemComponent为1,则某些组件可能对程序和功能隐藏

然后,您可以在pascal脚本中使用类似的内容检查注册表项是否存在

[Code]
function test(bitness: integer; productCode: String): Boolean;
begin
    if RegValueExists(bitness, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + productCode, 'DisplayName') then Result := True else Result := False;
end;

您可以在函数PrepareToInstall(var NeedsRestart:Boolean)中调用此函数:String;或者使用检查参数(在inno setup help中搜索)

检测应用程序的安装取决于应用程序。