如何修复ICE57。每用户安装

6

我们的应用程序在运行时将一些设置写入到HKCU hive中的注册表中。我希望在卸载期间删除这些设置。以下是代码:

  <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”具有既包含每个用户数据又包含每台计算机数据的关键路径。
为什么我会收到ICE57错误?安装是针对每个用户的。谢谢提前。 更新:这里有哪些是每台计算机的元素呢?也许是INSTALLLOCATION=Program Files\ManufacturerDirectory吗?
2个回答

7
您正在操作HKCU hive,该hive只对当前用户可用。 MSDN指出:
ICE57验证各个组件不会混合使用每台机器和每个用户的数据。此ICE自定义操作检查注册表条目、文件、目录密钥路径和非广告快捷方式。在同一组件中混合使用每个用户和每台机器的数据可能导致在多用户环境中仅为某些用户安装组件的部分内容。
这些ICE是对安装包进行验证的。如上所述,ICE57是为了确保您不会混淆每台机器和每个用户的结构。如果您必须在卸载期间删除HKCU条目(并且该软件是按照机器安装的),则可以在Visual Studio中在属性 > 工具设置中关闭特定的验证,如下面的屏幕截图所示:

enter image description here

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


这是否意味着我没有权限删除用户的设置? - Nerielle
谢谢,我知道如何禁用验证。只是该产品是按用户安装的,而不是按机器安装的。 - Nerielle

3

我在wix-users邮件列表上得到了一个答案。以下是Peter Shirtcliffe的回答:

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

完全删除条件。组件将被安装,但在卸载应用程序之前不会产生任何效果。当组件被移除时,注册表键也将被移除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接