Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para obter as motivações por trás da adição da identidade do pacote, bem como as diferenças entre a criação de pacotes de identidade no Visual Studio e a criação manual, consulte Visão geral.
Este tópico descreve como criar e registrar um pacote de identidade manualmente. Para obter informações sobre como criar um pacote de identidade no Visual Studio, consulte Conceder identidade ao pacote através do empacotamento com localização externa no Visual Studio.
Estas são as etapas (que este tópico descreve em detalhes) para criar e registrar um pacote de identidade manualmente:
- Criar um manifesto do pacote para o pacote de identidade
- Compilar e assinar o pacote de identidade
- Adicionar aos manifests de aplicativos desktop os metadados de identidade
- Registrar o pacote de identidade no instalador
- Etapas opcionais
Criar um manifesto do pacote para o pacote de identidade
A primeira etapa para criar um pacote de identidade é criar um manifesto de pacote com base no modelo abaixo. Esse é um manifesto MSIX, mas é usado apenas para identidade e não altera o comportamento de runtime do aplicativo.
<?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>
Observe os detalhes importantes abaixo sobre este manifesto:
- Preencha os atributos de
Identity
elemento com os detalhes do aplicativo-
Publisher
deve corresponder aoSubject
certificado usado para assinar o aplicativo
-
- Preencha os elementos
DisplayName
ePublisherDisplayName
com os detalhes do seu aplicativo- A menos que você adicione recursos adicionais ao manifesto além da identidade simples, esses valores não são exibidos em nenhum lugar
- Atualize o elemento
Logo
para um caminho relativo dentro do diretório de instalação do aplicativo que será resolvido para uma imagem .png, .jpg ou .jpeg - Verifique se o
AllowExternalContent
elemento está definidotrue
como mostrado, o que permite reutilizar seu instalador existente - Defina
TargetDeviceFamily
MinVersion
eMaxVersionTested
conforme abaixo:- Defina
MinVersion
como10.0.19041.0
conforme mostrado para o máximo de alcance e uniformidade nas versões do sistema operacional Windows 10 e Windows 11 - Defina
MinVersion
para10.0.26100.0
restringir o pacote de identidade ao Windows 11, versão 24H2 e superior - Configure
MaxVersionTested
para10.0.26100.0
conforme mostrado
- Defina
- Verifique se as capacidades
runFullTrust
eunvirtualizedResources
são declaradas conforme mostrado para a compatibilidade com o Win32 - Adicionar um
Application
elemento conforme mostrado para cada executável associado ao seu aplicativo- Verifique se
TrustLevel
estámediumIL
eRuntimeBehavior
estáwin32App
conforme mostrado para a compatibilidade do Win32
- Verifique se
- O elemento filho
VisualElements
é necessário, mas o atributoAppListEntry="none"
garante que o pacote de identidade não seja mostrado entre os aplicativos instalados- Atualize os atributos
DisplayName
eDescription
com detalhes relevantes e mantenha os outros atributos como mostrado (os caminhos de imagem referenciados não precisam ser resolvidos)
- Atualize os atributos
O pacote de identidade criado com base nesse manifesto será conectado ao diretório de instalação do aplicativo quando você registrar o pacote em uma etapa posterior.
Compilar e assinar o pacote de identidade
Depois de criar o manifesto do pacote de identidade, crie o pacote de identidade usando a ferramentaMakeAppx.exe no SDK do Windows.
MakeAppx.exe pack /o /d <path to directory that contains manifest> /nv /p <output path>\MyPackage.msix
Observação: a flag /nv
é necessária para ignorar a validação de caminhos de arquivo referenciados no manifesto.
Para ser instalado em computadores de usuário final, o pacote de identidade deve ser assinado com um certificado confiável no computador de destino. Você pode criar um novo certificado autoassinado para fins de desenvolvimento e assinar seu pacote de identidade usando o SignTool, que está disponível no SDK do Windows, mas um certificado de produção de um Departamento de TI ou de um serviço como a Assinatura Confiável do Azure será necessário para registrar o pacote em computadores de usuário final.
SignTool.exe sign /fd SHA256 /a /f <path to certificate>\MyCertificate.pfx /p <certificate password> <path to package with external location>\MyPackage.msix
Observação: para saber como criar e assinar o pacote de identidade em um pipeline de CI/CD com certificados de produção, consulte a Visão geral do pipeline de CI/CD e MSIX para obter exemplos.
Adicione metadados de identidade aos manifestos do aplicativo da área de trabalho
Você conecta o pacote de identidade com os executáveis do aplicativo incluindo manifestos de aplicativo (também conhecidos como manifestos lado a lado ou de fusão) com metadados que correspondem aos metadados do manifesto do pacote de identidade.
No Visual Studio, você pode adicionar um manifesto de aplicativo a um projeto executável abrindo o menu de contexto do Projeto e selecionando Adicionar>Novo Arquivo de Manifesto do Aplicativo>.
Veja abaixo um trecho de exemplo do manifesto do aplicativo demonstrando o elemento msix
necessário para conectar seus binários com metadados do pacote de identidade.
<?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>
Os atributos do elemento msix
devem corresponder a estes valores do manifesto do pacote de identidade:
- Os atributos
packageName
epublisher
devem corresponder aos atributosName
ePublisher
no elementoIdentity
no manifesto do pacote de identidade, respectivamente. - O atributo
applicationId
deve corresponder ao atributoId
do elementoApplication
correspondente no manifesto do pacote de identidade
Registrar o pacote de identidade no instalador
A última etapa para associar a identidade ao aplicativo é registrar o pacote de identidade no instalador e associá-lo ao diretório de instalação do aplicativo.
O snippet abaixo demonstra o uso do PackageManager.AddPackageByUriAsync
método para registrar o pacote de identidade.
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);
Observe os detalhes importantes abaixo sobre este código:
- Defina
externalLocation
como o caminho absoluto do diretório de instalação do aplicativo (sem nomes executáveis) - Defina
packagePath
como o caminho absoluto do pacote de identidade produzido na etapa anterior (com o nome do arquivo)
Para obter código pronto para uso em produção em C# e C++, confira aplicativos de exemplo abaixo. Os exemplos também demonstram como cancelar o registro do pacote de identidade na desinstalação.
Aplicativos de exemplo
Consulte os exemplos de PackageWithExternalLocation para aplicativos C# e C++ totalmente funcionais que demonstram como registrar um pacote de identidade.
Etapas opcionais
Localização
Alguns recursos que compreendem a identidade de um pacote podem fazer com que cadeias de caracteres do manifesto desse pacote sejam exibidas no sistema operacional Windows. Por exemplo:
- Um aplicativo que usa APIs de câmera, microfone ou localização terá um alternador de controle dedicado nas Configurações de Privacidade do Windows, juntamente com um prompt de consentimento mediado que os usuários podem usar para conceder ou negar acesso a esses recursos sensíveis.
- Um aplicativo que registra um destino de compartilhamento aparecerá na caixa de diálogo de compartilhamento.
Para localizar as cadeias de caracteres no manifesto do pacote de identidade, consulte Localize o manifesto.
Windows developer