这个问题是在询问ICE57验证器是否会创建虚假的正面错误报告。
我正在使用WIX 3.9生成安装程序。我想要一个每台机器的安装,带有非广告的快捷方式。
这个WXS示例安装一个文本文件和一个打开该文本文件的快捷方式:
如果将上述示例构建为MSI包,则会出现以下内部一致性评估器(ICE)错误:
D:\Robert\Documents\Visual Studio 2013\Projects\ShortcutTest\Product.wxs(27,0): error LGHT0204: ICE57: Component 'ShortCut' has both per-user data and a keypath that can be either per-user or per-machine. ICE57 暗示了每个用户和每台计算机数据之间的不一致性。但是,组件的关键路径是HKMU,在单台机器安装中解析为HKLM(HKEY_LOCAL_MACHINE)。快捷方式的位置源自“ProgramMenuFolder”,在单台机器安装中解析为
您可以通过禁止ICE57将安装程序包构建为MSI。生成的MSI包安装时没有明显的错误。多个用户可以登录并访问快捷方式。任何用户都可以卸载软件包,并删除软件包中的所有资源。 Wix create non advertised shortcut for all users / per machine的答案有一个有趣的解决方法,即编写广告快捷方式,然后关闭广告。看起来是创建未广告的快捷方式的迂回方法。
ICE57错误的常见修复方法是将
在这种情况下,ICE57错误是否是内部一致性评估器中的错误?还是我理解错了什么?
我正在使用WIX 3.9生成安装程序。我想要一个每台机器的安装,带有非广告的快捷方式。
这个WXS示例安装一个文本文件和一个打开该文本文件的快捷方式:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="ShortcutTest" Language="1033"
Version="1.0.0.0" Manufacturer="Widget Co"
UpgradeCode="--YOUR GUID1--">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<Feature Id="ProductFeature" Title="ShortcutTest" Level="1">
<ComponentRef Id="TextFile" />
<ComponentRef Id="ShortCut" />
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="ShortcutTest">
<Component Id="TextFile" Guid="--YOUR GUID2--">
<File Id="File" Name="TextFile.txt" Source="TextFile.txt" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="Shortcut Test">
<Component Id="ShortCut" Guid="--YOUR GUID3--">
<RegistryValue Root="HKMU" Key="Software\WidgetCo\ReadMeTextFile\TextFile" Name="Installed" Type="string" Value="yes" KeyPath="yes"/>
<Shortcut Id="Shortcut"
Name="Open Text File"
Description="Opens a text file"
Target="[INSTALLFOLDER]TextFile.txt"
WorkingDirectory="INSTALLFOLDER"/>
<RemoveFolder Id="ApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall"/>
</Component>
</Directory>
</Directory>
</Directory>
</Product>
</Wix>
如果将上述示例构建为MSI包,则会出现以下内部一致性评估器(ICE)错误:
D:\Robert\Documents\Visual Studio 2013\Projects\ShortcutTest\Product.wxs(27,0): error LGHT0204: ICE57: Component 'ShortCut' has both per-user data and a keypath that can be either per-user or per-machine. ICE57 暗示了每个用户和每台计算机数据之间的不一致性。但是,组件的关键路径是HKMU,在单台机器安装中解析为HKLM(HKEY_LOCAL_MACHINE)。快捷方式的位置源自“ProgramMenuFolder”,在单台机器安装中解析为
C:\ProgramData\Microsoft\Windows\Start Menu\
(在Windows 8.1上)。该组件的任何资源都没有任何与每个用户相关联的内容。您可以通过禁止ICE57将安装程序包构建为MSI。生成的MSI包安装时没有明显的错误。多个用户可以登录并访问快捷方式。任何用户都可以卸载软件包,并删除软件包中的所有资源。 Wix create non advertised shortcut for all users / per machine的答案有一个有趣的解决方法,即编写广告快捷方式,然后关闭广告。看起来是创建未广告的快捷方式的迂回方法。
ICE57错误的常见修复方法是将
<RegistryValue...>
根更改为HKCU(HKEY_CURRENT_USER)。但是,这会创建一个安装程序,在卸载时可能会留下用户注册表键。例如,如果用户A安装了软件包,则会向用户A的注册表中添加一个条目。如果用户B删除该软件包,则不会从用户A的注册表中删除该条目。在这种情况下,ICE57错误是否是内部一致性评估器中的错误?还是我理解错了什么?