处理WIX警告的正确方法:LGHT1076:ICE48

时间:2010-07-06 21:41:56

标签: wix

我想在我的wix安装中将一个propware默认为一个硬编码目录。是否有一种“正确”的方式来编码默认值(注意,这是一个内部项目,而不是分发给公众的东西)所以我没有得到以下警告:

LGHT1076: ICE48 Directory 'FOO' appears to be hardcoded in the property table to a local drive.

wix文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="22E1F223-E3AD-45F8-A394-1289AAAA64C8"
           Name="MyService"
           Language="1033" Version="1.0.0.0"
           UpgradeCode="140F5A44-58DA-4364-876B-9D9484C04CD9">
    <Package InstallerVersion="200" Compressed="yes" />

    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

    <Property Id="FOO" Value="C:\MyRootDirectory\" />

对此有何想法?

4 个答案:

答案 0 :(得分:2)

如果你想遵循最佳实践(我不认为你在这里做,因为你提到它是'内部'安装程序),你不应该硬编码路径。选择WindowsVolume之类的属性,如果WindowsVolume恰好不是C:

,请将您的应用设计为灵活

如果您真的不关心这一点,可以使用自定义操作在安装的最开始将属性设置为您想要的属性。在UI和执行序列中早期安排的简单类型51 CA(设置属性)将很好地完成。这样,在运行验证时,属性没有违规值,但在安装开始时立即获取值。

答案 1 :(得分:1)

如果您只想将目录树中的某个目录作为属性引用,则本机支持它。引用MSDN,“When the directories are resolved during the CostFinalize action, the keys in the Directory table become properties set to directory paths

答案 2 :(得分:0)

在我的情况下,为了摆脱这个警告,我选择从属性中删除默认值。 例如,这(没有ICE48警告):

<Property Id="VS2010INSTALLDIR">
    <RegistrySearch Id="VS2010_InstallDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0" Name="InstallDir" Type="raw" />
</Property>

而不是这个(ICE48警告):

<Property Id="VS2010INSTALLDIR" Value="0">
    <RegistrySearch Id="VS2010_InstallDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0" Name="InstallDir" Type="raw" />
</Property>

答案 3 :(得分:0)

您可以结合使用<SetProperty>[WindowVolume]元素来解决此问题:

<Product>
  <!-- Define your property with an empty value -->
  <Property Id="FOO" Value=""/>

  <!-- Set property to your target value, using the WindowVolume built-in property -->
  <SetProperty Id="FOO" Value="[WindowVolume]\MyRootDirectory\"
               After="LaunchConditions"/>
</Product>