web-dev-qa-db-ja.com

x64をターゲットとするWiX3.6プロジェクトをビルドしますか?

私のソリューションは、プラットフォーム設定「任意のCPU」で構築されています。 WiX 3.6インストーラープロジェクトの設定では、ターゲットプラットフォームを「x64」に設定できないようです。 「x86」のみが使用可能です。 WiXプロジェクトはx64をターゲットにして構築できますか?

22
sean717

WindowsインストーラーはAnyCPUをターゲットにするようにビルドできません。通常、マネージコードをAny CPUに設定して、2回ビルドしますが、インストーラーにはx86とx64の2つの構成があります。

構成を作成する必要がある場合があります。これは、ソリューションを右クリックして構成マネージャーを選択し、プラットフォームの下のドロップダウンを選択することで実行できます。完了すると、wixprojで次のように定義されていることがわかります。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
    <DefineConstants>Debug</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
    <DefineConstants>Debug</DefineConstants>
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>

インストーラーがx86とx64の両方で動作できるようにするには、変数を定義して、インストールのアーキテクチャーを検出および設定します。

<?if $(var.Platform) = x64 ?>
<?define bitness = "(64 bit)" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define bitness = "(32 bit)" ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>

視覚的な手がかりとして、名前にbitness変数を追加します。

<Product Name="My Install $(var.bitness)"

必要に応じて Program Files フォルダを参照してください。

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="$(var.PlatformProgramFilesFolder)">

コンポーネントには、Win64フラグが適切に設定されています。

<Component Win64="$(var.Win64)"
36
David Martin