强制执行注册表值引用的最小DLL版本

时间:2012-01-05 22:08:00

标签: xml wix windows-installer wix3

我们的应用需要最新版本的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的名称是什么,它可能是任何东西! (这就是注册表值存在的原因!!)

1 个答案:

答案 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元素的一个结果。希望这可能会让你继续下去。