64bit アプリケーションをインストールするインストーラーを作成する

ページ作成日 :

環境

Visual Studio
  • Visual Studio Community 2017
  • Visual Studio Community 2019
WiX Toolset
3.11.2

※他のバージョンでも動作しますが未確認です

はじめに

WiX では明示的に指定しない限りは 32bit アプリケーションとしてインストールを行います。 例えば、64bit OS に対してインストールを行うと「C:\Program Files (x86)\」フォルダにインストールされます。

ここでは 64bit アプリケーションとしてインストールするための設定について説明します。 すでに WiX のプロジェクトを作成し、インストーラーが作成できている前提としています。

ちなみに 64bit アプリケーションをインストールするといっても 32bit アプリケーションなのか 64bit アプリケーションなのかは 含めたファイルに依存しますので、あくまでもインストーラー側の設定と思ってください。 インストーラーを 64bit 対応することによって明示的に 32bit OS へのインストールを防ぐこともできます。

事前準備

  • WiX でのインストーラー作成が出来ているものとします。

プロジェクトの作成

新規で 64bit インストーラー用のプロジェクトを作成します。 もし 32bit と 64bit のインストーラーを作成する必要がる場合、 32bit とは別のプロジェクトに分けたほうが同時にビルドできるので便利です。

image

image

image

プロジェクトを作成したら 32bit 版と同じようにプロジェクトの設定を行い、 32bit 版で作成したファイルを 64bit のプロジェクトにコピーします。

image

64bit 版でも必要なファイルはほぼ 32bit 版と同じなのでファイルを共有してしまう方法もありますが、 説明が少し複雑になってしまいますので今回は割愛します。

インストーラープロジェクトの 64bit 設定

64bit アプリケーションのインストーラーを作成するにはプロジェクトの設定を変更しますが、 以下の A, B どちらかのパターンを設定すれば OK です。

さらに別パターンとして Package の Platform 属性に x64 を指定する方法がありますが、 現在非推奨であり設定しても効果がなく、さらにインストールするファイルごとに 64bit パラメータを設定しなければならないため、 非効率なのでおすすめはしません。

A.プロジェクトに x64 のプラットフォームを追加

初期状態ではプロジェクトに x86 のビルド構成しか存在していないので x64 を追加します。

メニュー「ビルド」「構成マネージャー」を選択します。

image

ソリューション構成を Release にしておき、x64 プロジェクトのプラットフォームから「新規作成」を選択します。

image

新しいプラットフォームを「x64」、コピー元を「x86」、新しいソリューション プラットフォームは作成しないようにします。

image

追加したらもう一度プラットフォームを開き。「編集」を選択します。 ちなみに x64 追加直後 x64 が一覧にない場合がありますが、画面を閉じて再表示すると一覧に追加される場合があります。

image

WiX プロジェクトの不具合で初期選択が x64 に切り替わらず x86 になってしまう現象があるため x86 を削除します。 しかしこれも不具合で x86 を消しても復活してしまう場合があります。 確実に削除したい場合はプロジェクトファイル「wixproj」をテキストエディタで開いて該当のコードを削除してしまうのがよいでしょう。

image

下の図のようになってれば OK です。右上のアクティブ プラットフォームが x86 のままなので気になるようであれば編集で名前を変更してください。

image

B.コンパイルパラメータに「-arch x64」を追加

64bit インストーラーのプロジェクトを右クリックして「プロパティ」を開きます。

image

左のタブから「Tool Settings」を選択し、構成を「Release」に変更。「Additional parameters」の「Compiler」に「-arch x64」を入力します。

image

インストール先フォルダを 64bit のフォルダにする

Product.wxs を開きます。

以下の「Directory Id="ProgramFilesFolder"」の箇所を「Directory Id="ProgramFiles64Folder"」に置き換えます。

<Wix>
	<Fragment>
		<Directory Id="TARGETDIR" Name="SourceDir">
			<Directory Id="ProgramFiles64Folder">

スタートメニューのショートカットのファイル名またはフォルダ名を変更する

必須ではありませんが、32bit の設定をそのままコピーすると 32bit アプリケーションと 64bit アプリケーションのスタートメニューの ショートカットがかぶってしまいます。

必要に応じて変えてください。

<Wix>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFiles64Folder">
        <Directory Id="INSTALLFOLDER" Name="LittleSaviorTrial">
          <Component Win64="yes" Id="LITTLESAVIORTRIAL.EXE" DiskId="1" Guid="E382FBDF-73E0-4511-A73D-E9798449F30E">
            <File Id="LITTLESAVIORTRIAL.EXE" Name="LittleSaviorTrial.exe" Source="LittleSaviorTrial\LittleSaviorTrial.exe" KeyPath="yes">
              <Shortcut Id="LITTLESAVIORTRIAL.EXE_shortcut" Name="ここのファイル名を 64bit 版に変える" Directory="ProgramMenuDir" WorkingDirectory="INSTALLDIR" Icon="LITTLESAVIOR.ICO" IconIndex="0" Advertise="yes" />
  <!-- 中略 -->
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ProgramMenuDir" Name="ここのフォルダ名を 64bit 版に変える">
      <Component Id="ProgramMenuDir" Guid="5A73CC85-A1B3-4409-8C4F-3E8E888A7167">
        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />

Product.wxs 全体

この状態でビルドを行い、エラー無くインストーラーが作成されることを確認してください。 64bit OS 環境でインストール後、「C:\Program Files\」にフォルダとファイルが作成されるか確認します。

image

また、32bit OS 環境でインストールしようとしたときにエラーになるか確認します。

image