Пару конференций назад мы объявили о том, что мы планируем строить разнообразные мосты для упрощения задач разработчиков по переносу в Windows Store приложения для разных платформ, включая Windows. У каждого из объявленных тогда мостов сложилась своя судьба, а один из самых ожидаемых — Project Centennial или Desktop Bridge — не так давно стал доступен всем разработчикам, упрощая перенос Win32/.NET приложений в Windows Store, о котором и пойдёт речь внутри.

Если вы хотите пообщаться на эту тему со мной лично, приходите 20 марта на практическое мероприятие.



Простой случай: приложение для стора из Win32 приложения за 5 минут


Самый простой способ перевода вашего Win32 или .NET приложения в пакет для установки из Windows Store — это Desktop App Converter (DAC), который можно скачать собственно из Windows Store. Он представляет собой некоторый набор библиотек и скрипт PowerShell, который позволяет сконвертировать неинтерактивную инсталляцию вашего приложения в пакет для Windows Store. Для того, чтобы решить задачу сбора данных того, что происходит при установке используется технология Windows Containers, соответственно, это определяет требования к машине на которой может быть выполнена конвертация, и, необходимость скачивания референсных образов операционных систем. Версия образа, которую вы скачиваете должна совпадать с версией вашей операционной системы на которой выполняется процедура конвертации. Затем необходимо проинициализировать DAC с соответствующим образом, и вы готовы к конвертации.

Если ваше приложение просто приложение в себе, как, например, многие из классических игр, то этого вполне достаточно, чтобы подготовить ваше приложение для публикации в Windows Store. Однако, Desktop Bridge поддерживает не все сценарии и взаимодействия, которые доступны обычному настольному приложению, и если ваше приложение делает что-то из того, что не поддерживается в данный момент, придётся приложить немного больше усилий.

Хороший пример приложения, которое я сам использую для демонстрации — 7-zip: несколько минут и из установщика приложения для Windows я получаю appx пакет для развёртывания через Windows Store.

Обратная история: UWP приложение с Win32 возможностями


Догадливый читатель, наверное, уже задаёт себе вопрос, а что если… Да! Технически, никто не мешает расширить существующие UWP приложения доступными Win32 возможностями используя технологию Desktop Bridge. Сценариев множество, особенно для разнообразных встраиваемых решений или утилит.

Что надо знать тому, кто решил поступить именно так? Ваш аккаунт в Windows Store должен иметь разрешения для публикации приложений в режиме Full Trust, а именно в нём работают Desktop Bridge приложения.

Сложная история: Win32 приложение с несовместимыми возможностями


В этом случае придётся убирать все несовместимости и заменять их на аналогичный функционал UWP API. Зачем это может потребоваться?

Как самый простой вариант, сразу же приходящий в голову, представьте, что ваше приложение очень популярное и бесплатное, его много скачивают, поэтому вам нужно всё время думать о том, где бы его разместить, чтобы все могли его быстро скачать. Конвертируем его в Windows Store приложение — магия — теперь везде, где есть Windows Store, за доступность вашего приложения можно не беспокоиться.

Второй, корпоративный вариант, Windows Store приложение может распространяться через внутренний магазин приложений внутри организации. Если оно нацелено на крупные компании, возможно, такой удобный способ распространения с самообслуживанием будет востребован.

Это только два самых простых сценария, зачем вам может потребоваться сделать из вашего Win32/.NET приложение Windows Store. Давайте обсудим ваши предложения по сценариям в комментариях. :)

Продолжение истории: сконвертировал, что дальше?


На самом деле, история здесь только начинается! После конвертации ваше приложение получает UWP ID и вы может вызывать все доступные на платформе UWP API, например, легко можно добавить работу с живыми плитками, оповещениями и так далее.

Например, если вам нужно приложение, которое touch friendly, можно запустить Win32 приложение как App Service, написать новый интерфейс на XAML и общаться для выполнения непосредственных задач приложения с приложением App Service, не отображая его классический интерфейс пользователю.

Если у вас появились вопросы и вы хотите задать их мне лично, хочу напомнить, что 20 марта я буду одним из спикеров на Desktop Bridge: из Win32 и .Net в Windows Store. Участие бесплатное, но требуется регистрация.

Короткое видео-введение о том, что я так долго описывал в статье:

Поделиться с друзьями
-->

