2009-10-23 58 views
1

我想模拟一个VS.net安装MSI的InstallURL属性......我已经到了WIX MSI将打开一个浏览器到我希望它去的下载页面的地方。我认为事情进展顺利,因为在我的测试机器上,当我没有安装MSXML6组件时打开网页。然而,当我发现即使在安装了组件的情况下打开网页时,情况也变得很糟糕。为什么我的Wix财产不被评估?

我正在使用一个属性w/RegistrySearch搜索MSXML6组件。然而,尽我所知,注册表值甚至没有被评估,因此它“总是”看起来没有安装。

这里是我的WXS的相关部分:

<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然后打开网页,然后打印自定义错误消息。请注意,我试图在错误消息中打印属性的值(我不确定这是否有效,但它似乎是。)我看到的文本显示“此组件需要MSXML6。= = [cmd.exe] == ...“,所以它打印'cmd.exe'属性的值,但不是其他两个...也许这是因为我明确定义了属性,我不确定..无论如何,我还在调试时运行了MSI,并且在日志文件中,我完全没有看到MSXML6或TEST属性的设置。我已确认注册表值确实已设置,但我不是100%确定如何处理Msxml2注册表项,因为它没有任何实际值,只有默认值。 (我假设离开'姓名'参数是正确的方式来处理这个。)

帮助??

回答

3

我设法找出了这一个......这是一个相当简单的答案。基本问题是自定义操作在AppSearch之前执行,这是RegistrySearch属性的评估位置。有关详细信息,请参阅我的博客文章CTICoder

相关问题