Vorbereiten des Verpackens einer DesktopanwendungPrepare to package a desktop application

In diesem Artikel sind Punkte aufgeführt, die Sie vor dem Verpacken von Desktopanwendungen wissen sollten.This article lists the things you need to know before you package your desktop application. Sie müssen möglicherweise nicht viel tun, um Ihre Anwendung für die Verpackung vorzubereiten. Trifft jedoch einer der folgenden Punkte auf Ihre Anwendung zu, müssen Sie sich vor der Verpackung darum kümmern.You might not have to do much to get your application ready for the packaging process, but if any of the items below apply to your application, you need to address it before packaging.

  • Ihre .NET-Anwendung erfordert eine Version des .NET-Frameworks, die älter als 4.6.2 ist.Your .NET application requires a version of the .NET Framework earlier than 4.6.2. Wenn Sie eine .NET-Anwendung verpacken, wird empfohlen, dass Ihre Anwendung auf .NET Framework 4.6.2 oder höher ausgerichtet ist.If you are packaging a .NET application, we recommend that your application target .NET Framework 4.6.2 or later. Die Möglichkeit, verpackte Desktopanwendungen zu installieren und auszuführen, wurde erstmals in Windows 10, Version 1607 (auch als Anniversary Update bezeichnet), eingeführt, und diese Betriebssystemversion enthält standardmäßig das .NET Framework 4.6.2.The ability to install and run packaged desktop applications was first introduced in Windows 10, version 1607 (also called the Anniversary Update), and this OS version includes the .NET Framework 4.6.2 by default. Spätere Betriebssystemversionen enthalten höhere Versionen des .NET Frameworks.Later OS versions include later versions of the .NET Framework. Eine vollständige Liste, welche Versionen von .NET in höheren Versionen von Windows 10 enthalten sind, finden Sie in diesem Artikel.For a full list of what versions of .NET are included in later versions of Windows 10, see this article.

    Es wird erwartet, dass die Verwendung von Versionen des .NET-Frameworks vor 4.6.2 in verpackten Desktopanwendungen in den meisten Fällen funktioniert.Targeting versions of the .NET Framework earlier than 4.6.2 in packaged desktop applications is expected to work in most cases. Wenn Sie jedoch eine ältere Version als 4.6.2 ins Auge fassen, sollten Sie Ihre verpackte Desktopanwendung vollständig testen, bevor Sie sie an die Benutzer verteilen.However, if you target an earlier version than 4.6.2, you should fully test your packaged desktop application before distributing it to users.

    • 4.0 - 4.6.1: Anwendungen, die auf diese Versionen des .NET-Frameworks ausgerichtet sind, können voraussichtlich ab 4.6.2 oder höher ohne Probleme ausgeführt werden.4.0 - 4.6.1: Applications that target these versions of the .NET Framework are expected to run without issues on 4.6.2 or later. Daher sollten diese Anwendungen ohne Änderungen unter Windows 10, Version 1607 oder höher mit der Version des .NET-Frameworks, die im Betriebssystem enthalten ist, installiert und ausgeführt werden.Therefore, these applications should install and run without changes on Windows 10, version 1607 or later with the version of the .NET Framework that is included with the OS.

    • 2.0 und 3.5: In unseren Tests funktionieren verpackte Desktopanwendungen, die auf diese Versionen des .NET-Frameworks ausgerichtet sind, im Allgemeinen, können aber in einigen Szenarien Leistungsprobleme aufweisen.2.0 and 3.5: In our testing, packaged desktop applications that target these versions of the .NET Framework generally work but may exhibit performance issues in some scenarios. Damit diese verpackten Anwendungen installiert und ausgeführt werden können, muss auf dem Zielcomputer das Feature .NET Framework 3.5 installiert werden (dieses Feature umfasst auch .NET Framework 2.0 und 3.0).In order for these packaged applications to install and run, the .NET Framework 3.5 feature must be installed on the target machine (this feature also includes .NET Framework 2.0 and 3.0). Sie sollten diese Anwendungen auch nach dem Verpacken gründlich testen.You should also test these applications thoroughly after you package them.

  • Ihre Anwendung wird immer mit erhöhten Sicherheitsberechtigungen ausgeführt.Your application always runs with elevated security privileges. Ihre Anwendung muss als interaktiver Benutzer ausgeführt werden können.Your application needs to work while running as the interactive user. Benutzer, die Ihre Anwendung installieren, sind möglicherweise keine Systemadministratoren. Wenn für die Ausführung Ihrer Anwendung erhöhte Rechte erforderlich sind, wird die Anwendung für Standardbenutzer nicht ordnungsgemäß ausgeführt.Users who install your application may not be system administrators, so requiring your application to run elevated means that it won't run correctly for standard users. Wenn Sie vorhaben, Ihre Anwendung im Microsoft Store zu veröffentlichen, werden Anwendungen, die für einen Teil ihrer Funktionalität eine Erhöhung der Rechte erfordern, nicht in den Store aufgenommen.If you plan on publishing your app to the Microsoft Store, apps that require elevation for any part of their functionality won't be accepted into the Store.

  • Ihre Anwendung erfordert einen Kernelmodustreiber oder einen Windows-Dienst.Your application requires a kernel-mode driver or a Windows service. MSIX unterstützt keinen Kernelmodustreiber oder einen Windows-Dienst, der unter einem Systemkonto ausgeführt werden muss.MSIX does not support a kernel-mode driver or a Windows service that needs to run under a system account. Verwenden Sie anstelle eines Windows-Diensts eine Hintergrundaufgabe.Instead of a Windows service, use a background task.

  • Ihre App-Module werden im Prozess für Prozesse geladen, die nicht im Windows-App-Paket enthalten sind.Your app's modules are loaded in-process to processes that are not in your Windows app package. Dies ist nicht zulässig. Prozessinterne Erweiterungen, beispielsweise Shellerweiterungen, werden nicht unterstützt.This isn't permitted, which means that in-process extensions, like shell extensions, aren't supported. Wenn zwei Apps in einem Paket enthalten sind, können Sie jedoch die prozessübergreifende Kommunikation zwischen diesen verwenden.But if you have two apps in the same package, you can do inter-process communication between them.

  • Stellen Sie sicher, dass alle von der Anwendung installierten Erweiterungen dort installiert werden, wo die Anwendung installiert ist.Ensure that any extensions installed by the application will install where the application is installed. Windows ermöglicht es Benutzern und IT-Managern, den standardmäßigen Installationspfad für Pakete zu ändern.Windows allows users and IT managers to change the default install location for packages. Weitere Informationen finden Sie unter „Einstellungen -> System -> Speicher -> Weitere Speichereinstellungen -> Speicherort für neue Inhalte ändern -> Speicherort für neue Apps“.See "Settings->System->Storage->More Storage Settings-> Change where new content is saved to -> New Apps will save to". Wenn Sie eine Erweiterung mit Ihrer Anwendung installieren, stellen Sie sicher, dass die Erweiterung keine zusätzlichen Einschränkungen für den Installationsordner aufweist.If you are installing an extension with your application, make sure that the extension does not have additional installation folder restrictions. Einige Erweiterungen können z. B. die Installation ihrer Erweiterung auf Nicht-Systemdatenträgern deaktivieren.For example, some extensions may disable installing their extension to non-system drives. Dies führt zum Fehler 0x80073d01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY), wenn der Standardspeicherort geändert wurde.This will result in an error 0x80073D01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY) if the default location has been changed.

  • Ihre Anwendung verwendet eine benutzerdefinierte Anwendungsbenutzermodell-ID (Application User Model ID, AUMID) .Your application uses a custom Application User Model ID (AUMID). Wenn der Prozess SetCurrentProcessExplicitAppUserModelID zum Festlegen einer eigenen Anwendungsbenutzermodell-ID aufruft, kann er nur die von der Anwendungmodellumgebung/vom Windows-App-Paket generierte Anwendungsbenutzermodell-ID verwenden.If your process calls SetCurrentProcessExplicitAppUserModelID to set its own AUMID, then it may only use the AUMID generated for it by the application model environment/Windows app package. Sie können keine benutzerdefinierten Anwendungsbenutzermodell-IDs definieren.You can't define custom AUMIDs.

  • Ihre Anwendung ändert die HKLM-Registrierungsstruktur (HKEY_LOCAL_MACHINE) .Your application modifies the HKEY_LOCAL_MACHINE (HKLM) registry hive. Bei jedem Versuch Ihrer Anwendung, einen HKLM-Schlüssel zu erstellen oder einen zum Ändern zu öffnen, wird der Zugriff verweigert.Any attempt by your application to create an HKLM key, or to open one for modification, will result in an access-denied failure. Denken Sie daran, dass Ihre Anwendung über eine eigene private virtualisierte Ansicht der Registrierung verfügt. Damit kann das Konzept einer benutzer- und computerweiten Registrierungsstruktur (Zweck von HKLM) nicht angewendet werden.Remember that your application has its own private virtualized view of the registry, so the notion of a user- and machine-wide registry hive (which is what HKLM is) does not apply. Sie müssen stattdessen eine andere Möglichkeit finden, um das zu erreichen, wozu Sie HKLM verwendet haben, beispielsweise Schreiben in HKEY_CURRENT_USER (HKCU).You will need to find another way of achieving what you were using HKLM for, like writing to HKEY_CURRENT_USER (HKCU) instead.

  • Ihre Anwendung verwendet einen DDEEXEC-Registrierungsunterschlüssel zum Starten einer anderen App.Your application uses a ddeexec registry subkey as a means of launching another app. Verwenden Sie stattdessen einen der DelegateExecute-Verbhandler genau wie von den verschiedenen Activatable*-Erweiterungen in dem App-Paketmanifest konfiguriert.Instead, use one of the DelegateExecute verb handlers as configured by the various Activatable* extensions in your app package manifest.

  • Ihre Anwendung schreibt in den AppData-Ordner oder die Registrierung, um Daten für eine andere App freizugeben.Your application writes to the AppData folder or to the registry with the intention of sharing data with another app. Nach der Konvertierung wird AppData an den lokalen App-Datenspeicher weitergeleitet, der ein privater Speicher für jede App ist.After conversion, AppData is redirected to the local app data store, which is a private store for each app.

    Alle Einträge, die Ihre Anwendung in der Registrierungsstruktur HKEY_LOCAL_MACHINE schreibt werden in eine isolierte Binärdatei umgeleitet, und alle Einträge, die Ihre Anwendung in der Registrierungsstruktur HKEY_CURRENT_USER schreibt werden in einem privaten Speicherort pro Benutzer, pro App platziert.All entries that your application writes to the HKEY_LOCAL_MACHINE registry hive are redirected to an isolated binary file and any entries that your application writes to the HKEY_CURRENT_USER registry hive are placed into a private per-user, per-app location. Weitere Informationen zur Datei- und Registrierungsumleitung finden Sie unter Hintergrundinformationen zur Desktop-Brücke.For more details about file and registry redirection, see Behind the scenes of the Desktop Bridge.

    Verwenden Sie verschiedene Methoden für die prozessübergreifende Datenfreigabe.Use a different means of inter-process data sharing. Weitere Informationen finden Sie unter Speichern und Abrufen von Einstellungen und anderen App-Daten.For more info, see Store and retrieve settings and other app data.

  • Ihre Anwendung schreibt in das Installationsverzeichnis für die App.Your application writes to the install directory for your app. Ihre Anwendung schreibt z. B. in eine Protokolldatei, die sich in demselben Verzeichnis wie die EXE-Datei befindet.For example, your application writes to a log file that you put in the same directory as your exe. Dies wird nicht unterstützt. Sie müssen daher einen anderen Speicherort wählen, z. B. den lokalen App-Datenspeicher.This isn't supported, so you'll need to find another location, like the local app data store.

  • Ihre Anwendung verwendet das aktuelle Arbeitsverzeichnis.Your application uses the current working directory. Zur Laufzeit nutzt die verpackte Desktopanwendung nicht das gleiche Arbeitsverzeichnis, das Sie zuvor in Ihrer Desktop-LNK-Verknüpfung angegeben haben.At runtime, your packaged desktop application won't get the same working directory that you previously specified in your desktop .LNK shortcut. Sie müssen das aktuelle Arbeitsverzeichnis zur Laufzeit ändern, wenn das richtige Verzeichnis notwendig ist, damit Ihre Anwendung ordnungsgemäß funktioniert.You need to change your CWD at runtime if having the correct directory is important for your application to function correctly.

    Hinweis

    Wenn Ihre Anwendung in das Installationsverzeichnis schreiben oder das aktuelle Arbeitsverzeichnis verwenden muss, können Sie auch in Betracht ziehen, eine Laufzeitkorrektur mit dem Package Support Framework zu Ihrem Paket hinzuzufügen.If your app needs to write to the installation directory or use the current working directory, you can also consider adding a runtime fixup using the Package Support Framework to your package. Weitere Informationen finden Sie in diesem Artikel.For more details, see this article.

  • Ihre Anwendungsinstallation erfordert eine Benutzerinteraktion.Your application installation requires user interaction. Das Installationsprogramm der Anwendung muss automatisch ausgeführt werden können und muss alle erforderlichen Komponenten installieren, die nicht standardmäßig auf einem sauberen Betriebssystemimage aktiviert sind.Your application installer must be able to run silently, and it must install all of its prerequisites that aren't on by default on a clean OS image.

  • Ihre Anwendung benötigt UIAccess.Your application requires UIAccess. Wenn Ihre Anwendung UIAccess=true für das requestedExecutionLevel-Element im UAC-Manifest angibt, wird die Konvertierung in MSIX derzeit nicht unterstützt.If your application specifies UIAccess=true in the requestedExecutionLevel element of the UAC manifest, conversion to MSIX isn't supported currently. Weitere Informationen finden Sie unter Sicherheit bei der Benutzeroberflächenautomatisierung – Übersicht.For more info, see UI Automation Security Overview.

  • Ihre Anwendung macht COM-Objekte verfügbar.Your application exposes COM objects. Prozesse und Erweiterungen innerhalb des Pakets können OLE & COM-Server sowohl im Prozess und Out-of-Process (OOP) registrieren und verwenden.Processes and extensions from within the package can register and use COM & OLE servers, both in-process and out-of-process (OOP). Das Creators Update stellt verpackte COM-Unterstützung bereit, die die Möglichkeit bietet, OLE & OOP-COM-Server zu registrieren, die außerhalb des Pakets sichtbar sind.The Creators Update adds Packaged COM support which provides the ability to register OOP COM & OLE servers that are now visible outside the package. Weitere Informationen finden Sie unter COM-Server und OLE-Dokument-Support für Desktop-Brücke.See COM Server and OLE Document support for Desktop Bridge.

    Die verpackte COM-Unterstützung funktioniert mit den vorhandenen COM-APIs. Sie funktioniert aber nicht bei Anwendungserweiterungen, die vom direkten Lesen der Registrierung abhängig sind, da der Speicherort für die verpackte COM privat ist.Packaged COM support works with existing COM APIs, but will not work for application extensions that rely upon directly reading the registry, as the location for Packaged COM is in a private location.

  • Ihre Anwendung macht GAC-Assemblys zur Verwendung durch andere Prozesse verfügbar.Your application exposes GAC assemblies for use by other processes. Ihre Anwendung kann GAC-Assemblys nicht zur Verwendung durch Prozesse verfügbar machen, die von ausführbaren Dateien stammen, die sich außerhalb Ihres Windows-App-Pakets befinden.Your application cannot expose GAC assemblies for use by processes originating from executables external to your Windows app package. Prozesse aus dem Paket können GAC-Assemblys wie gewohnt registrieren und verwenden, aber sie sind nicht extern sichtbar.Processes from within the package can register and use GAC assemblies as normal, but they will not be visible externally. Dies bedeutet, dass Interoperabilitätsszenarien wie OLE nicht funktionieren, wenn sie von externen Prozessen aufgerufen werden.This means interop scenarios like OLE will not function if invoked by external processes.

  • Ihre Anwendung verknüpft C-Laufzeitbibliotheken (CRT) auf eine nicht unterstützte Weise.Your application is linking C runtime libraries (CRT) in an unsupported manner. Die Microsoft C/C++-Laufzeitbibliothek enthält Routinen für die Programmierung für das Microsoft Windows-Betriebssystem.The Microsoft C/C++ runtime library provides routines for programming for the Microsoft Windows operating system. Diese Routinen automatisieren viele allgemeine Programmieraufgaben, die von den Programmiersprachen C# und C++ nicht bereitgestellt werden.These routines automate many common programming tasks that are not provided by the C and C++ languages. Wenn Ihre Anwendung eine C/C++-Laufzeitbibliothek verwendet, müssen Sie sicherstellen, dass sie auf eine unterstützte Weise verknüpft ist.If your application utilizes C/C++ runtime library, you need to ensure it is linked in a supported manner.

    Visual Studio 2017 unterstützt die statische und dynamische Verknüpfung, damit Ihr Code gängige DLL-Dateien verwenden kann, und statische Verknüpfung, um die Bibliothek direkt in Ihren Code, mit der aktuellen Version der CRT, zu verknüpfen.Visual Studio 2017 supports both static and dynamic linking, to let your code use common DLL files, or static linking, to link the library directly into your code, to the current version of the CRT. Wir empfehlen, dass Ihre Anwendung möglichst die dynamische Verknüpfung mit VS 2017 verwendet.If possible, we recommend your application use dynamic linking with VS 2017.

    Unterstützung in früheren Versionen von Visual Studio variiert.Support in previous versions of Visual Studio varies. Weitere Informationen finden Sie in der folgenden Tabelle:See the following table for details:

    Version von Visual StudioVisual Studio versionDynamische VerknüpfungDynamic linkingStatische VerknüpfungStatic linking
    2005 (VC 8)2005 (VC 8)Nicht unterstützt.Not supportedUnterstütztSupported
    2008 (VC 9)2008 (VC 9)Nicht unterstützt.Not supportedUnterstütztSupported
    2010 (VC 10)2010 (VC 10)UnterstütztSupportedUnterstütztSupported
    2012 (VC 11)2012 (VC 11)UnterstütztSupportedNicht unterstützt.Not supported
    2013 (VC 12)2013 (VC 12)UnterstütztSupportedNicht unterstützt.Not supported
    2015 und 2017 (VC 14)2015 and 2017 (VC 14)UnterstütztSupportedUnterstütztSupported

    Hinweis: In allen Fällen müssen Sie eine Verknüpfung zur neuesten öffentlich verfügbaren CRT herstellen.Note: In all cases, you must link to the latest publicly available CRT.

  • Ihre Anwendung installiert und lädt Assemblys aus dem Windows-Seite-an-Seite-Ordner.Your application installs and loads assemblies from the Windows side-by-side folder. Beispielsweise verwendet Ihre Anwendung C-Laufzeitbibliotheken VC8 oder VC9 und verknüpft diese dynamisch aus dem Windows-Seite-an-Seite-Ordner, was bedeutet, dass Ihr Code die gemeinsamen DLL-Dateien aus einem freigegebenen Ordner verwendet.For example, your application uses C runtime libraries VC8 or VC9 and is dynamically linking them from Windows side-by-side folder, meaning your code is using the common DLL files from a shared folder. Dies wird nicht unterstützt.This is not supported. Sie müssen diese statisch verknüpfen, indem sie eine Verknüpfung mit den verteilbaren Bibliotheksdateien direkt in den Code erstellen.You will need to statically link them by linking to the redistributable library files directly into your code.

  • Ihre Anwendung verwendet eine Abhängigkeit im Ordner „System32/SysWOW64“ .Your application uses a dependency in the System32/SysWOW64 folder. Damit diese DLL-Dateien funktionieren, müssen Sie sie im virtuellen Dateisystem Ihres Windows-App-Pakets einschließen.To get these DLLs to work, you must include them in the virtual file system portion of your Windows app package. Dadurch wird sichergestellt, dass sich die Anwendung verhält, als ob die DLL-Dateien im Ordner System32/SysWOW64 installiert wären.This ensures that the application behaves as if the DLLs were installed in the System32/SysWOW64 folder. Erstellen Sie im Stammordner des Pakets einen Ordner mit dem Namen VFS.In the root of the package, create a folder called VFS. Erstellen Sie innerhalb dieses Ordners die Ordner SystemX64 und SystemX86.Inside that folder create a SystemX64 and SystemX86 folder. Platzieren Sie die 32-Bit-Version Ihrer DLL-Datei im Ordner SystemX86 und die 64-Bit-Version im Ordner SystemX64.Then, place the 32-bit version of your DLL in the SystemX86 folder, and place the 64-bit version in the SystemX64 folder.

  • Ihre App verwendet ein VCLibs-Frameworkpaket.Your app uses a VCLibs framework package. Wenn Sie eine C++ Win32-Anwendung konvertieren, müssen Sie die Bereitstellung der Visual C++ Runtime übernehmen.If you are converting a C++ Win32 app, you must handle the deployment of the Visual C++ Runtime. Visual Studio 2019 und das Windows SDK enthalten die neuesten Frameworkpakete für Version 11.0, 12.0 und 14.0 der Visual C++ Runtime in den folgenden Ordnern:Visual Studio 2019 and the Windows SDK include the latest framework packages for version 11.0, 12.0 and 14.0 of the Visual C++ Runtime in the following folders:

    • VC 14.0-Frameworkpakete: C:\Programme (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0VC 14.0 framework packages: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0

    • VC 12.0-Frameworkpakete: C:\Programme (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0VC 12.0 framework packages: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0

    • VC 11.0-Frameworkpakete: C:\Programme (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0VC 11.0 framework packages: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0

    Um eines dieser Pakete zu verwenden, müssen Sie auf das Paket als Abhängigkeit in Ihrem Paketmanifest verweisen.To use one of these packages, you must reference the package as a dependency in your package manifest. Wenn Kunden die Einzelhandelsversion Ihrer Anwendung aus dem Microsoft Store installieren, wird das Paket zusammen mit Ihrer Anwendung aus dem Store installiert.When customers install the retail version of your app from the Microsoft Store, the package will be installed from the Store along with your app. Die Abhängigkeiten werden nicht installiert, wenn Sie Ihre Anwendung querladen.The dependencies will not get installed if you side load your app. Um die Abhängigkeiten manuell zu installieren, müssen Sie das entsprechende Frameworkpaket mit dem entsprechenden APPX-Paket für x86, x64 oder ARM installieren, das sich in den oben aufgeführten Installationsordnern befindet.To install the dependencies manually, you must install the appropriate framework package using the appropriate .appx package for x86, x64, or ARM located in the installation folders listed above.

    So verweisen Sie auf ein Visual C++ Runtime-Frameworkpaket in Ihrer AnwendungTo reference a Visual C++ Runtime framework package in your app:

    1. Wechseln Sie zum oben aufgeführten Installationsordner des Frameworkpakets für die von Ihrer Anwendung verwendete Version der Visual C++ Runtime.Go to the framework package install folder listed above for the version of the Visual C++ Runtime used by your app.

    2. Öffnen Sie die Datei „SDKManifest.xml“ in diesem Ordner, suchen Sie das Attribut FrameworkIdentity-Debug oder FrameworkIdentity-Retail (je nachdem, ob Sie die Debug- oder die Einzelhandelsversion der Runtime verwenden), und kopieren Sie die Werte Name und MinVersion aus diesem Attribut.Open the SDKManifest.xml file in that folder, locate the FrameworkIdentity-Debug or FrameworkIdentity-Retail attribute (depending on whether you're using the debug or retail version of the runtime), and copy the Name and MinVersion values from that attribute. Hier ist z. B. das Attribut FrameworkIdentity-Retail für das aktuelle VC 14.0-Frameworkpaket.For example, here's the FrameworkIdentity-Retail attribute for the current VC 14.0 framework package.

      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'"
      
    3. Fügen Sie im Paketmanifest für Ihre Anwendung das folgende <PackageDependency>-Element unter dem <Dependencies>-Knoten hinzu.In the package manifest for your app, add the following <PackageDependency> element under the <Dependencies> node. Stellen Sie sicher, dass Sie die Werte Name und MinVersion durch die Werte ersetzen, die Sie im vorherigen Schritt kopiert haben.Make sure you replace the Name and MinVersion values with the values you copied in the previous step. Das folgende Beispiel gibt eine Abhängigkeit für die aktuelle Version des VC 14.0-Frameworkpakets an.The following example specifies a dependency for the current version of the VC 14.0 framework package.

      <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" />
      
  • Ihre Anwendung enthält eine angepasste Sprungliste.Your application contains a custom jump list. Bei der Verwendung von Sprunglisten müssen mehrere Probleme und Vorsichtsmaßnahme berücksichtigt werden.There are several issues and caveats to be aware of when using jump lists.

    • Die Architektur der App passt nicht zum Betriebssystem.Your app's architecture does not match the OS. Wenn die Anwendungs- und die Betriebssystemarchitektur nicht übereinstimmen (z. B. eine x86-Anwendung unter einem x64-Windows) funktionieren Sprunglisten derzeit nicht ordnungsgemäß.Jump lists currently do not function correctly if the application and OS architectures do not match (e.g., an x86 application running on x64 Windows). Zurzeit gibt es keine Umgehung. Sie können die Anwendung nur mit einer übereinstimmenden Architektur neu kompilieren.At this time, there is no workaround other than to recompile your application to the matching architecture.

    • Ihre Anwendung erstellt Sprunglisteneinträge und ruft ICustomDestinationList::SetAppID oder SetCurrentProcessExplicitAppUserModelID auf.Your application creates jump list entries and calls ICustomDestinationList::SetAppID or SetCurrentProcessExplicitAppUserModelID. Legen Sie „AppID“ nicht programmgesteuert im Code fest.Do not programmatically set your AppID in code. Andernfalls werden die Sprunglisteneinträge nicht angezeigt.Doing so will cause your jump list entries to not appear. Wenn Ihre Anwendung eine benutzerdefinierte ID benötigt, geben Sie sie mithilfe der Manifestdatei an.If your application needs a custom Id, specify it using the manifest file. Anweisungen finden Sie unter Manuelles Verpacken einer Desktopanwendung.Refer to Package a desktop application manually for instructions. Die App-ID für die Anwendung ist im Abschnitt YOUR_PRAID_HERE angegeben.The AppID for your application is specified in the YOUR_PRAID_HERE section.

    • Ihre Anwendung fügt einen Sprunglistenshell-Link hinzu, der auf eine ausführbare Datei im Paket verweist.Your application adds a jump list shell link that references an executable in your package. Sie können ausführbare Dateien in Ihrem Paket nicht direkt aus einer Sprungliste starten (mit Ausnahme des absoluten Pfads einer eigenen EXE-Datei einer App).You cannot directly launch executables in your package from a jump list (with the exception of the absolute path of an app’s own .exe). Registrieren Sie stattdessen einen App-Ausführungsalias (mit dem die verpackte Desktopanwendung über ein Schlüsselwort gestartet werden kann, als befände sie sich im PFAD), und legen Sie den Linkzielpfad stattdessen auf den Alias fest.Instead, register an app execution alias (which allows your packaged desktop application to start via a keyword as though it were on the PATH) and set the link target path to the alias instead. Weitere Informationen zur Verwendung der appExecutionAlias-Erweiterung finden Sie unter Integrieren Ihrer Desktopanwendung in Windows 10.For details on how to use the appExecutionAlias extension, see Integrate your desktop application with Windows 10. Hinweis: Wenn Ressourcen des Links in der Sprungliste der ursprünglichen EXE-Datei entsprechen müssen, müssen Sie Ressourcen wie etwa das Symbol mithilfe von SetIconLocation und den Anzeigenamen mit „PKEY_Title“ festlegen (wie bei anderen benutzerdefinierten Einträgen).Note that if you require assets of the link in jump list to match the original .exe, you will need to set assets such as the icon using SetIconLocation and the display name with PKEY_Title like you would for other custom entries.

    • Ihre Anwendung fügt Sprunglisteneinträge hinzu, die auf Ressourcen im Paket Ihrer App nach absoluten Pfaden verweisen.Your application adds a jump list entries that references assets in the app's package by absolute paths. Der Installationspfad der Anwendung ändert sich möglicherweise, wenn Pakete aktualisiert werden. Dadurch ändert sich auch der Ort der Ressourcen (z. B. Symbole, Dokumente, ausführbare Dateien usw.).The installation path of an application may change when its packages are updated, changing the location of assets (such as icons, documents, executable, and so on). Falls Sprunglisteneinträge auf derartige Ressourcen nach absoluten Pfaden verweisen, muss die Anwendung ihre Sprungliste in regelmäßigen Abständen (z. B. beim Anwendungsstart) aktualisieren, um eine ordnungsgemäße Auflösung der Pfade sicherzustellen.If jump list entries reference such assets by absolute paths, then the application should refresh its jump list periodically (such as on application launch) to ensure paths resolve correctly. Sie können stattdessen auch die UWP-Windows.UI.StartScreen.JumpList-APIs verwenden. Diese APIs ermöglichen den Verweis auf Zeichenfolgen- und Bildressourcen mithilfe des relativen ms-resource-URI-Paketschemas (das zudem Sprache, DPI und hohen Kontrast berücksichtigt).Alternatively, use the UWP Windows.UI.StartScreen.JumpList APIs instead, which allow you to reference string and image assets using the package-relative ms-resource URI scheme (which is also language, DPI, and high contrast aware).

  • Ihre Anwendung startet ein Hilfsprogramm zum Ausführen von Aufgaben.Your application starts a utility to perform tasks. Vermeiden Sie das Starten von Befehlshilfsprogrammen wie PowerShell und Cmd.exe.Avoid starting command utilities such as PowerShell and Cmd.exe. Wenn Benutzer Ihre Anwendung auf einem System mit Windows 10 S installieren, wird Ihre Anwendung nicht in der Lage sein, sie alle zu starten.In fact, if users install your application onto a system that runs the Windows 10 S, then your application won’t be able to start them at all. Die kann die Übermittlung Ihre Anwendung an den Microsoft Store blockieren, da alle Übermittlung an den Microsoft Store mit Windows 10 S kompatibel sein müssen.This could block your application from submission to the Microsoft Store because all apps submitted to the Microsoft Store must be compatible with Windows 10 S.

    Das Starten eines Hilfsprogramms kann oft eine bequeme Methode für das Abrufen von Informationen aus dem Betriebssystem, Zugreifen auf die Registrierung oder das Zugreifen auf Systemfunktionen bereitstellen.Starting a utility can often provide a convenient way to obtain information from the operating system, access the registry, or access system capabilities. Sie können jedoch stattdessen UWP-APIs verwenden, um diese Aufgaben auszuführen.However, you can use UWP APIs to accomplish these sorts of tasks instead. Diese APIs sind leistungsstärker, da sie für die Ausführung keine separate ausführliche Datei benötigen. Darüber hinaus hindern sie eine Ausführung der Anwendung außerhalb des Pakets.Those APIs are more performant because they don’t need a separate executable to run, but more importantly, they keep the application from reaching outside of the package. Das Design der App bleibt im Einklang mit der Netzwerkisolation, Vertrauensstellung und Sicherheit, die zu einer von Ihnen verpackten Anwendung gehören, und Ihre Anwendung verhält sich erwartungsgemäß auf Systemen mit Windows 10 S.The app’s design stays consistent with the isolation, trust, and security that comes with an application that you've packaged, and your application will behave as expected on systems running Windows 10 S.

  • Ihre Anwendung hostet Add-Ins, -Plug-Ins oder Erweiterungen.Your application hosts add-ins, plug-ins, or extensions. In vielen Fällen werden Erweiterungen im COM-Stil wahrscheinlich weiterhin funktionieren, sofern die Erweiterung nicht verpackt wurde und sie als vertrauenswürdig installiert wurde.In many cases, COM-style extensions will likely continue to work as long as the extension has not been packaged, and it installs as full trust. Grund dafür ist, dass die Installationsprogramme ihre vertrauenswürdigen Funktionen verwenden können, um die Registrierung zu bearbeiten und Erweiterungsdateien an beliebigen Stellen zu platzieren, damit die Hostanwendung sie findet.That's because those installers can use their full-trust capabilities to modify the registry and place extension files wherever your host application expects to find them.

    Wenn diese Erweiterungen jedoch verpackt und als Windows-App-Paket installiert werden, werden sie nicht funktionieren, da jedes Paket (die Hostanwendung und die Erweiterung) voneinander isoliert sein wird.However, if those extensions are packaged, and then installed as a Windows app package, they won't work because each package (the host application and the extension) will be isolated from one another. Weitere Informationen zur Isolierung von Anwendungen vom System finden Sie unter Hinter den Kulissen der Desktop-Brücke.To read more about how applications are isolated from the system, see Behind the scenes of the Desktop Bridge.

    Alle Anwendungen und Erweiterungen, die Benutzer auf einem System mit Windows 10 S installieren, müssen als Windows-App-Pakete installiert werden.All applications and extensions that users install to a system running Windows 10 S must be installed as Windows App packages. Wenn Sie also beabsichtigen, Ihre Erweiterungen zu verpacken oder Sie Ihren Mitwirkenden eine Verpackung empfehlen möchten, sollten Sie sich überlegen, wie Sie die Kommunikation zwischen dem Hostanwendungspaket und der Erweiterungspakete vereinfachen können.So if you intend to package your extensions, or you plan to encourage your contributors to package them, consider how you might facilitate communication between the host application package and any extension packages. Eine Möglichkeit wäre die Verwendung eines App-Diensts.One way that you might be able to do this is by using an app service.

  • Ihre Anwendung generiert Code.Your application generates code. Ihre Anwendung kann Code generieren, den sie im Arbeitsspeicher verwendet. Vermeiden Sie es jedoch, Code auf einen Datenträger zu schreiben, da der Windows-App-Zertifizierungsprozess diesen Code vor der App-Übermittlung nicht überprüfen kann.Your application can generate code that it consumes in memory, but avoid writing generated code to disk because the Windows App Certification process can't validate that code prior to app submission. Darüber hinaus werden Apps, die Code auf den Datenträger Schreiben, nicht ordnungsgemäß auf Systemen mit Windows 10 S ausgeführt. Dadurch kann die Übermittlung Ihrer Anwendung an den Microsoft Store blockiert werden, da alle Übermittlungen an den Microsoft Store mit Windows 10 S kompatibel sein müssen.Also, apps that write code to disk won’t run properly on systems running Windows 10 S. This could block your application from submission to the Microsoft Store because all apps submitted to the Microsoft Store must be compatible with Windows 10 S.

Wichtig

Nachdem Sie das Windows-App-Paket erstellt haben, testen Sie Ihre Anwendung, um sicherzustellen, dass sie auf Systemen funktioniert, auf denen Windows 10 S ausgeführt wird. Alle an den Microsoft Store übermittelten Apps müssen mit Windows 10 S-Apps kompatibel sein. Apps, die nicht kompatibel sind, werden nicht im Store akzeptiert.After you've created your Windows app package, please test your application to ensure that it works correctly on systems that run Windows 10 S. All apps submitted to the Microsoft Store must be compatible with Windows 10 S. Apps that aren't compatible won't be accepted in the store. Weitere Informationen finden Sie unter Testen Ihrer Windows-App für Windows 10 S.See Test your Windows app for Windows 10 S.