Я ищу способ проверить, установлены ли определенные сторонние библиотеки с определенными версиями. Я хочу проверить зарегистрированные dll, и не знаю, где они были установлены в файловой системе. В этом примере я проверяю, установлена ли у них предыдущая версия 1.50:
<Property Id="PRIORGUID">
<RegistrySearch Id="priorguid" Root="HKCR" Key="Prior.Encoders\CLSID" Type="raw"/>
</Property>
<Property Id="PRIORLOCATION">
<RegistrySearch Id="priorlocation" Root="HKCR" Key="CLSID\[PRIORGUID]\InprocServer32" Type="file"/>
</Property>
<Property Id="PRIORVERCHECK">
<DirectorySearch Id="priorversion" Path="[PRIORLOCATION]">
<FileSearch Name="Prior.dll" MinVersion="1.49"/>
</DirectorySearch>
</Property>
<Condition Message="This application requires Prior.">
<![CDATA[Installed OR PRIORVERCHECK]]>
</Condition>
Я в основном нахожу библиотеку в реестре, которая указывает мне на файл, а затем я ищу версию в файловой системе. Мне неловко с этим методом. Когда я использую Type = "file", кажется, что он возвращает каталог, в котором находится файл, а не полный путь к самому файлу. Всегда ли так работает? Также это означает, что я должен знать базовое имя файла. Если бы был способ разбить полный путь на имя и каталог, то я мог бы выполнить поиск файлов, не зная базового имени?
Надежен ли мой метод? Есть лучший способ сделать это? Похоже, это было бы распространенной проблемой. Я использую WiX 3.
Спасибо.