Поделиться через


Предоставление идентификации пакета путем упаковки с использованием внешнего источника в Visual Studio

Для получения информации о мотивациях добавления идентификатора пакета, а также различиях между созданием пакетов в Visual Studio и их созданием вручную, см. раздел "Обзор".

В этом разделе описывается, как создать и зарегистрировать пакет удостоверений с помощью Visual Studio. Для информации о создании пакета идентификации вручную см. Назначение идентификации пакета путем упаковки с использованием внешнего расположения вручную.

Ниже приведены шаги (подробно описанные в этом разделе) для создания и регистрации пакета удостоверений с помощью Visual Studio:

  1. Установка компонентов Visual Studio
  2. Добавьте проект упаковки в ваше решение
  3. Настройте проект пакета для подписания
  4. Сборка и проверка проекта упаковки в режиме выпуска
  5. Зарегистрируйте пакет идентификаторов в установщике
  6. Необязательные шаги

Установка компонентов Visual Studio

Для создания пакета удостоверений в Visual Studio требуется проект упаковки приложений Windows и пакет с расширением "Внешнее расположение ".

Установите компоненты проекта упаковки приложений Windows , как описано в обязательной версии и рабочей нагрузке Visual Studio.

В Visual Studio с помощью пункта меню"Управление расширениями>" установите пакет с расширением "Внешнее расположение".

Добавьте пакетный проект в решение

Чтобы добавить проект упаковки в решение с ссылкой на проект приложения, см. статью "Настройка проекта упаковки приложений Windows" в решении.

Включите упаковку с внешним расположением, щелкнув правой кнопкой мыши на проекте упаковки в обозревателе решений, перейдите на вкладку Внешнее расположение, предоставляемую расширением Package with External Location, включите опцию Package with External Location и сохраните изменения.

Задайте поля Имя пакета и Отображаемое имя издателя идентификационного пакета, дважды щелкнув Package.appxmanifest в проекте упаковки, чтобы открыть редактор визуального манифеста, перейти на вкладку "Упаковка" и установить поля Имя пакета и Отображаемое имя издателя на желаемые значения. См. Локализация и визуальные ресурсы для сценариев, в которых здесь может потребоваться локализация и изображения.

Если в вашем проекте есть пользовательский файл манифеста приложения, то для получения информации о синхронизации значений со значениями Package.appxmanifest см. раздел "Добавление метаданных удостоверения в манифесты классических приложений". Пакет с расширением "Внешнее расположение" использует приложение для applicationId.

Если у вас нет манифеста пользовательского приложения, Visual Studio создаст соответствующие артефакты во время процесса сборки. Проекты .NET по умолчанию встраивают манифест, который конфликтует с производимыми артефактами манифеста. Чтобы устранить это, щелкните правой кнопкой мыши проект, откройте свойства и на вкладке "Приложение " в разделе манифеста измените манифест внедрения с параметрами по умолчанию , чтобы создать приложение без манифеста.

Настройка проекта упаковки для подписи

Создайте сертификат для подписи, пройдя мастер публикации>создания пакетов приложений, показанный в разделе "Создание пакета приложения" с помощью мастера упаковки.

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

Сборка и проверка проекта упаковки в режиме выпуска

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

Создание проекта упаковки создает папку PackageWithExternalLocation в выходных данных сборки. Эта папка содержит MSIX файл, представляющий пакет удостоверений, а также InstallRemove скрипты PowerShell для регистрации и отмены регистрации созданного пакета удостоверений локально для тестирования.

Скрипт Install PowerShell регистрирует созданный пакет удостоверений локально и подключает его к папке-родственнице ExternalLocation для тестирования. Чтобы протестировать приложение с идентификацией, запустите исполняемый файл приложения из папки ExternalLocation.

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

Регистрация идентификационного пакета в установщике

Последним шагом для связывания удостоверения с приложением является регистрация пакета удостоверений в установщике и связывание его с каталогом установки приложения.

PowerShell

Выполнение powershell.exe с правильными параметрами — самый простой способ регистрации пакета. Рекомендации отличаются для установок на пользователя и установок на весь компьютер.

Per-User (PowerShell)

Чтобы зарегистрировать пакет идентификации во время персональной установки:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Path <PackagePath> -ExternalLocation <ExternalLocation>"
  • Задайте <PackagePath> абсолютный путь к подписанному пакету удостоверений, создаваемому на предыдущем шаге (с именем файла).
  • Задайте <ExternalLocation> абсолютный путь к каталогу установки приложения (без имен исполняемых файлов).

Чтобы отменить регистрацию пакета идентификаций во время удаления пользователя:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Get-AppxPackage <PackageName> | Remove-AppxPackage"
  • Задайте <PackageName> имя пакета, определенное в манифесте пакета удостоверений (атрибут Name элемента Identity )

Per-Machine (PowerShell)

