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.
Dit artikel bevat de dingen die u moet weten voordat u uw bureaubladtoepassing inpakt. Mogelijk hoeft u niet veel te doen om uw toepassing klaar te maken voor het verpakkingsproces, maar als een van de onderstaande items van toepassing is op uw toepassing, moet u deze adresseren voordat u ze inpakt.
Voor uw .NET-toepassing is een versie van .NET Framework vereist die ouder is dan 4.6.2. Als u een .NET-toepassing inpakt, wordt u aangeraden dat uw toepassing is gericht op .NET Framework 4.6.2 of hoger. De mogelijkheid om verpakte bureaubladtoepassingen te installeren en uit te voeren, is voor het eerst geïntroduceerd in Windows 10, versie 1607 (ook wel de Jubileumupdate genoemd) en deze versie van het besturingssysteem bevat standaard .NET Framework 4.6.2. Latere versies van het besturingssysteem bevatten latere versies van .NET Framework. Zie dit artikel voor een volledige lijst van welke versies van .NET zijn opgenomen in latere versies van Windows 10.
Het wordt verwacht dat versies van .NET Framework ouder dan 4.6.2 in verpakte bureaubladtoepassingen in de meeste gevallen werken. Als u echter een eerdere versie dan 4.6.2 gebruikt, moet u de verpakte bureaubladtoepassing volledig testen voordat u deze distribueert aan gebruikers.
4.0 - 4.6.1: Toepassingen die gericht zijn op deze versies van .NET Framework, worden naar verwachting zonder problemen uitgevoerd op 4.6.2 of hoger. Daarom moeten deze toepassingen worden geïnstalleerd en uitgevoerd zonder wijzigingen in Windows 10, versie 1607 of hoger met de versie van het .NET Framework dat is opgenomen in het besturingssysteem.
2.0 en 3.5: In onze tests werken verpakte desktoptoepassingen die gericht zijn op deze versies van .NET Framework over het algemeen, maar kunnen in sommige scenario's prestatieproblemen vertonen. Als u deze verpakte toepassingen wilt installeren en uitvoeren, moet de .NET Framework 3.5-functie op de doelcomputer worden geïnstalleerd (deze functie bevat ook .NET Framework 2.0 en 3.0). U moet deze toepassingen ook grondig testen nadat u ze hebt verpakt.
Uw toepassing wordt altijd uitgevoerd met verhoogde beveiligingsbevoegdheden. Uw toepassing moet werken terwijl deze wordt uitgevoerd als de interactieve gebruiker. Gebruikers die uw toepassing installeren, zijn mogelijk geen systeembeheerders, dus het vereisen dat uw toepassing met verhoogde bevoegdheden wordt uitgevoerd, betekent dat deze niet correct wordt uitgevoerd voor standaardgebruikers. Als u van plan bent om uw app te publiceren naar de Microsoft Store, worden apps waarvoor uitbreiding van een deel van hun functionaliteit is vereist, niet geaccepteerd in de Store.
Voor uw toepassing is een Windows-stuurprogramma vereist. MSIX biedt geen ondersteuning voor Windows-stuurprogramma's.
Voor uw toepassing is een Windows-gebruikersservice vereist. MSIX biedt geen ondersteuning voor Windows-services per gebruiker. MSIX ondersteunt sessie-0 -services (per machine) die worden uitgevoerd onder een van de gedefinieerde systeemaccounts (LocalSystem, LocalService of NetworkService). Gebruik in plaats van een Windows-service voor gebruikers een achtergrondtaak.
De modules van uw app worden in het proces geladen naar processen die zich niet in uw Windows-app-pakket bevinden. Dit is niet toegestaan, wat betekent dat in-process-extensies, zoals shell-extensies, niet worden ondersteund. Maar als u twee apps in hetzelfde pakket hebt, kunt u communicatie tussen processen uitvoeren.
Zorg ervoor dat extensies die door de toepassing zijn geïnstalleerd, worden geïnstalleerd waar de toepassing is geïnstalleerd. Met Windows kunnen gebruikers en IT-beheerders de standaardinstallatielocatie voor pakketten wijzigen. Zie 'Instellingen-Systeem-Opslag-Meer opslaginstellingen-Wijzigen waar nieuwe inhoud wordt opgeslagen-Nieuwe apps worden opgeslagen in'. Als u een extensie installeert met uw toepassing, moet u ervoor zorgen dat de extensie geen aanvullende beperkingen voor de installatiemap heeft. Sommige extensies kunnen bijvoorbeeld de installatie van hun extensie uitschakelen op niet-systeemstations. Dit zal resulteren in een fout 0x80073D01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY) als de standaardlocatie is gewijzigd.
Uw toepassing maakt gebruik van een aangepaste model-id voor toepassingsgebruikers (AUMID).a0> Als uw proces SetCurrentProcessExplicitAppUserModelID aanroept om een eigen AUMID in te stellen, mag deze alleen de AUMID gebruiken die hiervoor is gegenereerd door de omgeving van het toepassingsmodel/het Windows-app-pakket. U kunt geen aangepaste AUMID's definiëren.De toepassing wijzigt de HKEY_LOCAL_MACHINE (HKLM)-register hive. Elke poging van uw toepassing om een HKLM-sleutel te maken of om er een te openen voor wijziging, leidt tot een fout met geweigerde toegang. Houd er rekening mee dat uw toepassing een eigen gevirtualiseerde privéweergave van het register heeft, dus het begrip van een register hive voor de hele gebruiker en computer (wat HKLM is) is niet van toepassing. U moet een andere manier vinden om te realiseren wat u met HKLM wilde doen, bijvoorbeeld door te schrijven naar HKEY_CURRENT_USER (HKCU).
Uw toepassing gebruikt een ddeexec-registersubsleutel als een middel om een andere app te starten. Gebruik in plaats daarvan een van de delegateExecute-werkwoordhandlers zoals geconfigureerd door de verschillende activeringsbare* extensies in het manifest van het app-pakket.
Uw toepassing schrijft naar de map AppData of naar het register met de bedoeling om gegevens te delen met een andere app. Na de conversie wordt AppData omgeleid naar het lokale app-gegevensarchief. Dit is een privéstore voor elke app.
Alle vermeldingen die uw toepassing naar de HKEY_LOCAL_MACHINE register hive schrijft, worden omgeleid naar een geïsoleerd binair bestand en alle vermeldingen die uw toepassing naar de HKEY_CURRENT_USER register hive schrijft, worden in een privé-per-gebruiker, per app-locatie geplaatst. Zie Achter de schermen van de Desktop Bridge voor meer informatie over bestands- en registeromleiding.
Gebruik een andere manier om gegevens te delen tussen processen. Voor meer informatie, zie Instellingen en andere app-gegevens opslaan en ophalen.
Uw toepassing schrijft naar de installatiemap voor uw app. Uw toepassing schrijft bijvoorbeeld naar een logboekbestand dat u in dezelfde map als uw exe hebt geplaatst. Dit wordt niet ondersteund, dus u moet een andere locatie vinden, zoals de lokale app-gegevensopslag.
Uw toepassing maakt gebruik van de huidige werkmap. Tijdens uitvoering krijgt uw gepackaged bureaubladtoepassing niet dezelfde werkmap die u eerder in uw .LNK-bestand hebt opgegeven. U moet uw CWD tijdens runtime wijzigen als het belangrijk is dat uw toepassing correct functioneert.
Opmerking
Als uw app naar de installatiemap moet schrijven of de huidige werkmap moet gebruiken, kunt u ook overwegen om een runtimefixup toe te voegen met behulp van het Package Support Framework voor uw pakket. Zie dit artikel voor meer informatie.
Voor de installatie van uw toepassing is gebruikersinteractie vereist. Het installatieprogramma van uw toepassing moet op de achtergrond kunnen worden uitgevoerd en moet alle vereisten installeren die niet standaard zijn ingeschakeld op een schone installatiekopieën van het besturingssysteem.
Uw toepassing maakt COM-objecten beschikbaar. Processen en extensies vanuit het pakket kunnen COM & OLE-servers registreren en gebruiken, zowel in-process als out-of-process (OOP). De Creators Update voegt verpakte COM-ondersteuning toe die de mogelijkheid biedt om OOP COM & OLE-servers te registreren die nu buiten het pakket zichtbaar zijn. Zie COM Server- en OLE-documentondersteuning voor Desktop Bridge.
Verpakte COM-ondersteuning werkt met bestaande COM-API's, maar werkt niet voor toepassingsextensies die afhankelijk zijn van het rechtstreeks lezen van het register, omdat de locatie voor Packaged COM zich op een privélocatie bevindt.
Uw toepassing maakt GAC-assembly's beschikbaar voor gebruik door andere processen. Uw toepassing kan GEEN GAC-assembly's beschikbaar maken voor gebruik door processen die afkomstig zijn van uitvoerbare bestanden buiten uw Windows-app-pakket. Processen vanuit het pakket kunnen GAC-assembly's als normaal registreren en gebruiken, maar ze zijn niet extern zichtbaar. Dit betekent dat interop-scenario's zoals OLE niet werken als ze worden aangeroepen door externe processen.
Uw toepassing koppelt C Runtime-bibliotheken (CRT) op een niet-ondersteunde manier. De Microsoft C/C++-runtimebibliotheek biedt routines voor programmeren voor het Microsoft Windows-besturingssysteem. Deze routines automatiseren veel algemene programmeertaken die niet worden geleverd door de C- en C++-talen. Als uw toepassing gebruikmaakt van een C/C++-runtimebibliotheek, moet u ervoor zorgen dat deze op een ondersteunde manier is gekoppeld.
Visual Studio 2017 ondersteunt zowel statische als dynamische koppelingen, zodat uw code algemene DLL-bestanden of statische koppelingen kan gebruiken om de bibliotheek rechtstreeks aan uw code te koppelen aan de huidige versie van het CRT. Indien mogelijk raden we uw toepassing aan dynamische koppelingen met VS 2017 te gebruiken.
Ondersteuning in eerdere versies van Visual Studio varieert. Zie de volgende tabel voor meer informatie:
Visual Studio-versie Dynamische koppeling Statische koppeling 2005 (VC 8) Niet ondersteund Ondersteund 2008 (VC 9) Niet ondersteund Ondersteund 2010 (VC 10) Ondersteund Ondersteund 2012 (VC 11) Ondersteund Niet ondersteund 2013 (VC 12) Ondersteund Niet ondersteund 2015 en 2017 (VC 14) Ondersteund Ondersteund Opmerking: In alle gevallen moet u een koppeling maken naar de meest recente openbaar beschikbare CRT.
Uw toepassing installeert en laadt assembly's uit de windows-map naast elkaar. Uw toepassing maakt bijvoorbeeld gebruik van C-runtimebibliotheken VC8 of VC9 en koppelt deze dynamisch vanuit de map Windows naast elkaar, wat betekent dat uw code gebruikmaakt van de algemene DLL-bestanden uit een gedeelde map. Dit wordt niet ondersteund. U moet ze statisch koppelen door rechtstreeks verbinding te maken met de herdistribueerbare bibliotheekbestanden in uw code.
Uw toepassing maakt gebruik van een afhankelijkheid in de map System32/SysWOW64. Als u wilt dat deze DLL's werken, moet u ze opnemen in het virtuele bestandssysteemgedeelte van uw Windows-app-pakket. Dit zorgt ervoor dat de toepassing zich gedraagt alsof de DLL's zijn geïnstalleerd in de map System32/SysWOW64 . Maak in de hoofdmap van het pakket een map met de naam VFS. Maak in die map een SystemX64-map en een SystemX86-map. Plaats vervolgens de 32-bits versie van uw DLL in de map SystemX86 en plaats de 64-bits versie in de map SystemX64 .
Uw app maakt gebruik van een VCLibs-frameworkpakket. Als u een C++ Win32-app converteert, moet u de implementatie van visual C++ Runtime afhandelen. Visual Studio 2019 en de Windows SDK bevatten de nieuwste frameworkpakketten voor versie 11.0, 12.0 en 14.0 van visual C++ Runtime in de volgende mappen:
VC 14.0-frameworkpakketten: C:\Program Files (x86)\Microsoft SDK's\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0
VC 12.0-frameworkpakketten: C:\Program Files (x86)\Microsoft SDK's\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0
VC 11.0-frameworkpakketten: C:\Program Files (x86)\Microsoft SDK's\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0
Als u een van deze pakketten wilt gebruiken, moet u verwijzen naar het pakket als een afhankelijkheid in uw pakketmanifest. Wanneer klanten de handelsversie van uw app installeren vanuit de Microsoft Store, wordt het pakket samen met uw app geïnstalleerd vanuit de Store. De afhankelijkheden worden niet geïnstalleerd als u de app handmatig installeert. Als u de afhankelijkheden handmatig wilt installeren, moet u het juiste frameworkpakket installeren met behulp van het juiste .appx-pakket voor x86, x64 of ARM in de bovenstaande installatiemappen.
Als u wilt verwijzen naar een Visual C++ Runtime Framework-pakket in uw app:
Ga naar de installatiemap van het frameworkpakket die hierboven wordt vermeld voor de versie van de Visual C++ Runtime die door uw app wordt gebruikt.
Open het SDKManifest.xml-bestand in die map, zoek het
FrameworkIdentity-Debug
ofFrameworkIdentity-Retail
kenmerk (afhankelijk van of u de foutopsporings- of handelsversie van de runtime gebruikt) en kopieer deName
enMinVersion
waarden uit dat kenmerk. Dit is bijvoorbeeld hetFrameworkIdentity-Retail
kenmerk voor het huidige VC 14.0-frameworkpakket.FrameworkIdentity-Retail = "Name = Microsoft.VCLibs.140.00.UWPDesktop, MinVersion = 14.0.27323.0, Publisher = 'CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US'"
Voeg in het pakketmanifest voor uw app het volgende
<PackageDependency>
element toe onder het<Dependencies>
knooppunt. Zorg ervoor dat u deName
waardenMinVersion
vervangt door de waarden die u in de vorige stap hebt gekopieerd. In het volgende voorbeeld wordt een afhankelijkheid opgegeven voor de huidige versie van het VC 14.0-frameworkpakket.<PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.27323.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
Uw toepassing bevat een aangepaste jumplist. Er zijn verschillende problemen en opmerkingen waar u rekening mee moet houden bij het gebruik van jump lists.
De architectuur van uw app komt niet overeen met het besturingssysteem. Jump-lijsten werken momenteel niet correct als de toepassings- en besturingssysteemarchitecturen niet overeenkomen (bijvoorbeeld een x86-toepassing die wordt uitgevoerd op x64 Windows). Op dit moment is er geen andere tijdelijke oplossing dan om uw toepassing opnieuw te compileren naar de overeenkomende architectuur.
Uw toepassing maakt vermeldingen in de jumplist en roept ICustomDestinationList::SetAppID of SetCurrentProcessExplicitAppUserModelID aan. Stel uw AppID niet programmeerbaar in binnen de code. Als u dit doet, worden de vermeldingen in de snellijst niet weergegeven. Als uw toepassing een aangepaste id nodig heeft, geeft u deze op met behulp van het manifestbestand. Raadpleeg Een bureaubladtoepassing handmatig verpakken voor instructies. De AppID voor uw toepassing wordt opgegeven in de sectie YOUR_PRAID_HERE .
Uw toepassing voegt een jump list shell-koppeling toe die verwijst naar een uitvoerbaar bestand in uw pakket. U kunt de uitvoerbare bestanden in uw pakket niet rechtstreeks starten vanuit een jump-list (met uitzondering van het specifieke absolute pad van een app's eigen .exe). Registreer in plaats daarvan een app-uitvoeringsalias (waarmee uw verpakte bureaubladtoepassing via een trefwoord kan beginnen alsof deze zich op het PAD bevindt) en stel in plaats daarvan het doelpad voor de koppeling in op de alias. Zie Uw bureaubladtoepassing integreren met Windows 10 voor meer informatie over het gebruik van de extensie appExecutionAlias. Houd er rekening mee dat als u wilt dat assets van de koppeling in de snellijst overeenkomen met het oorspronkelijke .exe, u assets zoals het pictogram moet instellen door SetIconLocation te gebruiken en de weergavenaam met PKEY_Title, zoals u zou doen voor andere aangepaste vermeldingen.
Uw toepassing voegt een spronglijstvermelding toe die verwijst naar assets in het pakket van de app via absolute paden. Het installatiepad van een toepassing kan veranderen wanneer de pakketten worden bijgewerkt, de locatie van assets wijzigen (zoals pictogrammen, documenten, uitvoerbare bestanden, enzovoort). Als vermeldingen in jumplists verwijzen naar dergelijke resources via absolute paden, moet de toepassing zijn jumplists periodiek vernieuwen (bijvoorbeeld bij het starten van de toepassing) om ervoor te zorgen dat paden correct worden omgezet. U kunt ook de UWP Windows.UI.StartScreen.JumpList-API's gebruiken, waarmee u kunt verwijzen naar tekstreeksen en afbeeldingsbronnen met behulp van het pakketgerelateerde ms-resource URI-schema (dat ook taal-, DPI- en hoog contrastbewust is).
Uw toepassing start een hulpprogramma om taken uit te voeren. Vermijd het starten van opdrachthulpprogramma's zoals PowerShell en Cmd.exe. Als gebruikers uw toepassing zelfs installeren op een systeem waarop de Windows 10 S wordt uitgevoerd, kan uw toepassing ze helemaal niet starten. Hierdoor kan het indienen van uw toepassing naar de Microsoft Store worden geblokkeerd, omdat alle apps die zijn ingediend bij de Microsoft Store compatibel moeten zijn met Windows 10 S.
Het starten van een hulpprogramma kan vaak een handige manier bieden om informatie te verkrijgen van het besturingssysteem, toegang te krijgen tot het register of toegang te krijgen tot systeemmogelijkheden. U kunt echter UWP-API's gebruiken om dit soort taken uit te voeren. Deze API's zijn beter presterend omdat ze geen afzonderlijk uitvoerbaar bestand nodig hebben om uit te voeren, maar belangrijker is dat de toepassing niet buiten het pakket komt. Het ontwerp van de app blijft consistent met de isolatie, vertrouwen en beveiliging die wordt geleverd met een toepassing die u hebt verpakt en uw toepassing gedraagt zich zoals verwacht op systemen met Windows 10 S.
Uw toepassing host invoegtoepassingen, plug-ins of extensies. In veel gevallen zullen COM-achtige extensies waarschijnlijk blijven functioneren, zolang de extensie niet is verpakt en met volledige rechten wordt geïnstalleerd. Dat komt doordat deze installatieprogramma's hun volledige vertrouwensmogelijkheden kunnen gebruiken om het register te wijzigen en extensiebestanden te plaatsen waar uw hosttoepassing ze verwacht te vinden.
Als deze extensies echter zijn verpakt en vervolgens zijn geïnstalleerd als een Windows-app-pakket, werken ze niet omdat elk pakket (de hosttoepassing en de extensie) van elkaar worden geïsoleerd. Zie Achter de schermen van de Desktop Bridge voor meer informatie over hoe toepassingen worden geïsoleerd van het systeem.
Alle toepassingen en extensies die gebruikers installeren op een systeem met Windows 10 S moeten worden geïnstalleerd als Windows-app-pakketten. Dus als u van plan bent om uw extensies te verpakken, of als u van plan bent om uw inzenders aan te moedigen om ze te verpakken, moet u overwegen hoe u de communicatie tussen het hosttoepassingspakket en eventuele uitbreidingspakketten mogelijk maakt. Een manier waarop u dit kunt doen, is door een app-service te gebruiken.
Uw toepassing genereert code. Uw toepassing kan code genereren die in het geheugen wordt gebruikt, maar vermijd het schrijven van gegenereerde code op schijf omdat het certificeringsproces van de Windows-app die code niet kan valideren voordat de app wordt verzonden. Apps die code naar schijf schrijven, worden ook niet goed uitgevoerd op systemen met Windows 10 S. Hierdoor kan het indienen van uw toepassing naar de Microsoft Store worden geblokkeerd, omdat alle apps die zijn ingediend bij de Microsoft Store compatibel moeten zijn met Windows 10 S.
Belangrijk
Nadat u uw Windows-app-pakket hebt gemaakt, test u uw toepassing om ervoor te zorgen dat deze correct werkt op systemen met Windows 10 S. Alle apps die naar de Microsoft Store worden verzonden, moeten compatibel zijn met Windows 10 S. Apps die niet compatibel zijn, worden niet geaccepteerd in de Store. Zie Uw Windows-app testen voor Windows 10 S.