Wix 错误LGHT0204:ICE57:组件';XXX和x27;具有每用户数据和可以是每用户或每台机器的密钥路径
错误“错误LGHT0204:ICE57:组件“XXX”既有每用户数据,也有一个可以是每用户或每台机器的密钥路径”是什么意思?Wix 错误LGHT0204:ICE57:组件';XXX和x27;具有每用户数据和可以是每用户或每台机器的密钥路径,wix,windows-installer,Wix,Windows Installer,错误“错误LGHT0204:ICE57:组件“XXX”既有每用户数据,也有一个可以是每用户或每台机器的密钥路径”是什么意思? 是否可以修复此错误? 在任何情况下,Wix都会创建msi文件,并且可以安装应用程序。这是真正的错误还是仅仅是一个警告?如果是警告,我可以忽略此错误吗?还是应该纠正什么? 这是用于我的单包编写安装的wxs文件: <?xml version='1.0' encoding='windows-1252'?> <Wix xmlns='http://schemas.
是否可以修复此错误?
在任何情况下,Wix都会创建msi文件,并且可以安装应用程序。这是真正的错误还是仅仅是一个警告?如果是警告,我可以忽略此错误吗?还是应该纠正什么?
这是用于我的单包编写安装的wxs文件:
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='Foobar 1.0' Id='GUID' UpgradeCode='GUID'
Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Acme Ltd.'>
<Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer"
Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Property Id="ALLUSERS" Secure="yes" Value="2" />
<Property Id="MSIINSTALLPERUSER" Secure="yes" Value="1" />
<Property Id='ApplicationFolderName' Value="Acme" />
<Property Id='WixAppFolder' Value="WixPerUserFolder" />
<Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="Acme's Foobar 1.0 Installation [1]" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='Acme' Name='Acme'>
<Directory Id='INSTALLDIR' Name='Foobar 1.0'>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
<Component Id="ProgramMenuDir" Guid="GUID">
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKMU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="INSTALLDIR">
<Component Id='MainExecutable' Guid='GUID'>
<File Id='FoobarEXE' Name='FoobarAppl10.exe' DiskId='1' Source='FoobarAppl10.exe' >
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory='INSTALLDIR' Icon="Foobar10.exe" IconIndex="0" />
</File>
<RegistryKey Root="HKMU" Key="Software\[Manufacturer]\[ProductName]">
<RegistryValue Name="FoobarEXE" Value="1" KeyPath="yes" Type="integer" />
</RegistryKey>
</Component>
</DirectoryRef>
<Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.'
Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>
<Feature Id='MainProgram' Title='Program' Description='The main executable.' Level='1'>
<ComponentRef Id='MainExecutable' />
<ComponentRef Id='ProgramMenuDir' />
</Feature>
</Feature>
<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
</Product>
</Wix>
这个问题已经被问了几十次了。请在SO中搜索ICE57并参考解释和答案,而不是发布所有链接。例如: 这是:
简短回答:如果总是按用户安装,则忽略它;如果按系统安装,则修复它。这是对MSI文件的静态测试,无法知道安装最终将是哪个上下文,因此无论如何都会发出警告 ICE57检查的目的是验证组件未混合每个用户和每台机器的文件和/或注册表设置。然而,Rob Mensching在中的评论表明ICE57检查并不完美: IIRC,这是ICE57中的一个错误。Windows Installer团队没有考虑 计算这些值时,ALLUSERS属性。。。那是很久以前的事了 尽管如此,我的记忆力可能有点衰退 就单包编写规则而言,您的示例看起来是正确的。两个主要的目标目录是ProgramFilesFolder和ProgramMenuFolder,这两个目录都被适当地重定向以供每个用户安装。注册表项根是HKMU,它在每台计算机安装时作为HKLM,在每用户安装时作为HKCU 这看起来像是ICE57中的一只虫子。遗憾的是,我们无法访问ICE57源,因此很难直接修复。有两种解决此问题的方法: 选项1-抑制ICE57 不理想,因为它会抑制该组的所有四条规则,而不仅仅是失败的规则 选项2-使用广告快捷方式 将快捷方式更改为播发,并丢失关联的注册表项。
main可执行文件
组件简化为:
<Component Id='MainExecutable' Guid='GUID'>
<File Id='FoobarEXE' Name='FoobarAppl10.exe' DiskId='1'
Source='FoobarAppl10.exe' KeyPath='yes'>
<Shortcut Id="startmenuFoobar10"
Directory="ProgramMenuDir"
Name="Foobar 1.0"
WorkingDirectory='INSTALLDIR'
Icon="Foobar10.exe"
IconIndex="0"
Advertise='yes'/>
</File>
</Component>
ICE57支票似乎更可靠,有广告宣传的捷径
冰上检查注意事项
所有ICE检查都存储在文件darice.cub中。这实际上是一个Windows Installer数据库文件,您可以使用Orca打开它。在典型的WIX安装中,可以在以下位置找到此文件:
C:\ProgramFiles(x86)\WIX工具集vX.Y\bin
。如果在Orca中打开darice.cub,则可以将ICE检查视为自定义操作。大多数是指文件中嵌入的一个或多个二进制DLL。有一些实现为VBS。这不是一个bug。MSI文件中ALLUSERS的静态值与此无关,因为许多安装在运行时在每个用户和每台机器之间切换。测试本身是静态的,每台机器的安装都有警告。@PhilDW谢谢,我已经阅读了你在回答中提到的所有帖子。但我仍然不明白我的例子有什么错。如果不是bug,那么我的示例是错误的?如果我的例子是错误的-如何修复它?我想提到的是,我也遇到了ICE57错误,我已经做了一切,就像wixtoolset.org上的Wix教程所建议的那样。链接器生成MSI文件,但向ICE57投诉。我不认为广告快捷方式应该是这里的解决方案,据我所知,它们在这里有点不相关。