Чтобы зарегистрировать пакет идентификации во время установки для всего компьютера:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Stage <PackagePath> -ExternalLocation <ExternalLocation>; Add-AppxProvisionedPackage -Online -PackagePath <PackagePath>"
  • Задайте <PackagePath> абсолютный путь к подписанному пакету удостоверений, создаваемому на предыдущем шаге (с именем файла).
  • Задайте <ExternalLocation> абсолютный путь к каталогу установки приложения (без имен исполняемых файлов).

Чтобы отменить регистрацию пакета удостоверений во время удаления на уровне компьютера:

powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "$packages = Get-AppxPackage <PackageName>; foreach ($package in $packages) { Remove-AppxProvisionedPackage -PackageName $package.PackageFullName -Online }; foreach ($package in $packages) { Remove-AppxPackage -Package $package.PackageFullName -AllUsers }
  • Задайте <PackageName> имя пакета, определенное в манифесте пакета удостоверений (атрибут Name элемента Identity )

API-интерфейсы PackageManager

Если вы предпочитаете вызывать API ОС для регистрации и отмены регистрации пакета удостоверений, API PackageManager предоставляет эквивалентные функциональные возможности PowerShell. Рекомендации отличаются для установок на пользователя и на всю систему.

Ниже приведены фрагменты кода, демонстрирующие API. Готовый к работе код в C# и C++см. в разделе "Примеры приложений".

Per-User (PackageManager)

Приведенный ниже код демонстрирует регистрацию пакета удостоверений с помощью метода AddPackageByUriAsync и отмены регистрации пакета удостоверений с помощью метода RemovePackageAsync .

using Windows.Management.Deployment;

...

// Register the identity package during install

var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);

var packageManager = new PackageManager();

var options = new AddPackageOptions();
options.ExternalLocationUri = externalUri;

await packageManager.AddPackageByUriAsync(packageUri, options);

...

// Unregister the identity package during uninstall

var packageManager = new PackageManager();

var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
  await packageManager.RemovePackageAsync(package.Id.FamilyName);
}

Обратите внимание на следующие важные сведения об этом коде:

  • Задайте externalLocation абсолютный путь к каталогу установки приложения (без имен исполняемых файлов)
  • Задайте packagePath абсолютный путь к подписанному пакету удостоверений, создаваемому на предыдущем шаге (с именем файла)
  • Его <IdentityPackageFamilyName> можно найти в редакторе визуального манифеста в Visual Studio в разделе Упаковка под Имя семейства пакетов>.

Per-Machine (PackageManager)

Приведенный ниже код демонстрирует регистрацию пакета удостоверений с помощью методов StagePackageByUriAsync и ProvisionPackageForAllUsersAsync и отмены регистрации пакета удостоверений с помощью метода RemovePackageAsync .

// Register the identity package during install

var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);

var packageManager = new PackageManager();

var options = new StagePackageOptions();
options.ExternalLocationUri = externalUri;

await packageManager.StagePackageByUriAsync(packageUri, options);
await packageManager.ProvisionPackageForAllUsersAsync(packageFamilyName);

...

// Unregister the identity package during uninstall

var packageManager = new PackageManager();
var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
  await packageManager.DeprovisionPackageForAllUsersAsync(package.Id.FamilyName);
  await packageManager.RemovePackageAsync(package.Id.FamilyName, RemovalOptions.RemoveForAllUsers);
}

Обратите внимание на следующие важные сведения об этом коде:

  • Задайте externalLocation абсолютный путь к каталогу установки приложения (без имен исполняемых файлов)
  • Задайте packagePath абсолютный путь к подписанному пакету удостоверений, создаваемому на предыдущем шаге (с именем файла)
  • Его <IdentityPackageFamilyName> можно найти в редакторе визуального манифеста в Visual Studio в разделе Упаковка>Имя семейства пакетов.

Примеры приложений

Полнофункциональные приложения на C# и C++, демонстрирующие, как зарегистрировать пакет удостоверений, см. в примерах PackageWithExternalLocation.

Другие необязательные шаги

Локализация и визуальные ресурсы

Некоторые функции, которые понимают идентификатор пакета, могут привести к строкам и изображениям, отображаемым в ОС Windows, из манифеста идентификатора пакета. Рассмотрим пример.

  • Приложение, использующее API камеры, микрофона или расположения, будет иметь выделенный элемент управления в параметрах конфиденциальности Windows, а также запрос на согласие с брокером, который пользователи могут использовать для предоставления или запрета доступа к этим конфиденциальным ресурсам.
  • Приложение, которое регистрирует цель общего доступа, отобразится в диалоге общего доступа.

Сведения о локализации строк в манифесте пакета удостоверений см. в разделе "Локализация манифеста".

При указании путей к изображениям в атрибутах VisualElements в манифесте пакета удостоверений, указанные пути должны быть относительными путями в каталоге установки вашего приложения, которые разрешаются к изображениям типа .png, .jpgили .jpeg. Имена атрибутов указывают ожидаемые размеры изображений (150x150 и 40x40).