Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u uitgepakte apps integreert met de functie Windows Share . Met de functie Delen kunnen gebruikers inhoud van de ene Windows-app naar een andere delen. Een uitgepakte app moet worden geleverd met pakketidentiteit, zodat deze kan worden geregistreerd als een sharedoel. Zodra de app is geregistreerd, kan de app gedeelde bestanden ontvangen en verwerken.
Een uitgepakte app onboarden als een sharedoel:
- Geef de app een pakketidentiteit op
- Het Share-contract implementeren
Uitgepakte apps voorzien van pakketidentiteit
Een app kan pakketidentiteit op twee manieren ophalen:
- Maak een nieuw MSIX-installatiepakket (voorkeursmethode) OF
- Apps verpakken met een externe locatie die compatibel is met het huidige installatieprogramma. Dit wordt alleen aanbevolen voor apps met een bestaand installatieprogramma en die niet kunnen overschakelen naar MSIX-installatie.
Een nieuw MSIX-installatiepakket maken
Het is raadzaam om de app in te pakken met MSIX met behulp van de sjabloon Windows Application Packaging Project in Visual Studio. Dit omvat alle binaire bestanden in het MSIX-pakket en biedt een schone en vertrouwde installatie-ervaring.
Dingen die u moet weten voordat u bureaublad-apps inpakt: Bereid u voor om een bureaubladtoepassing (MSIX) te verpakken.
Volg de stappen in Uw bureaubladtoepassing instellen voor MSIX-pakketten in Visual Studio om een pakket te genereren voor het project van uw bestaande app.
Opmerking
Wanneer u het verpakkingsproject maakt, selecteert u Windows 10, versie 2004 (10.0; Build 19041) of hoger als minimumversie.
Wanneer dat is voltooid, stelt u het pakket samen door de instructies te volgen in Een desktop- of UWP-app verpakken in Visual Studio.
Verpakking met externe locatie compatibel maken met het huidige installatieprogramma
De tweede manier om uw app-pakketidentiteit te geven, is door een pakket met externe locatie aan uw toepassing toe te voegen en dit te registreren bij uw bestaande installatieprogramma. Het pakket met externe locatie is een leeg MSIX-pakket dat het .appxmanifest met identiteit bevat, doelregistratie en visuele assets deelt. De binaire bestanden van de app worden nog steeds beheerd door het bestaande installatieprogramma van de app. Bij het registreren van het pakket moet u de installatielocatie van de app opgeven in de API. Het is belangrijk om de identiteit in het MSIX-pakketmanifest en het Win32-app-manifest gesynchroniseerd te houden met het certificaat dat wordt gebruikt voor het ondertekenen van de app.
Stappen voor het verlenen van pakketidentiteit aan een uitgepakte app
Documentatie over het maken van een pakket met externe locatie is hier beschikbaar, inclusief informatie over sjablonen die moeten worden gebruikt: Pakketidentiteit verlenen door pakketten met externe locatie te verpakken.
De volledige voorbeeld-app is beschikbaar op GitHub: Verpakt met externe locatie.
Registreren als een Share-doelwit
Zodra de app pakketidentiteit heeft, is de volgende stap het implementeren van het Share-contract. Met het contract Delen kan uw app gegevens ontvangen van een andere app.
U kunt dezelfde stappen volgen in de sectie Registreren als een sharedoel van de documentatie voor verpakte apps die kunnen worden geïntegreerd met Share Sheet.
Overzicht van de voorbeeld-PhotoStore-app
In deze procedure over pakketidentiteit, registratie en shareactivering voor uitgepakte Win32-toepassingen leert u hoe u pakketidentiteit kunt verlenen aan een uitgepakte Win32-toepassing door een pakket met externe locatie te maken. Zodra de app een pakketidentiteit heeft, kan deze de activering registreren en afhandelen als een deel-doel. U voert de volgende stappen uit met behulp van het PhotoStoreDemo-voorbeeld:
-
AppxManifest.xmlHet bestand genereren - Een pakket maken
- Het pakket ondertekenen
- Het pakket registreren
- App-activering afhandelen
Begin met het maken van het AppxManifest.xml bestand, dat de benodigde eigenschappen bevat, zoals <AllowExternalContent>identiteit en mogelijkheden en doelextensie delen. Zorg ervoor dat de Publisheren PackageNameApplicationId waarden in het AppxManifest.xml bestand overeenkomen met de waarden in het PhotoStoreDemo.exe.manifest bestand. De Publisher waarde moet ook overeenkomen met de waarde in het certificaat dat wordt gebruikt om het pakket te ondertekenen. Voeg visuele assets toe zoals vereist en waarnaar wordt verwezen in AppxManifest.xml. In Visual Studio kunt u het knooppunt Visual Assets gebruiken bij het bewerken package.manifest in het project Application Packaging om de vereiste visuele assets te genereren.
Dit is een voorbeeldfragment AppxManifest.xml waarvoor externe inhoud is toegestaan:
<Identity Name="PhotoStoreDemo" ProcessorArchitecture="neutral" Publisher="CN=YourPubNameHere" Version="1.0.0.0" />
<Properties>
<DisplayName>PhotoStoreDemo</DisplayName>
<PublisherDisplayName>Sparse Package</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.19041.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
<rescap:Capability Name="unvirtualizedResources"/>
</Capabilities>
<Applications>
<Application Id="PhotoStoreDemo" Executable="PhotoStoreDemo.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="win32App">
<uap:VisualElements AppListEntry="none" DisplayName="PhotoStoreDemo" Description="PhotoStoreDemo" BackgroundColor="transparent" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png"></uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap:Extension Category="windows.shareTarget">
<uap:ShareTarget Description="Send to PhotoStoreDemo">
<uap:SupportedFileTypes>
<uap:FileType>.jpg</uap:FileType>
<uap:FileType>.png</uap:FileType>
<uap:FileType>.gif</uap:FileType>
</uap:SupportedFileTypes>
<uap:DataFormat>StorageItems</uap:DataFormat>
<uap:DataFormat>Bitmap</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
...
Dit is een voorbeeldbestand Application.exe.manifestbestand:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="PhotoStoreDemo.app"/>
<msix xmlns="urn:schemas-microsoft-com:msix.v1"
publisher="CN=YourPubNameHere"
packageName="PhotoStoreDemo"
applicationId="PhotoStoreDemo"
/>
</assembly>
Als u vervolgens het pakket met externe locatie wilt maken, gebruikt u het MakeAppx.exe hulpprogramma met de /nv opdracht om een pakket met het AppxManifest.xml bestand te maken.
Voorbeeld:
MakeAppx.exe pack /d <Path to directory with AppxManifest.xml> /p <Output Path>\mypackage.msix /nv
Opmerking
Een pakket met externe locatie bevat een pakketmanifest, maar geen andere binaire bestanden en inhoud van apps. Het manifest van een pakket met externe locatie kan verwijzen naar bestanden buiten het pakket op een vooraf bepaalde externe locatie.
Onderteken uw pakket met een vertrouwd certificaat met behulp van SignTool.exe.
Voorbeeld:
SignTool.exe sign /fd SHA256 /a /f <path to cert> /p <cert key> <Path to Package>
Het certificaat dat wordt gebruikt voor het ondertekenen van het pakket, moet worden geïnstalleerd op een vertrouwde locatie op de computer.
Registreer het pakket bij de eerste uitvoering van de toepassing bij Windows. Wanneer een app een eigen installatieprogramma heeft, moet deze ook de ondertekende MSIX als nettolading bevatten en deze op een opgegeven locatie plaatsen (bijvoorbeeld de installatielocatie van de app). Deze locatie moet tijdens runtime bekend zijn bij de app, omdat de app het absolute pad van MSIX nodig heeft om deze te registreren. Plaats ook de assets en resources.pri op de installatielocatie van de app.
De volgende code is een voorbeeld van de uitgepakte uitvoering van de main-methode van de app:
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
bool bPackageRegistered = false;
//bPackageRegistered = registerPackageWithExternalLocation(externalLocation, externalPkgPath);
if (bPackageRegistered)
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
In dit voorbeeld ziet u hoe u de MSIX registreert bij de eerste uitvoering van de app:
[STAThread]
public static void Main(string[] cmdArgs)
{
//If app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
if (registerPackageWithExternalLocation(externalLocation, externalPkgPath))
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
Ten slotte moet u de activering van de app afhandelen:
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its sparse package
if (!ExecutionMode.IsRunningWithIdentity())
{
...
}
else //App is registered and running with identity, handle launch and activation
{
//Handle Sparse Package based activation e.g Share target activation or clicking on a Tile
// Launching the .exe directly will have activationArgs == null
var activationArgs = AppInstance.GetActivatedEventArgs();
if (activationArgs != null)
{
switch (activationArgs.Kind)
{
case ActivationKind.Launch:
HandleLaunch(activationArgs as LaunchActivatedEventArgs);
break;
case ActivationKind.ToastNotification:
HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);
break;
case ActivationKind.ShareTarget: // Handle the activation as a share target
HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
break;
default:
HandleLaunch(null);
break;
}
}
//This is a direct exe based launch e.g. double click app .exe or desktop shortcut pointing to .exe
else
{
SingleInstanceManager singleInstanceManager = new SingleInstanceManager();
singleInstanceManager.Run(cmdArgs);
}
}
Demo van Windows Share met pakketidentiteit
In de volgende video ziet u hoe een uitgepakte app een sharedoel kan zijn nadat een pakketidentiteit is verleend en als sharedoel is geregistreerd:
Zie ook
- Overzicht van Windows App SDK-implementatie
- Uw eerste WinUI 3-project maken
- migreren van UWP naar de Windows App SDK-
- Voordelen en nadelen van het verpakken van een toepassing - Overzicht van implementatie
- Identiteit, registratie en activering van niet-verpakte Win32-apps
- Contract-implementatie delen voor Windows App SDK
- Contractimplementatie voor apps met externe locatie delen
Windows developer