2009-10-23 8 views
1

VS.net의 InstallURL 속성을 시뮬레이트하려고합니다. MSI ... WIX MSI가 원하는 다운로드 페이지로 브라우저를 열 수있는 포니 트가 있습니다. 테스트 머신에서 MSXML6 구성 요소를 설치하지 않았을 때 웹 페이지가 열리기 때문에 상황이 좋아질 것이라고 생각했습니다. 그러나 구성 요소가 설치되어 있어도 웹 페이지가 열리는 것을 발견했을 때 상황이 내리막 길을갔습니다.내 Wix 속성이 평가되지 않는 이유는 무엇입니까?

RegistrySearch가있는 속성을 사용하여 MSXML6 구성 요소를 찾고 있습니다. 그러나, 내가 말할 수있는 한 최상으로, 레지스트리 값은 심지어 평가되지 않으며 따라서 "항상"그것이 설치되지 않은 것처럼 보입니다.

여기 내 WXS의 관련 부분입니다 : MSXML6이 웹 페이지를 열고 다음 사용자 지정 오류 메시지를 인쇄 한 후 정의되지 않은 경우이 무엇

<Property Id="MSXML6"> 
     <RegistrySearch Id="MSXML6Search" Root="HKCR" Key="Msxml2.DOMDocument.6.0" Type="raw" /> 
    </Property> 
    <Property Id="TEST"> 
     <RegistrySearch Id="TESTSearch" Root="HKLM" Type="raw" Name="Version" Key="SOFTWARE\Microsoft\DirectX" /> 
    </Property> 
    <Property Id="cmd.exe" Value="cmd.exe" /> 
    <CustomAction Id="OpenMSXML6Download" Property="cmd.exe" ExeCommand="/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1" Execute="immediate" Return="check" /> 
    <CustomAction Id="OpenMSXML6DownloadError" Error="This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector." /> 

    <!-- installation execution sequence --> 
    <InstallExecuteSequence> 
     <!-- wires the error dialog to the downgrade event --> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 

     <!-- execution to delete old install info after upgrade--> 
     <RemoveExistingProducts After="InstallValidate" /> 

     <!-- Forces MSXML6 to be pre-installed --> 
     <!-- <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> --> 
     <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> 
     <Custom Action="OpenMSXML6DownloadError" After="OpenMSXML6Download">NOT MSXML6</Custom> 
    </InstallExecuteSequence> 

    <!-- ui information for the custom actions above. --> 
    <InstallUISequence> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
     <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> 
     <Custom Action="OpenMSXML6DownloadError" After="OpenMSXML6Download">NOT MSXML6</Custom> 
    </InstallUISequence> 

입니다. 오류 메시지에있는 속성의 값을 인쇄하려고합니다 (이 값이 유효한지 확실하지는 않지만 확실하지는 않습니다.) 보이는 텍스트에 "이 구성 요소에는 MSXML6이 필요합니다. = = [cmd.exe] == ... "그래서 'cmd.exe'속성의 값을 인쇄하지만 나머지 두 개는 인쇄하지 않습니다 ... 어쩌면 그 속성을 명시 적으로 정의했기 때문에 확실하지 않습니다. 어쨌든, 나는 또한 디버깅을 사용하여 MSI를 실행했으며, 로그 파일에서 MSXML6 또는 TEST 속성을 절대 설정하지 않았다. 레지스트리 값이 실제로 설정되었는지는 확인했지만, Msxml2 레지스트리 키를 처리하는 방법을 100 % 확신 할 수는 없지만 실제 값이 없기 때문에 기본 값만 있습니다. (나는 'Name'매개 변수를 벗어나는 것이 이것을 처리하는 올바른 방법이라고 가정한다.)

Help ??

답변

3

나는 이것을 알아낼 수 있었다 ... 그것은 아주 간단한 대답이었다. 기본적인 문제는 사용자 지정 작업이 RegistrySearch 속성이 평가되는 AppSearch 전에 실행된다는 것입니다. 자세한 내용은 내 블로그 게시물 CTICoder을 참조하십시오.

관련 문제