3

アプリケーションに適切なインストール フォルダを設定しようとしています。 インストーラーが 32 ビット システム用か 64 ビット システム用かを検出できますか? x64 システムに x32 アプリケーションをインストールすると、InstallDir が正しくないためです。

x32 および x64 インストーラー用のビルド スクリプトが 1 つあり、x64.nshを使用してプログラム ファイルのパスを定義します。ただし、ここに問題があります。インストーラーが x64 システムを検出しても、現在のビルドが x32 の場合、「C:\Program Files (x86)」ではなく「C:\Program Files」にインストールされます。

最悪のシナリオでは、2 つのインストーラー (x32、x64) に対して 2 つのビルド スクリプトを作成する必要がありますが、それは避けたいと考えています。

では、インストーラーが 32 ビット システム用か 64 ビット システム用かを定義する方法はありますか?

4

2 に答える 2

0

インストールするアプリケーションが常に 32 ビットの場合は、そのまま使用しますInstallDir "$ProgramFiles\MyApp"

インストーラーに同じアプリの 32 ビット バージョンと 64 ビット バージョンの両方が含まれていて、"ネイティブ" バージョンをインストールする場合は、.onInit で $InstDir を自分で設定する必要があります。

!include LogicLib.nsh
!include x64.nsh
; Don't use InstallDir[RegKey] so $InstDir is empty by default

Function .onInit
${If} $InstDir == "" ; Don't override setup.exe /D=c:\custom\dir
    ${If} ${RunningX64}
        StrCpy $InstDir "$ProgramFiles64\MyCompany\MyApp"
    ${Else}
        StrCpy $InstDir "$ProgramFiles32\MyCompany\MyApp"
    ${EndIf}
${EndIf}
FunctionEnd

Section
SetOutPath $InstDir
${If} ${RunningX64}
    File "AMD64\myapp.exe"
${Else}
    File "i386\myapp.exe"
${EndIf}
SectionEnd
于 2013-10-15T16:56:00.303 に答える