我想在我的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\" />
对此有何想法?
答案 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>