Комментарии (27)


  1. sleeply4cat
    15.03.2017 13:01

    Насколько я знаю, Windows может убивать UWP-приложения примерно так же, как это делает андроид со своими. Как программа, не приспособленная изначально для такого жизненного цикла, будет с этим справляться? 7-Zip — вещь короткоживущая, его процесс вряд ли столкнётся с такими трудностями, так что не показатель.


    1. stasus
      15.03.2017 13:15
      +1

      Это не UWP приложение. По крайней мере сразу после ковертации. Это Win32/.NET приложение, упакованное для распространения через Windows Store, которое запускается в full trust окружении.

      7-zip это просто пример приложения, которое можно очень просто перепаковать.


      1. sleeply4cat
        15.03.2017 13:19

        а, ок. Просто думал, что в стор пускают только UWP.


        1. stasus
          15.03.2017 13:28
          +2

          Идея моста в том, чтобы постепенно перейти на UWP по максимуму, но с чего-то надо же начать.

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


  1. crea7or
    15.03.2017 15:38

    Ну по сути получается замена инсталлятора на стор?


    1. stasus
      15.03.2017 15:41

      На начальном этапе, да. Но это одновременно открывает возможность к использованию UWP API и постепенного перехода всё больше в UWP сторону.

      Я вот постарался картинку заглавную про этот путь, мост и переход подобрать :)


    1. stasus
      15.03.2017 15:51

      И это же сразу и способ доставки своего приложения — Windows Store. Есть даже публичная история о подобном использовании.


  1. fenriv
    15.03.2017 16:52

    Судя по содержимому пакета на выходе, структера файлов и предстваление реестра очень похожи на APPV 5. Выходит, по сути это тоже виртуализация?

    Опять же, по аналогии с APPV, видно что можно настроить регистрацию типов файлов через расширения. Но для APPX как замене MSI рассматривается ли в будущем возможность создания сторонних расширений?


    1. stasus
      15.03.2017 16:55

      Это не виртуализация и даже не контейнеризация. А структура файлов такая, потому что собирается из VFS контейнера, при использовании DAC. Desktop Bridge делает некоторую работу, которую контейнер делает для приложения внутри, вроде перенаправления записи файлов и т.д., но при этом, приложение работает не в контейнере.


      1. fenriv
        15.03.2017 17:29

        Спасибо за пояснение. Но я правильно понял, что и реестр установщика, и все папки за пределами корня установки (которые попали в VFS) монтируются исключительно для приложения и только когда оно запущено?

        Если это так, подскажите пожалуйста, где можно найти полный список папок, которые будут перенаправлены для приложения при установке из APPX?


        1. stasus
          15.03.2017 17:37

          Вот здесь есть список всех папок https://docs.microsoft.com/ru-ru/windows/uwp/porting/desktop-to-uwp-behind-the-scenes


          1. fenriv
            15.03.2017 17:44

            Большое спасибо.


  1. zenkz
    15.03.2017 16:59

    Спасибо за статью, эта тема очень актуальна для моих проектов как план на будущее.
    К сожалению пока не уверен в том, что у UWP не загнётся как в своё время Metro-style приложения и Windows Phone 7/8. Либо просто не будет востребованым у пользователей.

    Другое опасение это то, что нет полноценного офлайн инсталлера, который можно было бы использовать вне зависимости от наличия/отсутствия сети, желание Майкрософта заблокировать приложение в магазине и прочих внешних факторов.


    1. stasus
      15.03.2017 17:06

      APPX сейчас можно установить двойным щелчком, если разрешено системой. Как раз идея в том, чтобы просто взять свои Win32 и положить в Windows Store. Хотите добавить потом UWP возможностей, пожалуйста. Не хотите или пока нет того, что вам интересно, ждёте обновления Desktop Bridge.


    1. synmcj
      15.03.2017 17:14

      Насколько я знаю, любой appx можно установить дабл кликом, начиная с Anniversary Update, сети или стора для этого не нужно. К слову, UWP это как раз развитие Metro, с чего Metro приложения загнулись то?


  1. crea7or
    15.03.2017 17:16

    А реестр HKCU с десктопом не общий получается?


    1. stasus
      15.03.2017 17:20

      HKCU — общий, а в HKLM писать не может.


      1. crea7or
        15.03.2017 17:34

        Если я на десктопе что-то запишу, то в запакованном прочитать смогу? А то не очень понятно, там про виртуализацию пишут.


        1. stasus
          15.03.2017 17:41
          +1

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

          Для всего реестра — десктоп записал -> в приложении прочитал, если есть доступ
          HKCU — в приложении записал -> в этом же приложении для этого же пользователя прочитал
          HKCU — в приложении записал -> не десктопе не вижу, хранится на файловой системе для каждого пользователя для каждого приложения
          В HKLM\Software можно писать, если в «захваченном реестре» нет соответствующей пары «раздел-значение», и у пользователя есть доступ


  1. crea7or
    15.03.2017 18:08

    А такое приложение работать будет только на 10? 8(8.1) уже всё?


    1. fenriv
      15.03.2017 18:19

      Даже не на всех 10-ках. Если верить официальной документации для самого моста:
      Windows 10 Anniversary Update (10.0.14393.0 and later) Pro or Enterprise edition

      Для запуска таких приложений, думаю нужна как минимум такая же или большая версия сборки ОС.


      1. stasus
        15.03.2017 18:39

        Windows 10 Anniversary Update — да, остальное — нет. Это требования к DAC, который использует Windows Containers.


      1. stasus
        15.03.2017 18:57

        DAC != Desktop Bridge

        Desktop App Converter — утилита для просто конвератции установщика Win32/.NET в APPX пакет. Desktop Bridge — технология, которая позволяет этому приложению работать в UWP-окружении.


  1. dmandreev
    16.03.2017 10:55

    Ошибка подтверждения приема пакета: Your developer account doesn’t have permission to submit apps converted with the Desktop Bridge at this time. https://aka.ms/desktopbridgeforwindowsstore.

    Уже 2 месяца назад сабмитил форму на https://aka.ms/desktopbridgeforwindowsstore ни ответа ни привета. Судя по всему настолько много желающих разрабатывать UWP/Desktop bridge приложения, что все заявки не успевают рассмотреть.


    1. stasus
      16.03.2017 13:05

      Там разрешают проекту работать в full trust, насколько я помню, там есть требование, чтобы это было Legal Entety, потому как больно выскоий уровень доступа у приложения, по сравнению с обычным UWP.

      Я бы начал с обращения в поддержку за разъяснениями. Если не поможет, напиши мне, у меня есть специально для этой программы косвенный доступ к следующему уровню поддержки.


      1. crea7or
        18.03.2017 09:01

        Если требование Legal Entety обязательно, то всё это про положить в стор своё бесплатное и популярное приложение — ерунда. Никто не будет заводить компанию, только для того чтобы положить приложение в стор.


        1. stasus
          18.03.2017 09:53

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

          Требование было раньше, после вопроса поискал и нигде не нашёл его упоминания, но раз было, считаю, надо говорить.