Почему моя собственность Wix не оценивается?
-
06-07-2019 - |
Вопрос
Я пытаюсь имитировать свойство InstallURL для VS.net установите MSI...Я добрался до того места, где 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 или тестовые свойства, которые когда-либо устанавливались.Я подтвердил, что значения реестра действительно установлены, хотя я не уверен на 100%, как обращаться с разделом реестра Msxml2, поскольку у него нет никаких реальных значений, только значение по умолчанию.(Я предполагаю, что отказ от параметра 'Name' - правильный способ справиться с этим.)
Помочь??
Решение
Мне удалось разобраться с этим...это был довольно простой ответ.Основная проблема заключалась в том, что Пользовательские действия выполнялись до AppSearch, именно там оцениваются свойства RegistrySearch.Смотрите мой пост в блоге по адресу Кодировщик CTICoder для получения подробной информации.