我们的应用程序需要最新版本的DLL才能正常运行。 DLL的路径存储在注册表中。如何在Windows安装程序中强制执行最低文件版本作为启动条件?强制执行注册表值引用的最小DLL版本
到目前为止,我有这样的:
<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>
但维克斯不会编译如下:
MainApp.wxs(543) : error CNDL0010 : The FileSearch/@Name attribute was not found; it is required.
的问题是我不知道该怎么对name属性输入。我事先并不知道DLL的名称,它可能是任何东西! (这就是为什么注册表值是存在的!)
事实上,事实证明,“名称”可以是任何东西 - 当FileSearch是RegistrySearch的一部分时,它会被完全忽略!在“名称”中输入一些乱码,搜索仍然有效。我不知道为什么在这种情况下该领域仍然是必需的。顺便说一下,使用方括号的方法并不奏效,因为Signature表中的相应列只是一个Text数据类型,而不是Formatted。 – 2012-01-06 16:14:04
另一个要做的事情是在“FileSearch”元素中包含“语言”属性,这是我缺少的。如果我搜索的版本号与发现的版本号完全匹配,则这会导致搜索失败。 (这在签名表文档中都有描述。) – 2012-01-06 16:15:55
另外,不推荐LongName;它会在使用时触发警告。 – 2012-01-06 16:16:28