Inno设置:如何在单个设置中添加x86和x64 VC ++ 2019可再发行组件?

问题描述 投票:0回答:1

[我正在尝试添加两个体系结构[x32,x64] VC ++ 2019(v14.26.28720.03)可在单个设置中重新分发,已成功编译,但在运行时我在ExtractTemporaryFile('#VcInstall');中遇到了异常

;Version: v14.26.28720.03
[Setup]
 #if arch == "x32"
    #define VcInstall "VC_redist.x86.exe"
 #else
   #define VcInstall "VC_redist.x64.exe"
 #endif

[Files]
   Source: ".\Redist\{#VcInstall}"; DestDir: {tmp}; Flags: dontcopy

 [Run]
    Filename: "{tmp}\{#VcInstall}"; Parameters: "/q /norestart";  Check: VC2019RedistNeedsInstall; Flags: waituntilterminated; StatusMsg: "Installing VC++ 2019 redistributables..." 



  [Code]
    function VC2019RedistNeedsInstall: Boolean;
     var 
       Version: String;
     begin
        if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Version', Version)) then
     begin
     Log('VC Redist Version check : found ' + Version);
       Result := (CompareStr(Version, 'v14.26.28720.03')<0);
     end
    else 
    begin
  Result := True;
 end;
   if (Result) then
     begin
       ExtractTemporaryFile('#VcInstall');
     end;
  end;

在运行时ExtractTemporaryFile('#VcInstall');中获得异常

  ` Internal error: #VcInstall was not found ` 

更新:谢谢:@马丁

 [Code]
   function VC2019RedistNeedsInstall(Arch: string): Boolean;
   var 
   Version: String;
   begin
      Result := True;
     if Arch = 'x64' then
      begin
        if RegKeyExists( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{CB4A0FDE-1126-4AE2-97C6-A243692C3D95}') then
        begin
            Log('VC Redist Version check : found ');
        Result := False;
    end;
 end;

if Arch = 'x32' then
  begin
    if RegKeyExists( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{2F69FB2B-2C48-491C-B249-22C1BDCE1117}') then
      begin
        Log('VC Redist Version check : found ');
       Result := False;
    end;
  end;
 end;
inno-setup
1个回答
3
投票

您的VcInstall代码是预处理程序代码。它是在编译时执行的,因此它考虑了您的开发机器架构。您不想要的。

相反,请使用Is64BitInstallModeIs64BitInstallMode(请阅读其文档,根据您的需要选择合适的文档)。并且您需要无条件地包括安装程序可再发行的两个版本。

IsWin64
IsWin64

(unested)

© www.soinside.com 2019 - 2024. All rights reserved.