company_banner

Project Centennial: мост из Win32 и .NET к Windows Store и UWP

    Пару конференций назад мы объявили о том, что мы планируем строить разнообразные мосты для упрощения задач разработчиков по переносу в 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. Участие бесплатное, но требуется регистрация.

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

    Microsoft
    Microsoft — мировой лидер в области ПО и ИТ-услуг

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

    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Это не UWP приложение. По крайней мере сразу после ковертации. Это Win32/.NET приложение, упакованное для распространения через Windows Store, которое запускается в full trust окружении.

        7-zip это просто пример приложения, которое можно очень просто перепаковать.
        • НЛО прилетело и опубликовало эту надпись здесь
            +2
            Идея моста в том, чтобы постепенно перейти на UWP по максимуму, но с чего-то надо же начать.

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

          Я вот постарался картинку заглавную про этот путь, мост и переход подобрать :)
            0
            И это же сразу и способ доставки своего приложения — Windows Store. Есть даже публичная история о подобном использовании.
            0
            Судя по содержимому пакета на выходе, структера файлов и предстваление реестра очень похожи на APPV 5. Выходит, по сути это тоже виртуализация?

            Опять же, по аналогии с APPV, видно что можно настроить регистрацию типов файлов через расширения. Но для APPX как замене MSI рассматривается ли в будущем возможность создания сторонних расширений?
              0
              Это не виртуализация и даже не контейнеризация. А структура файлов такая, потому что собирается из VFS контейнера, при использовании DAC. Desktop Bridge делает некоторую работу, которую контейнер делает для приложения внутри, вроде перенаправления записи файлов и т.д., но при этом, приложение работает не в контейнере.
                0
                Спасибо за пояснение. Но я правильно понял, что и реестр установщика, и все папки за пределами корня установки (которые попали в VFS) монтируются исключительно для приложения и только когда оно запущено?

                Если это так, подскажите пожалуйста, где можно найти полный список папок, которые будут перенаправлены для приложения при установке из APPX?
                  0
                  Вот здесь есть список всех папок https://docs.microsoft.com/ru-ru/windows/uwp/porting/desktop-to-uwp-behind-the-scenes
                    0
                    Большое спасибо.
              0
              Спасибо за статью, эта тема очень актуальна для моих проектов как план на будущее.
              К сожалению пока не уверен в том, что у UWP не загнётся как в своё время Metro-style приложения и Windows Phone 7/8. Либо просто не будет востребованым у пользователей.

              Другое опасение это то, что нет полноценного офлайн инсталлера, который можно было бы использовать вне зависимости от наличия/отсутствия сети, желание Майкрософта заблокировать приложение в магазине и прочих внешних факторов.
                0
                APPX сейчас можно установить двойным щелчком, если разрешено системой. Как раз идея в том, чтобы просто взять свои Win32 и положить в Windows Store. Хотите добавить потом UWP возможностей, пожалуйста. Не хотите или пока нет того, что вам интересно, ждёте обновления Desktop Bridge.
                  0
                  Насколько я знаю, любой appx можно установить дабл кликом, начиная с Anniversary Update, сети или стора для этого не нужно. К слову, UWP это как раз развитие Metro, с чего Metro приложения загнулись то?
                  0
                  А реестр HKCU с десктопом не общий получается?
                    0
                    HKCU — общий, а в HKLM писать не может.
                      0
                      Если я на десктопе что-то запишу, то в запакованном прочитать смогу? А то не очень понятно, там про виртуализацию пишут.
                        +1
                        Как раз хотел пояснить, чтобы небыло недопонимания, а то моё общий могло запутать.

                        Для всего реестра — десктоп записал -> в приложении прочитал, если есть доступ
                        HKCU — в приложении записал -> в этом же приложении для этого же пользователя прочитал
                        HKCU — в приложении записал -> не десктопе не вижу, хранится на файловой системе для каждого пользователя для каждого приложения
                        В HKLM\Software можно писать, если в «захваченном реестре» нет соответствующей пары «раздел-значение», и у пользователя есть доступ
                    0
                    А такое приложение работать будет только на 10? 8(8.1) уже всё?
                      0
                      Даже не на всех 10-ках. Если верить официальной документации для самого моста:
                      Windows 10 Anniversary Update (10.0.14393.0 and later) Pro or Enterprise edition

                      Для запуска таких приложений, думаю нужна как минимум такая же или большая версия сборки ОС.
                        0
                        Windows 10 Anniversary Update — да, остальное — нет. Это требования к DAC, который использует Windows Containers.
                          0
                          DAC != Desktop Bridge

                          Desktop App Converter — утилита для просто конвератции установщика Win32/.NET в APPX пакет. Desktop Bridge — технология, которая позволяет этому приложению работать в UWP-окружении.
                        0
                        Ошибка подтверждения приема пакета: 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 приложения, что все заявки не успевают рассмотреть.
                          0
                          Там разрешают проекту работать в full trust, насколько я помню, там есть требование, чтобы это было Legal Entety, потому как больно выскоий уровень доступа у приложения, по сравнению с обычным UWP.

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

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

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

                        Самое читаемое