Почему не оценивается мое свойство Wix? - PullRequest
1 голос
/ 24 октября 2009

Я пытаюсь смоделировать свойство InstallURL MSI для установки VS.net ... Я попал в ponit, где WIX MSI откроет браузер на странице загрузки, на которую я хочу перейти. Я думал, что все идет хорошо, потому что на моем тестовом компьютере веб-страница открылась, когда у меня не было установлено компонента MSXML6. Однако все пошло под откос, когда я обнаружил, что веб-страница открылась, даже если у меня установлен компонент.

Я ищу компонент MSXML6, используя Свойство с RegistrySearch. Однако, насколько я могу судить, значение реестра даже не оценивается, и, таким образом, оно «всегда» выглядит так, как будто оно не установлено.

Вот соответствующая часть моего 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, поскольку у него нет реальных значений, только значение по умолчанию. (Я предполагаю, что опуская параметр «Имя», это правильный способ справиться с этим.)

Помощь ??

1 Ответ

3 голосов
/ 24 октября 2009

Мне удалось выяснить это ... это был довольно простой ответ. Основная проблема заключалась в том, что пользовательские действия выполнялись до AppSearch, где и оцениваются свойства RegistrySearch. Подробности смотрите в моем блоге на CTICoder .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...