Как стать автором
Обновить

Создание .exe установщика для UWP приложения

Время на прочтение5 мин
Количество просмотров9.8K

"Нoвый фopмaт пpилoжeний для мaгaзинa Windows pacпpocтpaняeтcя в ycтaнoвoчных фaйлaх .Appx и .AppxBundle и включaет в ceбя лишь caмy пpoгpaммy, eё имя и oпиcaниe. Эти пaкeты пoзвoляют paзpaбoтчикaм нe иcпoльзoвaть coбcтвeнный ycтaнoвщик для инcтaлляции, кaк этo былo c oбычными пpoгpaммaми." - MIcrosoft.

В обход истории...

Если вам нужна инструкция как создать установщик, сразу листайте до “создание .exe установщика для UWP”

Звучит круто, не правда ли? Но что, если я хочу скинуть свою кривую, новорождённую, никому не нужную программу другу, не проходя все проверки от магазина Microsoft? Или же друг не знает как включить режим разработчика и установить твой сертификат. Тут уже возникают трудности и приходится идти обходными путями и сегодня я расскажу о самом интересном из них! Видите ли, при компиляции программы мы не получим exe’шник, который можно запустить и радоваться жизни. У UWP много таких приколов и ограничений, которые являются одновременно и сильными сторонами (в плане безопасности, кроссплатформенности), так и слабыми (например, нельзя хранить информацию своей программы, где попало на локальной машине). О всех минусах и плюсах данной технологии поговорим в другой раз, а пока я начну свой рассказ со своего знакомства с UWP.

Знакомство с UWP

Как-то раз, на 2 курсе университета у меня получилось отличиться, и преподаватель заметил меня, спустя несколько дней после первых его практических занятий он создал группу и пригласил туда меня.

- Добрый день, не хотите помочь с курсовой работой?

- Да, конечно.

- Отлично! Нам нужно создать свой собственный мессенджер. Давайте начнём с выбора технологии.

На этом моменте кто-то предложил Windows Form (дабы не париться), WPF (для больших возможностей) и… всё. Про UWP ни слова. Я на тот момент жутко любил смотреть новости про обновления UWP и Windows. Меня поражало, как просто можно сделать красивое приложение с готовым дизайном. А плиточки… Ох, это была моя первая любовь в мире IT. Именно поэтому, я начал бить кулаком об грудь и жутко защищать данную технологию, продвигая её в массы. Преподаватель, поддержал меня и сказал следующую фразу: “Хорошо, давайте покажем, что такое новые технологии”. У нас возник вопрос с распространением приложения, ведь оно бы запускалось только на компьютерах с Windows 10, но и эта проблема была решена новым оборудованием в ВУЗе.

Месяц разработки спустя мессенджер был готов, и я успел возненавидеть UWP, ведь она могла кидать такие ошибки, что С++ и рядом не стоял. Как оказалось смотреть как кто-то пишет код и писать код самостоятельно, абсолютно разные вещи, из-за чего вся работа перешла на Олега (моего однокурсника), и он вывозил клиент мессенджера, практически сам. Но пришло время сдавать проект, а скомпилировать его в .exe и отправить на другой компьютер оказалось невозможной задачей.

Создание .exe установщика для UWP

У меня на руках был готовый код и всё что от меня требовалось, так это создать установщик, чтобы распространить приложение. Полазив по интернету, я понял 2 вещи:

  1. Microsoft любит деньги и приложения нужно загружать на их магазин со всякими комиссиями и аккаунтами разработчика.

  2. Есть корпоративный способ, но там нужно использовать PowerShell и лезть в настройки, чтобы активировать режим разработчика.

Казалось бы, 2 способ, то, что нужно, но это не установщик. Ты должен сам куда-то лезть и что-то включать. И вы, наверное, уже догадались, что мы должны всё автоматизировать. В этом нам поможет программа “Inno Setup Compiler”. С помощью неё мы создадим тот самый автоматизированный установщик UWP приложения. На этом моменте мой преподаватель объяснил, что новые технологии, это не обязательно хорошо, иногда со старой банально удобнее работать и никакие “фишки” не переманят программистов, если они неудобно реализованы. Таким образом, он специально разрешил нам использовать UWP, чтобы мы столкнулись с этим и поняли всё сами. Мы пропустили дедлайн из-за меня, но задача создать установщик поставлена и её нужно было решить.

Подготовка к созданию установщика

Закончив создание приложения, мы настраиваем package.appxmanifest под свои нужды, после чего правой кнопкой мыши нажимаем по проекту и выбираем publish → создать пакеты приложений. Здесь выбираем Загрузка неопубликованных приложений (и убираем галочку с автоматического обновления) → Да, использовать текущий сертификат → вводим версию, выбираем архитектуру и создаём. Теперь, заходим в папку с проектом и ищем там AppPackages → папка с названием приложения.

Перед нами предстало несколько файлов. Файл с расширением .msixbundle, это и есть тот самый новый установщик. Install.ps1 с Add-AppDevPackage.ps1 это сценарии Windows, который мы и будем использовать. Их можно было бы и так засунуть в наш установщик, но в коде данных сценариев есть специальные блоки, отвечающие за контекстное меню по типу: "Установить: Да? нет?". Естественно, нас это не устраивает, и мы избавляемся от них, примеры кода я скинул на GitHub. + мы добавляем пару строчек, которые включают неполноценный режим разработчика. Видите ли, раньше в настройках Windows было 3 режима, безопасный, установка UWP приложений из неизвестных источников и режим разработчика. Так вот, мы используем тот самый полу вырезанный режим полу разработчика, который теперь нигде не отображается.

Теперь пришло время для создания скрипта на InnoSetup. Я напишу самый простой скрипт, чтобы было легче понять. В блоке Run мы прописываем:

[Run]

Filename: "powershell.exe"; Verb: runas; \

  Parameters: "-ExecutionPolicy Bypass -File ""{tmp}\Install.ps1"""; \

  WorkingDir: {tmp}; Flags: runhidden shellexec

(Verb: runas – запросить права администратора).

Таким образом у нас установился неполноценный режим разработчика и наш сертификат (исполняя инструкцию Windows используя PowerShell), а это значит, что мы удовлетворяем все потребности официального установщика Windows .msixbundle. Следом запустим модифицированную установку приложения, но пользователь не увидит интерфейс, ведь все блоки отвечающие за: "Установить, да? нет?" мы вырезали.

Filename: "powershell.exe"; \

  Parameters: "Add-AppxPackage ""{tmp}\CLient_CS_UWP_0.5.1.0_x86_x64_Debug.msixbundle"""; \

  WorkingDir: {tmp}; Flags: runhidden

Полный пример кода опять же можно найти на GitHub.

После всех действий компилируем получившийся скрипт и получаем тот самый .exe установщик для UWP приложения.

В завершении

Хоть у UWP и есть много интересных особенностей, но я всё равно безумно люблю эту платформу. Она по-своему прекрасна и отвратительна в одном лице, что заставляет пережить целую палитру эмоций во время разработки. На ответ почему нет .exe у данных приложений есть 2 ответа. Первый ответ: Они используют безопасное расширение, все файлы хранятся в специальной закрытой папке, благодаря этому можно не беспокоиться о кроссплатформенности. Второй ответ: деньги. И можно было бы долго рассуждать на тему того, как сильно Microsoft любит деньги, но.. Мир меняется, и вот-вот, Microsoft Store станет бесплатен и доступен для всех, а это значит, что у UWP большое и светлое будущее.

Ссылка на GitHub

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии25

Публикации

Истории

Работа

Ближайшие события