3

我目前在 Inno 脚本的这一部分中有这个

[Run]
Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...

它将在应用程序安装期间运行 vcredist 安装程序。但问题是,如果用户已经安装了它,它会抛出类似的东西

  • 修复/移除
  • 已检测到较新版本

有什么办法可以避免这种情况,只在需要时运行这个安装程序?我应该在 Inno 脚本中添加什么?

编辑:

在@John链接的帮助下,我添加了以下功能

我还使用此站点作为参考来获取 Visual Studio 2010 crt++ 产品代码,并使用注册表中的 Uninstall 文件夹来检测它是否已安装。

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
  RedistInstalled : Boolean;
  Result1 : Boolean;
begin
  RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
  if RedistInstalled then
  begin
    Result := true;
  end else
  begin
    RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
    if RedistInstalled then
    begin
      Result := true;
    end else
    begin
      Result1 := MsgBox('This setup requires Microsoft Visual C++ 2010 Redistributable Package (x86). Please install Visual C++ 2010 Redistributable Package (x86) and run this setup again.  '#13#10' '#13#10'Do you want to download Microsoft Visual C++ 2010 Redistributable Package (x86) now?',
        mbConfirmation, MB_YESNO) = idYes;
      if Result1 =false then
      begin
        Result:=false;
      end else
      begin
        Result:=false;
        ShellExec('open',
          'http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe',
          '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
      end;
    end;
  end;
end;

但是,如果安装程序在下载/安装后继续运行,或者我可以以某种方式调整我以前运行的包含(安装程序)安装程序的代码,那仍然会很好:

 [Run]
    Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...

但这仍然足够好。

4

3 回答 3

0

我遵循“官方” MS 方式https://stackoverflow.com/a/199783/866333。还没有完全流行起来,但它对我有用。

请参阅Inno 设置:验证是否安装了 .NET 4.0,以便工作代码仅检测一个版本。

这是我实际使用的代码的最佳示例:http: //www.vincenzo.net/isxkb/index.php?title= .NET_-_Detect_framework

以上所有内容均针对 .NET 框架。对于 VCRT,我将从 VC2010 中提取可再发行组件,并让 InnoSetup 将内容复制到应用程序的目标安装目录。这样系统文件就不会被更改。

于 2012-06-11T15:13:57.710 回答
0

按照此链接https://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup。它适用于 NET 框架和 VC 可分发软件。您可以查看是否有可分发软件(例如 2013)安装在 PC 中。如果未安装,它将为您安装。我强烈推荐这个。

于 2018-07-07T18:04:48.760 回答
0

也许您可以使用 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs。您可以发现所有版本都已安装。DLL 具有特殊名称,取决于 c++ Retribuitable 安装:

90:Visual Studio 2008(9.0 版)(atl90.dll、msvcr90.dll、msvcp90.dll)

100:Visual Studio 2010(版本 10.0)(atl100.dll、msvcr100.dll、msvcp100.dll)

110:Visual Studio 2012(版本 11.0)…110

120:Visual Studio 2013(版本 12.0)…120

140:Visual Studio 2015(版本 14.0)…140

150:Visual Studio 2017(版本 15.0)(atl150.dll、msvcr150.dll、msvcp150.dll)

160:Visual Studio 2019(版本 16.0)(atl160.dll、msvcr160.dll、msvcp160.dll)

问候,

于 2019-05-27T11:48:12.227 回答