Требуется WIX Bootstrapper для перезагрузки после установки.NET Framework и пропуска запуска приложения
Благодаря ответу Андрея здесь:
Установите.NET Framework 4.7.2 (при необходимости) с установщиком WIX
Я проверяю, установлен ли.NETFramework 4.7.2, и устанавливаю его. У меня осталась одна небольшая проблема... У моего основного приложения есть действие после установки, которое запускает приложение. Невозможно запустить приложение, пока не будет установлен 4.7.2 И система не будет перезагружена. Я мог бы просто удалить этот код действия после установки из моего установщика приложений, но было бы неплохо, если бы он запустил приложение, если 4.7.2 уже был установлен и нет причин для перезагрузки.
Как я могу "заглянуть" в мой проект Bootstrapper из установщика моих приложений и посмотреть, был ли только что установлен.NET Framework или нет? Затем я могу условно запустить действие после установки. Если 4.7.2 был только что установлен, я полагаю, что появится запрос на перезагрузку, которая идеально подходит.
Предложения о других способах решения проблемы приветствуются. Я полагаю, что другой способ справиться с ситуацией - принудительная перезагрузка после установки.NET и после перезагрузки установка моего приложения. Но я думаю, что было бы лучше установить все, а затем перезагрузиться. Я думаю, что это очень распространенная проблема, но я не нашел ничего, что могло бы с ней справиться. Возможно, это слишком простая проблема! Я новичок в WIX и не понимаю, как делиться переменными и информацией из одного проекта в другой. Особенно получение информации о загрузчике из основного установщика приложения. Дайте мне знать, если я могу предоставить разъяснения или более подробную информацию.
Спасибо!
Действие после установки выглядит следующим образом:
<CustomAction Id="PostInstallAction"
Return="check"
Execute="immediate"
BinaryKey="MyAppInstaller.CustomActions.CA.dll"
DllEntry="PostInstallAction" />
<InstallExecuteSequence>
<Custom Action="PreInstallAction" Before="InstallValidate" />
<Custom Action="PostInstallAction" After="InstallFinalize" />
</InstallExecuteSequence>
// follow function abbreviated (no logging and try/catch).In file customactions.cs
public static ActionResult PostInstallAction(Session session)
{
if (!Process.GetProcessesByName(MyAppLauncherFileName).Any())
Process.Start(ConfigurationManager.AppSettings[MyAppLauncherExePath]);
return ActionResult.Success;
}
СЛЕДУЙТЕ ЗА ВЕРХОМ: Было бы также хорошо, если бы перезагрузка, которая требуется для установки 4.7.2, произошла автоматически, а не по запросу пользователя. Есть ли способ сделать это, или это жестко закодировано в 4.7.2. веб-установщик?
1 ответ
Относительно проверки, установлен ли.NET 4.6.1 или выше, вы можете добавить это:
<PropertyRef Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" />
<Condition Message="$(var.ProductName) requires .NET Framework 4.6.1 or
higher.">
<![CDATA[Installed OR WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED]]>
</Condition>
Что касается перезагрузки, вы можете использовать свойство Supress из действия ForceReboot. Вы можете обратиться к следующим URL для этого:
http://wixtoolset.org/documentation/manual/v3/xsd/wix/forcereboot.html
https://docs.microsoft.com/en-us/windows/desktop/Msi/reboot
https://docs.microsoft.com/en-us/windows/desktop/Msi/forcereboot-action