如何在WiX中检查已注册的DLL

时间:2009-05-20 20:44:28

标签: wix

我正在寻找一种方法来测试是否安装了某些版本的第三方库。我想检查已注册的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”时,它似乎返回一个文件所在的目录,而不是返回文件本身的完整路径。它总是以这种方式工作吗?这也意味着我必须知道基本文件名。如果有办法将完整路径拆分为名称和目录,那么我可以在不知道基本名称的情况下进行FileSearch吗?

我的方法可靠吗?有一个更好的方法吗?这似乎是一个常见的问题。我正在使用WiX 3。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过在 PRIORLOCATION 中简单地嵌套来保存线条(请参阅WiX documentation)。有点像:

<RegistrySearch Id="_test" Root="HKLM" Key="Software\MyCompany\MyProgram" name="Executable"Type="file">
  <FileSearch Id="_oldexe2" Name="PROGRAM2.EXE" MinSize="200000" MaxSize="4000000" />
</RegistrySearch>