Wix - запуск браузера по URL загрузки платформы .Net, если платформа .Net не установлена - PullRequest
7 голосов
/ 19 октября 2011

У меня есть установщик, созданный из проекта установки и построенный с использованием MSBuild с использованием метода, найденного здесь .Пока я настраивал процесс сборки для генерирования MSI-файла, я не настраивал сам проект.Одним из условий запуска для проекта установки является проверка на наличие .Net Framework версии 4, и, если он не установлен на целевом компьютере, пользователю отображается окно сообщения с вопросом, хотят ли они посетить URL-адрес для загрузкиУстановочный файл .Net Framework.Если пользователь выбирает «да» в окне сообщения, то запускается браузер и загружает URL.Ницца.Проект установки также проверяет наличие другой предпосылки, которая требуется для нашего продукта, и делает то же самое.

В настоящее время я переписываю установщик с помощью Wix, и до сих пор мне удавалось обойти некоторые незначительные проблемы (имея в видучто я все еще на начальных стадиях установки в целом).Мне удалось заново создать проверку для .Net Framework v4.0 и другого необходимого программного обеспечения.Мне также удалось показать окно сообщения, спрашивающее пользователя, хотят ли они запустить браузер по URL-адресу для загрузки другого необходимого программного обеспечения, используя настраиваемое действие wix.

Проблема

Желая сделать для .Net Framework то же самое, что и старый установщик, я написал другое пользовательское действие для запуска браузера по URL-адресу загрузки .Net Framework.Я скомпилировал пользовательские действия и установщик и удалил .Net Framework с моего тестового компьютера.Я запустил установщик на своем тестовом компьютере, и пользовательские действия не сработали, это связано с тем, что .Net Framework больше не устанавливается на тестовом компьютере !!

Вопрос

Есть ли способ воссоздать способ, которым исходный проект установки смог проверить .Net framework, показать пользователю окно сообщения и затем запустить браузер по URL загрузки, если пользователь решит это сделать?Я уже был в состоянии установить, если платформа не установлена, просто нужен способ показать окно сообщения, запустить браузер по определенному URL-адресу, если пользователь выберет, и запретить программе установки продолжить.

или

Есть ли способ запуска пользовательских действий на компьютере, на котором не установлена ​​платформа .Net?(Я предполагаю, что ответом на этот вопрос будет нет!)

как всегда, заранее спасибо

Ответы [ 3 ]

11 голосов
/ 24 октября 2011

ОК, после долгого исследования и большого количества проб и ошибок я смог достичь своей цели - запустить веб-браузер по умолчанию, когда определенные записи реестра отсутствовали.

Сначала я проверил требуемые записи вреестры

<!--Property that indicates whether .Net framework 4.0 is currently installed-->
<Property Id="NETFRAMEWORK40">
  <RegistrySearch Id="NetFramework40" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Install" Type="raw" />
</Property>
<!--Property that indicates whether 2007 Office Data Connectivity is currently installed-->
<Property Id="ODCINSTALLED">
  <RegistrySearch Id="CheckODCVersion" Root="HKLM" Key="SOFTWARE\Classes\Installer\Products\000021091D0090400000000000F01FEC" Name="Version" Type="raw" />
</Property>   

Затем я добавил ссылку на проект WixUtilExtension и настроил следующие 3 настраиваемых действия:

<CustomAction Id="SetExec1" Property="WixShellExecTarget" Value="http://go.microsoft.com/fwlink/?LinkID=186913" />
<CustomAction Id="SetExec2" Property="WixShellExecTarget" Value="http://www.microsoft.com/downloads/en/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&amp;displaylang=en" />
<CustomAction Id="LaunchBrowser" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="ignore" />

Первые два настраиваемых действия предназначены для установки свойства WixShellExecTarget.которое будет использоваться в разное время, последним настраиваемым действием является запуск браузера по умолчанию с помощью утилиты WixShellExec.

Затем я установил 2 пользовательских диалоговых окна для моего интерфейса установщика, всего 2 простых окна сообщений с коротким сообщениеми кнопки Да и Нет.Следующее является лишь одним из окон сообщения, поскольку оба они очень похожи по внешнему виду:

  <Dialog Id="NetFRWDlg" Width="260" Height="95" Title="[ProductName] Installation" NoMinimize="yes">

    <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="40">
      <Text>This setup requires the .NET Framework version 4.0. Please install the .NET Framework and run this setup again. The .NET Framework can be obtained from the web. Would you like to do this now?</Text>
    </Control>

    <Control Id="YesButton" Type="PushButton" X="72" Y="67" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Yes]">
      <Publish Event="DoAction" Value="SetExec1" Order="1">1</Publish>
      <Publish Event="DoAction" Value="LaunchBrowser" Order="2">1</Publish>
      <Publish Event="EndDialog" Value="Exit" Order="3">1</Publish>
    </Control>

    <Control Id="NoButton" Type="PushButton" X="132" Y="67" Width="56" Height="17" Default="no" Cancel="yes" Text="[ButtonText_No]">
      <Publish Event="EndDialog" Value="Exit">1</Publish>
    </Control>

    <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[WarningIcon]" />
  </Dialog>

Затем я добавил эти 2 диалоговых окна в таблицу InstallUISequence:

  <InstallUISequence>
    <Show Dialog="NetFRWDlg" After="AppSearch">
      (NOT Installed) AND (NOT NETFRAMEWORK40)
    </Show>
    <Show Dialog="ODCDlg" After="AppSearch">
      (NOT Installed) AND (NOT ODCINSTALLED)
    </Show>
    <Show Dialog="Install_PAGE1" After="CostFinalize" />
  </InstallUISequence>

Чтобы получитькраткое описание того, как все это происходит вместе: при запуске установщика он проверит наличие необходимых реестров, используя свойства NETFRAMEWORK40 и ODCINSTALLED.Во время InstallUISequence диалоговые окна / сообщения NetFRWDlg или ODCDlg будут отображаться, если эти реестры отсутствуют.Затем пользователь может выбрать запуск браузера по умолчанию для просмотра переданных URL-адресов, нажав кнопку «Да» в диалоговом окне / окне сообщения.При этом выполняется последовательность действий по установке свойства WixShellExecTarget, запуску браузера по умолчанию и выходу из установщика.Если пользователь нажимает «Нет», программа установки просто завершает работу.

2 голосов
/ 20 марта 2013

Как уже упоминал ZFE, возможно, самый простой способ сделать это с помощью загрузчика.

После того как у вас есть управляемое приложение начальной загрузки, все, что вам нужно сделать, чтобы добавить .Net 4.0 в качестве предварительного условия, это ..

a) Добавьте ссылку на файл WixNetFxExtension.dll в ваш проект Bootstrapper / управляемого приложения Bootstrapper

b) Добавьте следующее в качестве первого элемента в вашей цепочке.

<PackageGroupRef Id="NetFx40Web"/>

Вот и все!

NB. Вышесказанное загрузит .net 4 через Интернет, поэтому потребуется доступ к Интернету. Дополнительная информация и опции здесь: документация по расширению wixnetfx

0 голосов
/ 24 октября 2011

То, что вы описали, может быть выполнено с помощью загрузчика.Их генерация будет автоматически выполнять установку необходимого программного обеспечения.Некоторые пакеты уже включены в Windows SDK (например, C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper \ Packages), и вы можете использовать их, например, из msbuild.Взгляните на задачу

GenerateBootstrapper

о создании исполняемого файла загрузчика (сначала вы создаете MSI, а затем создаете для него загрузчик).

Надеюсь, вы найдете это полезным.

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