如何修复ICE57.Per-User安装

Ner*_*lle 6 wix wix3.6

我们的应用程序在运行时将一些设置写入注册表到HKCU配置单元.我想在卸载期间删除此设置.这是代码:

  <Fragment>
    <DirectoryRef Id="INSTALLLOCATION" DiskId="1" FileSource="$(var.SourceDirProject)\">
      <Component Id="DeleteHkcuManufacturerHive" Guid="GUID">
        <Condition>REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE</Condition>
        <CreateFolder/>
        <RemoveRegistryKey Action="removeOnUninstall"
 Id="HKCUkey" Root="HKCU" Key="Software\$(var.Manufacturer)"/>
      </Component>
    </DirectoryRef>
  </Fragment>
Run Code Online (Sandbox Code Playgroud)

ICE57:组件'DeleteHkcuManufacturerHive'具有每台用户和每台机器数据以及每台机器的KeyPath.
为什么我得到ICE57?安装是按用户进行的.提前致谢.

UPD:这里的每台机器元素在哪里?可能是INSTALLLOCATION = Program Files\ManufacturerDirectory?

Bry*_*anJ 7

您在HKCU配置单元上运行,仅适用于当前用户.

MSDN声明:

ICE57验证单个组件不会混合每台计算机和每用户数据.此ICE自定义操作检查注册表项,文件,目录键路径和未公布的快捷方式.在同一组件中混合每用户和每台机器数据可能导致在多用户环境中仅为部分用户部分安装组件.

ICE是您的安装包的验证.如上所述,ICE57旨在确保您不会混淆每台机器和每用户构造.如果您必须在卸载期间删除HKCU中的条目(并且每台计算机上安装了该软件),则可以在"属性">"工具设置"中关闭Visual Studio中的特定验证,如下面的屏幕截图所示:

在此输入图像描述

但是,您可能想要考虑问题的根本原因.如果您正在进行每台计算机的安装,则您的安装程序或应用程序可能不应该写入HKCU,因为它仅供当前用户使用,而您的应用程序是为所有用户安装的.


Ner*_*lle 3

我在wix-users 邮件列表上得到了答案。以下是彼得·谢特克利夫的回答:

ProgramFiles 是每台机器的位置。您只能在提升后才能访问它。如果要在每用户安装中安装程序代码,则应安装到 %LocalAppData%\Programs。

完全消除该条件。该组件将被安装,但只有在您卸载该应用程序后才会生效。此时,当删除该组件时,注册表项也将被删除。