2009-05-20 2 views
1

특정 버전의 특정 타사 라이브러리가 설치되었는지 테스트 할 방법을 찾고 있습니다. 등록 된 dll을 확인하고 파일 시스템에 그들이 어디에 설치되었는지 알지 못합니다. 이 예에서 나는 그들이이 이전 버전 1.50이 설치되어 있는지 만드는 중이라서 :등록 된 DLL을 WiX에서 확인하는 방법

<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

(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> 
관련 문제