我们的应用需要最新版本的DLL才能正常运行。 DLL的路径存储在注册表中。如何在Windows Installer中强制实施最低文件版本作为启动条件?
到目前为止,我有这个:
<Property Id="FileTest">
<RegistrySearch Id="FileSearch"
Key="SOFTWARE\Company\Product"
Name="DLLPath"
Root="HKLM"
Type="file">
<FileSearch MinVersion="1.2.3.4" />
</RegistrySearch>
</Property>
<Condition Message="!(loc.ErrorMessage)">Installed OR (FileTest)</Condition>
但是WiX不会编译这个:
MainApp.wxs(543) : error CNDL0010 : The FileSearch/@Name attribute was not found; it is required.
问题是我不知道要为Name属性输入什么。我事先不知道DLL的名称是什么,它可能是任何东西! (这就是注册表值存在的原因!!)
答案 0 :(得分:3)
如果您将RegistrySearch
修改为此内容会发生什么:
<Property Id="FileTest">
<RegistrySearch Id="FileSearchResult"
Key="SOFTWARE\Company\Product"
Name="DLLPath"
Root="HKLM"
Type="file">
<FileSearch LongName="[FileSearchResult]"
MinVersion="1.2.3.4" />
</RegistrySearch>
</Property>
我认为将FileSearch作为ID和实际的wix元素会导致您发出问题。如果您将ID更改为FileSearchResult
之类的内容,然后在FileSearch
元素的Name
(或更安全,LongName
)属性中引用它(将其括在方括号中) ,[]
),然后它应该工作。我在大约6个月内没有触及过wix,所以我没有做出任何承诺;)
注意:方括号是Wix UtilExtensions(如this example中所示)识别存储在variable
属性中的RegistrySearch
结果的方式。访问标准wix中保存结果的Id
可能不是这样。
注意2:您实际上可能需要使用RegistrySearchRef
元素作为FileSearch
元素的父元素。看看this example(虽然它在另一个DirectorySearch
中使用DirectorySearch
元素的一个结果。希望这可能会让你继续下去。