为什么我的Wix Property不被评估?

时间:2009-10-23 21:56:17

标签: wix

我正在尝试模拟VS.net安装MSI的InstallURL属性...我已经到了那里,WIX MSI将打开浏览器到我希望它去的下载页面。我认为事情进展顺利,因为在我的测试机上,当我没有安装MSXML6组件时,网页就打开了。然而,当我发现网页打开时,即使我已经安装了组件,事情也开始走下坡路。

我正在使用带有RegistrySearch的Property搜索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注册表项,因为它没有任何实际值,只有默认值。 (我假设不使用'Name'参数是处理此问题的正确方法。)

帮助??

1 个答案:

答案 0 :(得分:3)

我设法把这个问题解决了......这是一个非常简单的答案。基本问题是自定义操作在AppSearch之前执行,AppSearch是评估RegistrySearch属性的地方。有关详细信息,请参阅CTICoder上的博文。