Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Многие функции Windows могут использоваться настольным приложением только в том случае, если это приложение имеет идентификатор пакета во время выполнения. См. функции , для которых требуется идентификация пакета. Если у вас есть настольное приложение с собственным установщиком, вам мало нужно изменить, чтобы воспользоваться идентификацией пакета.
Начиная с Windows 10 версии 2004, вы можете предоставить удостоверение пакета приложению, просто создав и зарегистрируя пакет с внешним расположением в приложении. Упаковка с внешним расположением позволяет зарегистрировать простой идентификационный пакет в вашем существующем установщике, не изменяя способ и место установки приложения. Если вы знакомы с полной упаковкой MSIX, это гораздо более легкий вариант веса, как описано ниже.
Чтобы создать и зарегистрировать пакет удостоверений, выполните следующие действия.
- Создайте манифест для пакета идентификации
- Создание и подписание пакета удостоверений
- Добавление метаданных удостоверения в манифесты классического приложения
- Зарегистрируйте пакет идентификаторов в установщике
Создайте манифест для пакета идентификации
Первым шагом к созданию пакета удостоверений является создание манифеста пакета на основе приведенного ниже шаблона. Это манифест MSIX, но используется только для идентификации и не изменяет поведение среды выполнения приложения.
<?xml version="1.0" encoding="utf-8"?>
<Package IgnorableNamespaces="uap uap10"
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
<Identity Name="ContosoPhotoStore" Publisher="CN=Contoso" Version="1.0.0.0" ProcessorArchitecture="neutral" />
<Properties>
<DisplayName>Contoso PhotoStore</DisplayName>
<PublisherDisplayName>Contoso</PublisherDisplayName>
<Logo>Assets\storelogo.png</Logo>
<uap10:AllowExternalContent>true</uap10:AllowExternalContent>
</Properties>
<Resources>
<Resource Language="en-us" />
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.26100.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
<rescap:Capability Name="unvirtualizedResources"/>
</Capabilities>
<Applications>
<Application Id="ContosoPhotoStore" Executable="ContosoPhotoStore.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="win32App">
<uap:VisualElements AppListEntry="none" DisplayName="Contoso PhotoStore" Description="Contoso PhotoStore App" BackgroundColor="transparent" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" />
</Application>
</Applications>
</Package>
Обратите внимание на следующие важные сведения об этом манифесте:
-
Identity
Заполните атрибуты элемента сведениями о приложении-
Publisher
должен соответствоватьSubject
сертификату, используемому для подписывания приложения.
-
- Заполните элементы
DisplayName
иPublisherDisplayName
подробностями вашего приложения- Если в манифест помимо простого удостоверения не добавляются дополнительные функции, эти значения не отображаются нигде.
- Обновите элемент
Logo
на относительный путь в каталоге установки приложения, который должен ссылаться на изображение .png, .jpgили .jpeg. - Убедитесь, что элемент
AllowExternalContent
установлен наtrue
, как показано, для повторного использования вашего существующего установщика. - Установите и
MaxVersionTested
выполните указанные ниже действияTargetDeviceFamily
MinVersion
.- Установите
MinVersion
значение10.0.19041.0
, как показано для максимальной доступности и единообразия в версиях ОС Windows 10 и Windows 11 - Установите
MinVersion
для10.0.26100.0
ограничения пакета удостоверений Windows 11 версии 24H2 и более поздних версий. - Установите
MaxVersionTested
в10.0.26100.0
, как показано
- Установите
- Убедитесь, что возможности
runFullTrust
иunvirtualizedResources
объявлены так, как показано для совместимости с Win32. -
Application
Добавление элемента, как показано для каждого исполняемого файла, связанного с приложением- Убедитесь, что
TrustLevel
являетсяmediumIL
, аRuntimeBehavior
являетсяwin32App
, как показано для совместимости с Win32.
- Убедитесь, что
-
VisualElements
Дочерний элемент является обязательным, ноAppListEntry="none"
атрибут гарантирует, что пакет удостоверений не отображается среди установленных приложений.-
DisplayName
Обновите иDescription
атрибуты с соответствующими сведениями и оставьте другие атрибуты, как показано (пути к указанному изображению не нужно разрешать).
-
Пакет идентификации, созданный из этого манифеста, будет связан с директорией установки вашего приложения при регистрации пакета на следующем шаге.
Создание и подписание пакета удостоверений
После создания манифеста пакета удостоверений создайте пакет удостоверений с помощью средстваMakeAppx.exe в пакете SDK для Windows.
MakeAppx.exe pack /o /d <path to directory that contains manifest> /nv /p <output path>\MyPackage.msix
Примечание. Флаг /nv
требуется для обхода проверки пути к файлам, на которые ссылается ссылка, в манифесте.
Для установки на компьютеры конечных пользователей пакет удостоверений должен быть подписан сертификатом, которому доверяют на целевом компьютере. Вы можете создать самозаверяющий сертификат для целей разработки и подписать пакет удостоверений с помощью SignTool, который доступен в пакете SDK для Windows, но рабочий сертификат из ИТ-отдела или службы, например доверенный подписывание Azure , потребуется для регистрации пакета на конечных компьютерах пользователей.
SignTool.exe sign /fd SHA256 /a /f <path to certificate>\MyCertificate.pfx /p <certificate password> <path to package with external location>\MyPackage.msix
Примечание. Сведения о том, как создавать и подписывать пакет удостоверений в конвейере CI/CD с помощью рабочих сертификатов, см. в разделе "Общие сведения о конвейере MSIX и CI/CD".
Добавление метаданных удостоверения в манифесты классического приложения
Пакет удостоверений подключается к исполняемым файлам приложения, включая манифесты приложений (манифесты параллельно или fusion) с метаданными, соответствующими метаданным из манифеста пакета удостоверений.
В Visual Studio можно добавить манифест приложения в исполняемый проект, открыв контекстное меню "Проект" и выбрав "Добавить>файл манифеста приложения новогоэлемента>".
Ниже приведен пример фрагмента манифеста приложения, демонстрирующего элемент msix
, необходимый для подключения бинарных файлов к метаданным из пакета удостоверений.
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="0.0.0.0" name="ContosoPhotoStore"/>
<msix xmlns="urn:schemas-microsoft-com:msix.v1"
publisher="CN=Contoso"
packageName="ContosoPhotoStore"
applicationId="ContosoPhotoStore"
/>
</assembly>
Атрибуты msix
элемента должны соответствовать этим значениям из манифеста пакета удостоверений:
- Атрибуты
packageName
иpublisher
должны соответственно соответствовать атрибутамName
иPublisher
в элементеIdentity
вашего манифеста пакета удостоверений. - Атрибут
applicationId
должен соответствовать атрибутуId
соответствующегоApplication
элемента в манифесте пакета удостоверений.
Регистрация идентификационного пакета в установщике
Последним шагом для связывания удостоверения с приложением является регистрация пакета удостоверений в установщике и связывание его с каталогом установки приложения.
В приведенном PackageManager.AddPackageByUriAsync
ниже фрагменте показано использование метода для регистрации пакета удостоверений.
using Windows.Management.Deployment;
...
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);
Обратите внимание на следующие важные сведения об этом коде:
- Задайте
externalLocation
абсолютный путь к каталогу установки приложения (без имен исполняемых файлов) - Задайте
packagePath
абсолютный путь пакета удостоверений, созданный на предыдущем шаге (с именем файла)
Полный пример, включая отмену регистрации пакета при удалении, см. в разделе StartUp.cs
.
Пример приложения
Ознакомьтесь с примером SparsePackages — это полностью рабочее тестовое приложение, демонстрирующее, как назначить идентичность пакета классическому приложению, зарегистрировав пакет идентичности.
Windows developer