【问题标题】:Inno Setup: Use "Program Files" directory on both 32bit/64bit systems with {pf}Inno Setup:在 32 位/64 位系统上使用“程序文件”目录和 {pf}
【发布时间】:2016-07-18 18:31:48
【问题描述】:

常量{pf}是目录

C:\程序文件

适用于 32 位系统和

C:\Program Files (x86)

适用于 64 位系统。

但是我想使用目录

C:\程序文件

适用于 32 位和 64 位系统。我怎样才能做到这一点?

【问题讨论】:

    标签: windows architecture installation inno-setup


    【解决方案1】:

    使用scripted constant 喜欢:

    [Setup]
    DefaultDirName={code:GetProgramFiles}\My Program
    
    [Code]
    
    function GetProgramFiles(Param: string): string;
    begin
      if IsWin64 then Result := ExpandConstant('{commonpf64}')
        else Result := ExpandConstant('{commonpf32}')
    end;
    

    尽管只有在为相应平台动态生成二进制文件时才应使用此方法。就像你的情况一样,如果理解正确,你可以为各自的架构编译 Java 二进制文件。


    您也可以使用64-bit install mode

    那么你可以简单地使用{autopf} constant(以前的{pf}):

    [Setup]
    DefaultDirName={autopf}\My Program
    

    如果您在安装程序中有单独的 32 位和 64 位二进制文​​件,请使用如下脚本:

    [Files]
    Source: "MyDll32.dll"; DestDir: "{pf32}\My Program"; Check: not IsWin64
    Source: "MyDll64.dll"; DestDir: "{pf64}\My Program"; Check: IsWin64
    

    另见:

    【讨论】:

      【解决方案2】:

      如果您对 64 位和 32 位安装使用单个安装程序,那么您应该使用 ArchitecturesInstallIn64BitMode 安装指令。这将在 64 位系统上安装时将 {pf} 和其他脚本常量更改为 64 位版本,在 32 位系统上安装时将其更改为 32 位版本。

      您显然还想使用 Martin 示例中的 Check 来确保您只安装了正确的二进制文件。

      例如:

      #define MyAppName "MyAwesomeApp"
      [Setup]
      ArchitecturesInstallIn64BitMode=x64
      AppName={#MyAppName}
      DefaultDirname={pf}\{#MyAppName}
      
      [Files]
      Source: "MyApp_32bit.exe"; DestDir: "{app}"; Check not Is64BitinstallMode;
      Source: "MyApp_64bit.exe"; DestDir: "{app}"; Check Is64BitinstallMode;
      

      【讨论】:

        猜你喜欢
        • 2020-08-23
        • 2011-06-17
        • 1970-01-01
        • 2011-03-24
        • 2019-07-06
        • 2012-09-01
        • 2015-09-26
        • 2011-07-07
        • 1970-01-01
        相关资源
        最近更新 更多