首页 > 解决方案 > 当应用程序是 64 位时,Wix 工具集不会在 64 位程序文件文件夹中安装 WPF 应用程序

问题描述

环境:
Visual Studio 2019
Wix 工具集 - 最新的
WPF .Net Framework 4.8
Dev OS - Windows 10 Pro 64-bit

https://github.com/rodsantest1/programfiles64installer

我已将项目平台设置为 x64,并将 Wix 中的文件夹设置为,ProgramFiles64Folder但它一直安装到Program Files (x86). 我错过了什么?

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"><?define WpfApp1_TargetDir=$(var.WpfApp1.TargetDir)?>
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="RCS" UpgradeCode="68c32f22-6310-415f-abb5-2027e3825dfc">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" CompressionLevel="high" />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder">
                <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="WpfApp1.exe" Guid="7cb2f935-47b4-4df8-9112-742b3f6c8569">
              <File Id="WpfApp1.exe" Name="WpfApp1.exe" Source="$(var.WpfApp1_TargetDir)WpfApp1.exe" />
            </Component>
            <Component Id="WpfApp1.exe.config" Guid="66fdfbdd-5089-4fc9-9742-30a0d914b738">
              <File Id="WpfApp1.exe.config" Name="WpfApp1.exe.config" Source="$(var.WpfApp1_TargetDir)WpfApp1.exe.config" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

在此处输入图像描述

标签: c#wix

解决方案


Candle.exe (-arch):WiX 显然可以为您处理此问题,而无需为每个组件硬编码平台属性:

  • 1)将 -arch 开关传递到candle.exe命令行或
  • 2)InstallerPlatform属性设置在.wixproj MSBuild project.

指定x64-arch并将candle.exe组件自动设置为 64 位(无需硬编码)。

对于 64 位软件包中的任何 32 位组件,请设置Win64='no'(如果您编译 32 位版本的安装程序也可以使用)。


也许尝试添加Win64="yes" attribute到您的组件(假设它们是 64 位组件)并添加x64 as platform(在 WiX 下方使用简化标记,请参见此处- 向下滚动到标记插图):

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64" />

<..>

<Component Feature="ProductFeature" Win64="yes">
   <File Source="C:\Windows\Notepad.exe" />
</Component>

确保在执行此操作后测试任何 32 位 C# 自定义操作。我似乎记得一些熊陷阱。我现在只记得——我害怕。请测试。


链接


推荐阅读