2009-05-20 56 views
1

我正在尋找一種方法來測試某些特定版本的某些第三方庫是否已安裝。我想檢查註冊的DLL,並且不知道它們在文件系統中的安裝位置。在這個例子中,我要確保他們在此之前的版本1.50安裝:如何在WiX中查看已註冊的DLL

<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.

謝謝。

回答

0

您可以通過在PRIORLOCATION(請參閱WiX documentation)中簡單嵌套a來節省線條。沿線的東西:

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