14

現在、私が管理している製品用に 2 つの WIX インストーラーがあります。1 つは 32 ビット オペレーティング システム用で、もう 1 つは 64 ビット オペレーティング システム用です。2 つの別個のインストーラーを維持する代わりに、それらを 1 つの NSIS インストーラーに結合して、OS の「ビット数」を「決定」し、適切なバイナリをプログラム ディレクトリにコピーしたいと考えています。誰もこれについて経験があり、NSIS がインストーラーを作成するために使用できる実用的なサンプル スクリプトを提供できますか?

4

3 に答える 3

11

x64.nsh$programfiles32にはいくつかのヘルパー マクロがあり、またはにインストールできます。$programfiles64

編集:

Function .onInit
StrCpy $instdir $programfiles32\MyApp
${If} ${RunningX64}
  StrCpy $instdir $programfiles64\MyApp
${EndIf}
FunctionEnd

...

Section
Setoutpath $instdir
${If} ${RunningX64}
  File /r build\64\*
${Else}
  File /r build\32\*
${EndIf}
SectionEnd
于 2012-06-20T19:29:50.537 に答える
4

私はそれを理解したと信じています...私はまだこれをテストしていませんが、うまくいくはずです...

答えは、ファイルのセットごとに 2 つの「セクション」を作成することです。SEC000032 ビットおよびSEC000164 ビット ファイルの場合。それで、

!include x64.nsh

Function .onInit
  #Determine the bitness of the OS and enable the correct section
  ${if} ${RunningX64}
    SectionSetFlags ${SEC0001} 17
    SectionSetFlags ${SEC0000} 16
  ${else}
    SectionSetFlags ${SEC0001} 16
    SectionSetFlags ${SEC0000} 17
  ${endif}
FunctionEnd

un.onInitアンインストーラーが削除するファイルを認識できるように、関数にも同じロジックが必要になると思います...

于 2012-06-20T20:19:54.677 に答える
4

3.0a0 を使用する単純なユニバーサル インストーラーの場合、少し実験したところ、次の方法でうまくいくことがわかりました。

!include x64.nsh
Function .onInit
  #Determine the bitness of the OS and enable the correct section
  ${If} ${RunningX64}
    SectionSetFlags ${SEC0000}  ${SECTION_OFF}
    SectionSetFlags ${SEC0001}  ${SF_SELECTED}
  ${Else}
    SectionSetFlags ${SEC0001}  ${SECTION_OFF}
    SectionSetFlags ${SEC0000}  ${SF_SELECTED}
  ${EndIf}
FunctionEnd

参照されたセクションの後に関数を配置することを覚えておく必要がありました。各セクションでは、それぞれの 32-bit/ および 64-bit/ ディレクトリにある同じ名前の .exe を参照しているだけなので、アンインストーラーは特別な処理を必要としませんでした。32 ビット システムではテストしていませんが、64 ビット システムでは動作しました。

例:

section "64-bit" SEC0001
  messageBox MB_OK "64-BIT!"
  File "C:\foo\64-bit\some-utility.exe"
sectionEND
于 2013-06-05T16:00:52.727 に答える