9

我正在尝试在 WiX 3.6 中使用每台机器和仅 x64 架构设置编写 Windows 安装程序脚本。我有以下项目结构(缩短):

<Directory Id="ProgramFiles64Folder" Name="PFiles">
    <Directory Id="APPLICATIONFOLDER" Name="My Company">
      <Directory Id="ProductFolder" Name="My Product">
        <Component Id="MainComponent" Guid="" Win64="yes" KeyPath="yes">
            ...
        </Component>
        <Directory Id="DataFolder" Name="Data">
          <Directory Id="Machine" Name="Machine" >
            <Directory Id="MachinesFolder" Name="Machines">
              <Component Id="Machine1" Guid="{74341536-72DF-48C3-95E8-2851D9FA8318}" Win64="yes" KeyPath="yes">
                        ...
              </Component>
            </Directory>
            <Directory Id="TemplateFolder" Name="Template">
              <Component Id="TemplateFiles" Guid="{A0D0C225-D604-4B84-971D-41687A30EC36}" Win64="yes" KeyPath="yes">
                <File Id="Template1.rsbak" Source="$(var.SolutionDir)bin\Release\File1.rsbak" />
                            ...
              </Component>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
</Directory>

问题是我ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file在编译时收到 TemplateFiles 组件的错误。让我感到困惑的是,我在另一个项目(工作)中使用了类似的结构,并且在我的项目中有几个具有完全相同设置的组件(上面未显示)。当所有其他组件都正确安装到 Program Files 时,为什么这个 - 并且只有这个 - 组件坚持安装到用户配置文件?

4

1 回答 1

8

看起来msi之间Program FilesUsers\UserName\Documents文件夹之间存在显着差异。最后一个在您的示例中被引用:

<Directory Id="DataFolder" Name="Data">

我遇到了类似的问题,并在博客文章中找到了答案 - https://robmensching.com/blog/posts/2007/4/27/how-to-create-an-uninstall-shortcut-and-pass-all -这/

简而言之,您需要RegistryKeyHKCUroot 上定义为子元素Component并将RemoveFolder元素作为子元素添加到Directory. 有关完整示例,请参见上面的链接。此外:

  • 从元素中删除KeyPath属性Component
  • RemoveFolder可能必须为所有文件夹定义。我为此使用了没有文件的虚拟组件
于 2012-12-11T08:33:59.303 回答