Приложения Windows: упаковка, развертывание и процесс

Замечание

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

В этом разделе рассматриваются варианты, касающиеся:

  • Будет ли ваше приложение упаковано.
  • Как вы будете развертывать или распространять ваше приложение и как оно будет устанавливаться.
  • Процесс выполнения вашего приложения— как он будет изолирован; и какие API будут доступны для него.

Эти решения можно принимать как для новых, так и для существующих приложений. Но если вы все еще на стадии планирования нового приложения, то, прежде чем начать думать о приведенных выше соображениях, сначала определите, какую платформу разработки и фреймворк пользовательского интерфейса (UI) вы будете использовать для вашего приложения. И для этого решения см. общие сведения о вариантах разработки Windows.

Упакованный или распакованный

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

Многие функции расширения Windows, включая фоновые задачи, уведомления, динамические плитки, пользовательские расширения контекстного меню и целевые объекты общего доступа, могут использоваться приложением только в том случае, если это приложение имеет удостоверение пакета во время выполнения. Это связано с тем, что операционная система (ОС) должна иметь возможность идентифицировать вызывающий объект соответствующего API. См. функции пакета, требующие удостоверения.

  • Если вам нужно использовать любую из этих функций, приложение должно иметь идентификацию пакета. Поэтому это должно быть упаковаемое приложение (упакованные приложения являются единственным типом, имеющим удостоверение пакета). Упаковаемое приложение упаковано с помощью технологии MSIX (см. раздел "Что такое MSIX?").
    • Для нового приложения процесс упаковки простой (и в конце этого раздела содержатся сведения о том, как его выполнить).
    • Для некоторых существующих приложений можно следовать тому же процессу упаковки, что и для нового приложения. Но поскольку некоторые существующие приложения еще не готовы ко всему их содержимому в пакете MSIX, существует возможность упаковать приложение с учетом внешнего расположения. Это позволяет приложению иметь удостоверение пакета, что обеспечивает возможность использовать те функции, которые требуют этого. Дополнительные сведения см. в разделе «Определение идентичности пакета через упаковку с внешним расположением».
  • Даже если вам не нужно использовать какие-либо из этих функций, то создание упаковаемого приложения по-прежнему является хорошей идеей. Он дает пользователям самый простой способ установить, удалить и обновить приложение. Дополнительные сведения см. в разделе "Развертывание,распространение и установка " в этом разделе.
  • Но создание распакованного приложения — это вариант.

Вывод заключается в том, что упакованные приложения являются единственным типом, который имеет удостоверение пакета (и у них есть лучший интерфейс установки). У непакованного приложения нет удостоверения пакета; поэтому он не может использовать api и функции, упомянутые выше.

Дополнительные сведения об упаковке и распаковке см. в разделе "Общие сведения о развертывании"; в частности, в разделе "Преимущества и недостатки упаковки приложения". В этом разделе также упоминается пакет с параметром внешнего расположения .

Для получения информации о конфигурировании приложения в виде упакованных или распакованных:

См. также раздел Windows Package Manager и клиент WinGet в этом разделе.

Развертывание, распространение и установка

  • Упаковаемое приложение упаковано с помощью технологии MSIX.
    • Упаковаемое приложение также устанавливается с помощью MSIX. Но если вы решите использовать внешнее расположение, то это можно рассматривать как модель "установщик, предоставляемый пользователем". Таким образом, будет некоторая работа с установщиком, которую нужно будет выполнить с этой опцией. Дополнительные сведения см. в разделе «Определение идентичности пакета через упаковку с внешним расположением».
  • Приложение без упаковки вообще не использует MSIX.

Итак, почему важно, упаковано ли ваше приложение?

  • Кроме того, MSIX позволяет пользователям легко устанавливать, удалять и обновлять приложение. Удаление проходит гладко — при удалении приложения система восстанавливается в том же состоянии, в котором она находилась до установки; не остаётся никаких элементов.
  • Это приложение также поддерживает добавочные и автоматические обновления.
  • Microsoft Store оптимизирован для приложений такого рода (их можно использовать как в Магазине, так и вне его).
  • Это простой способ использования с помощью подключения приложения MSIX (для виртуальных машин Azure Virtual Desktop). Дополнительные сведения см. в разделе Что такое подключение приложения MSIX?.
  • Подписанный пакет получает преимущества от сильной защиты от подделки. Это преимущество еще больше, чем для непакованного приложения, установленного в программных файлах.

См. также раздел Windows Package Manager и клиент WinGet в этом разделе.

AppContainer или Средний IL

Возможность запуска приложения в AppContainer или нет, является вопросом безопасности. Процесс приложения AppContainer и его дочерние процессы выполняются внутри облегченного контейнера приложений, где они могут иметь доступ только к тем ресурсам, которые специально предоставляются им. И они изолированы с помощью файловой системы и виртуализации реестра. В результате приложения, реализованные в AppContainer, не могут быть взломаны, чтобы разрешить вредоносные действия за пределами ограниченных назначенных ресурсов.

Упакованные или распакованные приложения можно настроить для запуска в AppContainer. Но процесс более простой для упакованных приложений. Если приложение не является приложением AppContainer, это среднее приложение IL .

Дополнительные сведения см. в разделе AppContainer для устаревших приложений и приложений MSIX AppContainer.

