Настроить целевой проект WiX 3.6 x64?

Мое решение построено с настройкой платформы "Любой процессор". Для моих WiX настроек проекта установщика 3.6 кажется, что я не могу установить целевую платформу на "x64"; доступен только "x86". Можно ли создать проект WiX с таргетингом на x64?

Ответ 1

Установщики Windows не могут быть сконструированы для таргетинга на любой ЦП, я обычно строю дважды, при этом управляемый код устанавливается в Any CPU, в то время как установщик имеет две конфигурации x86 и x64.

Вы можете обнаружить, что вам нужно создать конфигурации, это можно сделать, щелкнув правой кнопкой мыши на решении и выбрав диспетчер конфигурации, а затем выберите раскрывающееся меню. Когда вы закончите, вы сможете увидеть следующее в вашем 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)"