【问题标题】:How to fix ICE57.Per-User installation如何修复 ICE57.Per-User 安装
【发布时间】:2019-06-14 02:22:47
【问题描述】:

我们的应用程序在运行时将一些设置写入注册表到 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>

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

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

【问题讨论】:

    标签: wix wix3.6


    【解决方案1】:

    您在 HKCU 配置单元上进行操作,该配置单元仅对当前用户可用。

    MSDN 状态:

    ICE57 验证单个组件不会在每台机器和 每个用户的数据。此 ICE 自定义操作检查注册表项、文件、 目录键路径和非广告快捷方式。混合每个用户和 同一组件中的每台机器数据可能只导致部分 在多用户中为某些用户安装组件 环境。

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

    但是,您可能需要考虑问题的根本原因。如果您正在执行每台机器安装,您的安装程序或应用程序可能不应该写入 HKCU,因为它只对当前用户可用,而您的应用程序是为所有用户安装的。

    【讨论】:

    • 这是否意味着我没有权限删除用户的设置?
    • 谢谢,我知道验证抑制。只是每个用户安装产品,而不是每台机器..
    【解决方案2】:

    我在 wix-users mailing list. 上得到了答案,这是 Peter Shirtcliffe 的答案:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2021-07-26
      • 2014-04-17
      • 1970-01-01
      • 2015-08-03
      • 2012-09-08
      • 2015-07-28
      相关资源
      最近更新 更多