Сведения о настройке приложения для запуска в AppContainer или medium IL:

  • приложения WinUI (Windows App SDK). См. атрибут манифеста пакета приложения uap10:TrustLevel в Настройка проекта WinUI для AppContainer.
  • Настольные приложения. См. свойство проекта TrustLevel Visual Studio в приложениях MSIX AppContainer (в разделе, соответствующем вашему типу приложения).
  • приложения Universal Windows Platform (UWP). Приложения UWP уже настроены для запуска в AppContainer; и эта конфигурация не может быть изменена.

Помните, что у распакованных приложений нет манифеста пакета приложения. Поэтому для распакованных приложений вы указываете выбор AppContainer-or-Medium-IL в файле проекта вместо манифеста пакета приложения.

Изоляция приложений Win32

Это важно

Функция, описанная в этом разделе, доступна в предварительных версиях Windows Insider Preview.

Изоляция приложений Win32 — это предстоящая функция безопасности в Windows, которая в случае компрометации приложения помогает содержать ущерб и защищать выбор конфиденциальности пользователей. Эта функция основана на AppContainers и компонентах, которые виртуализируют ресурсы и предоставляют управляемый доступ к другим ресурсам. Для получения документации и инструментов, которые помогут вам изолировать ваши приложения, см. раздел "Добро пожаловать в репозиторий изоляции приложений Win32".

Возможности приложения

Возможности приложений (например, internetClient, location, микрофон и bluetooth) в основном относятся к упакованным приложениям, которые выполняются в AppContainer. Таким образом, это включает все приложения Universal Windows Platform (UWP) и некоторые классические приложения.

Но есть некоторые сценарии, в которых даже среднее приложение IL (т. е. не приложение AppContainer) должно объявлять возможность. Одним из примеров является ограниченная возможность runFullTrust.

Дополнительные сведения о возможностях приложений, типах приложений, к которым они применяются, и их настройке см. в разделе «Объявления возможностей приложений». Вы настраиваете возможности в манифесте пакета приложения; и именно поэтому они применяются только к упакованным приложениям.

Виды приложений

Настольные приложения и приложения Universal Windows Platform (UWP) являются двумя основными типами приложений — хотя существует несколько видов приложений в семействе настольных приложений. Выбор платформы пользовательского интерфейса —WinForms, WPF, Win32, Direct 2D/3D, UWP или WinUI — это один из вариантов, не зависящих от конфигураций, описанных в этом разделе.

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

Во-первых, все приложения UWP упаковываются и запускаются в AppContainer. Но для настольных приложений вещи более гибки. Вы можете упаковать настольное приложение или не упаковывать его. И независимо от этого решения вы можете настроить настольное приложение как AppContainer или приложение с средним уровнем доверия IL.

Упакованный Unpackaged
AppContainer Настольные приложения
UWP-приложения
Настольные приложения
Средний IL Настольные приложения Настольные приложения

Чтобы настроить нужный тип приложения, используйте атрибут uap10:RuntimeBehavior в манифесте пакета приложения (см. раздел Application (Windows 10)).

  • Настольные приложения — это Windows .exe, как правило, с функцией основной точки входа WinMain. Чтобы настроить ваше приложение в качестве настольного, установите для uap10:RuntimeBehavior значение либо "packagedClassicApp", либо "win32App".
    • Значение packagedClassicApp указывает либо приложение WinUI (Windows App SDK), либо приложение Desktop Bridge (Centennial). Разница заключается в том, что приложение Centennial выполняется в AppContainer.
    • И "win32App" означает любой другой вид приложения Win32 (включая приложение, упакованое с внешним расположением).
  • Наконец, установка uap10:RuntimeBehavior в значение "windowsApp" дает вам приложение UWP.

Все варианты типов приложений, которые вы можете разработать, см. в разделе Windows создание приложений: опции и возможности.

Windows App SDK — зависимые от платформы или автономные

Если вы разрабатываете или поддерживаете приложение, которое использует Windows App SDK, то у вас есть дополнительное решение. Так как существует два способа развертывания Windows App SDK, от которых зависит ваше приложение:

  • Зависимость от платформы (по умолчанию). Приложению требуется пакет среды выполнения Windows App SDK и (или) Framework, который должен присутствовать на целевом компьютере.
  • Автономный. Приложение несет с собой зависимости Windows App SDK.

Дополнительные сведения см. в обзоре развертывания Windows App SDK.

Windows Package Manager и клиент WinGet

Package manager может помочь пользователям установить или обновить или настроить программное обеспечение, автоматизируя рабочий процесс. Менеджеры пакетов могут помочь установить любое программное обеспечение, но обычно используются для установки инструментов разработчика. Таким образом, если вы создаете средство разработчика, то вы можете быть частично заинтересованы в этом варианте. Но вот как это работает:

  • Вы, как разработчик программного обеспечения, определяете package manager (в виде декларативных инструкций) все части, необходимые для успешной установки продукта.
  • А затем, когда пользователь устанавливает ваше программное обеспечение, менеджер пакетов следует вашим декларативным инструкциям для автоматизации рабочего процесса установки и настройки.

Результатом является сокращение времени, затраченного на подготовку среды пользователя, и повышение совместимости между установленными компонентами. И вы можете использовать Windows Package Manager для распространения упакованных или распакованных приложений в форматах, таких как .msix, .msi и .exe.

Дополнительные сведения см. в разделе Windows Package Manager.