COM コンポーネントを配布したい

DLL の構成

例えば Windows エクスプローラー 向けの サムネイル ハンドラー を配布する場合です:

  • CmdThumbGen.dll (x86)

  • CmdThumbGen.dll (x64)

  • CmdThumbGen.dll (Arm64X)

備考:

  • COM コンポーネントは 32 ビット版と 64 ビット版のバイナリーを好みの場所へ配置できます。 レジストリ リダイレクター の働きによります。

  • CmdThumbGen の開発レポジトリはこちら: kenjiuno/ThumbGensPack: Thumbnail Generator pack for Windows 7 Explorer

  • Arm64 版よりも Arm64X 版での配布が好ましいです

セットアップの構成

単一の NSIS セットアップにまとめる案が考えられます:

  • Setup_ThumbGensPack.exe (Windows 7, 8.1, 10, 11 向け)

NSIS セットアップでの判定方法の例

公式の NSIS で作成したセットアップは x86 アプリとして動作します。

NSIS スクリプトでは、プラットフォームを判別するための条件分岐を記述しつつ、プラットフォーム固有のアクションを追加していきます。

; ...

!define CmdThumbGen_X86 "CmdThumbGen\Release"
!define CmdThumbGen_X64 "CmdThumbGen\x64\Release"
!define CmdThumbGen_ARM64X "CmdThumbGen\ARM64EC\Release"

; ...

!include "LogicLib.nsh"
!include "x64.nsh"

; ...

Section "CmdThumbGen 導入"
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR

  File "${CmdThumbGen_X86}\CmdThumbGen.dll"
  File "${CmdThumbGen_X86}\CmdThumbGen.pdb"

  ExecWait 'REGSVR32 /s "$OUTDIR\CmdThumbGen.dll"' $0
  DetailPrint "結果: $0"
SectionEnd

Section /o "CmdThumbGen(x64) 導入" SEC_CMDTHUMBGEN_X64
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR\x64

  File "${CmdThumbGen_X64}\CmdThumbGen.dll"
  File "${CmdThumbGen_X64}\CmdThumbGen.pdb"

  ExecWait 'REGSVR32 /s "$OUTDIR\CmdThumbGen.dll"' $0
  DetailPrint "結果: $0"
SectionEnd

Section /o "CmdThumbGen(Arm64X) 導入" SEC_CMDTHUMBGEN_ARM64X
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR\x64

  File "${CmdThumbGen_ARM64X}\CmdThumbGen.dll"
  File "${CmdThumbGen_ARM64X}\CmdThumbGen.pdb"

  ExecWait 'REGSVR32 /s "$OUTDIR\CmdThumbGen.dll"' $0
  DetailPrint "結果: $0"
SectionEnd

Function .onInit
  ${If} ${IsNativeAMD64}
    SectionSetFlags ${SEC_CMDTHUMBGEN_X64} ${SF_SELECTED}
  ${EndIf}

  ${If} ${IsNativeARM64}
    SectionSetFlags ${SEC_CMDTHUMBGEN_ARM64X} ${SF_SELECTED}
  ${EndIf}
FunctionEnd