Prepararsi per la creazione del pacchetto di un'applicazione desktopPrepare to package a desktop application

In questo articolo sono elencate le informazioni che devi conoscere prima di creare un pacchetto della tua applicazione desktop.This article lists the things you need to know before you package your desktop application. Per preparare la tua applicazione per la creazione del pacchetto potrebbero non essere necessarie molte operazioni, ma se una qualsiasi delle considerazioni seguenti è applicabile alla tua applicazione, segui le indicazioni suggerite prima di creare il pacchetto.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.

  • L'applicazione .NET richiede una versione di .NET Framework precedente la 4.6.2.Your .NET application requires a version of the .NET Framework earlier than 4.6.2. Se stai creando un pacchetto di un'applicazione .NET, ti consigliamo di scegliere .NET Framework 4.6.2 o versione successiva come destinazione dell'applicazione.If you are packaging a .NET application, we recommend that your application target .NET Framework 4.6.2 or later. La possibilità di installare ed eseguire applicazioni desktop in pacchetto è stata introdotta per la prima volta in Windows 10, versione 1607 (denominata anche Aggiornamento dell'anniversario) e questa versione del sistema operativo include .NET Framework 4.6.2 per impostazione predefinita.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. Le versioni successive del sistema operativo includono versioni più recenti di .NET Framework.Later OS versions include later versions of the .NET Framework. Per un elenco completo delle versioni di .NET incluse nelle versioni successive di Windows 10, vedi questo articolo.For a full list of what versions of .NET are included in later versions of Windows 10, see this article.

    L'uso di versioni di .NET Framework precedenti la 4.6.2 come destinazione delle applicazioni desktop in pacchetto dovrebbe funzionare nella maggior parte dei casi.Targeting versions of the .NET Framework earlier than 4.6.2 in packaged desktop applications is expected to work in most cases. Se tuttavia scegli come destinazione una versione precedente la 4.6.2, dovresti eseguire un test completo dell'applicazione desktop in pacchetto prima di distribuirla agli utenti.However, if you target an earlier version than 4.6.2, you should fully test your packaged desktop application before distributing it to users.

    • Da 4.0 a 4.6.1: le applicazioni destinate a queste versioni di .NET Framework dovrebbero essere eseguite senza problemi nella versione 4.6.2 o successive.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. Dovrebbe quindi essere possibile installare ed eseguire queste applicazioni senza modifiche in Windows 10, versione 1607 o successive, con la versione di .NET Framework inclusa nel sistema operativo.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 e 3.5: in base ai nostri test, le applicazioni desktop in pacchetto destinate a queste versioni di .NET Framework normalmente funzionano ma possono presentare problemi di prestazioni in alcuni scenari.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. Per l'installazione e l'esecuzione di queste applicazioni in pacchetto, è necessario che nel computer di destinazione sia installata la funzionalità .NET Framework 3.5, che include anche .NET Framework 2.0 e 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). Ti consigliamo inoltre di testare accuratamente queste applicazioni dopo averne creato il pacchetto.You should also test these applications thoroughly after you package them.

  • L'applicazione viene sempre eseguita con privilegi di sicurezza elevati.Your application always runs with elevated security privileges. L'applicazione deve funzionare se eseguita con i privilegi di utente interattivo.Your application needs to work while running as the interactive user. Gli utenti che installano l'applicazione potrebbero non essere amministratori di sistema, quindi il requisito di esecuzione con privilegi elevati implica che l'applicazione non funzionerà correttamente per gli utenti standard.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. Se prevedi di pubblicare la tua app in Microsoft Store, tieni presente che le app che richiedono l'elevazione dei privilegi per una qualsiasi funzionalità non vengono accettate nello Store.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.

  • L'applicazione richiede un driver in modalità kernel o un servizio di Windows.Your application requires a kernel-mode driver or a Windows service. MSIX non supporta un driver in modalità kernel o un servizio di Windows che deve essere eseguito con un account di sistema.MSIX does not support a kernel-mode driver or a Windows service that needs to run under a system account. Invece di un servizio di Windows, usa un'attività in background.Instead of a Windows service, use a background task.

  • I moduli della tua app vengono caricati in-process in processi che non sono inclusi nel tuo pacchetto dell'app di Windows.Your app's modules are loaded in-process to processes that are not in your Windows app package. Questa situazione non è consentita e ciò significa che le estensioni in-process, come le estensioni della shell, non sono supportate.This isn't permitted, which means that in-process extensions, like shell extensions, aren't supported. Se però hai due app nello stesso pacchetto, puoi usare le comunicazioni tra processi tra di esse.But if you have two apps in the same package, you can do inter-process communication between them.

  • Verifica che le estensioni installate dall'applicazione vengano inserite nello stesso percorso di installazione dell'applicazione.Ensure that any extensions installed by the application will install where the application is installed. Windows consente agli utenti e ai responsabili IT di modificare il percorso di installazione predefinito per i pacchetti.Windows allows users and IT managers to change the default install location for packages. Vedi "Impostazioni->Sistema->Archiviazione->Altre impostazioni di memoria->Modifica il percorso di salvataggio dei nuovi contenuti->Le nuove app verranno salvate in".See "Settings->System->Storage->More Storage Settings-> Change where new content is saved to -> New Apps will save to". Se stai installando un'estensione con l'applicazione, verifica che l'estensione non preveda restrizioni aggiuntive per la cartella di installazione.If you are installing an extension with your application, make sure that the extension does not have additional installation folder restrictions. Per alcune estensioni, ad esempio, può essere disabilitata l'installazione nelle unità non di sistema.For example, some extensions may disable installing their extension to non-system drives. Se il percorso predefinito è stato modificato, verrà generato un errore 0x80073D01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY).This will result in an error 0x80073D01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY) if the default location has been changed.

  • L'applicazione usa un ID modello utente applicazione (AUMID) personalizzato.Your application uses a custom Application User Model ID (AUMID). Se il processo chiama SetCurrentProcessExplicitAppUserModelID per impostare il proprio AUMID, può usare solo l'AUMID generato per il processo dall'ambiente del modello di applicazione o dal pacchetto dell'app di Windows.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. Non puoi definire AUMID personalizzati.You can't define custom AUMIDs.

  • L'applicazione modifica l'hive del Registro di sistema HKEY_LOCAL_MACHINE (HKLM) .Your application modifies the HKEY_LOCAL_MACHINE (HKLM) registry hive. Qualsiasi tentativo eseguito dalla tua applicazione per creare una chiave HKLM o aprirne una per la modifica avrà come risultato un errore di accesso negato.Any attempt by your application to create an HKLM key, or to open one for modification, will result in an access-denied failure. Ricorda che l'applicazione usa una specifica visualizzazione virtualizzata privata del Registro di sistema, quindi il concetto di hive del Registro di sistema a livello di utente e di computer (come è il caso di HKLM) non è applicabile.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. Dovrai trovare un altro modo per ottenere quello per cui usavi HKLM, ad esempio la scrittura 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.

  • L'applicazione usa una sottochiave del Registro di sistema ddeexec per avviare un'altra app.Your application uses a ddeexec registry subkey as a means of launching another app. Usa invece uno dei gestori di verbo DelegateExecute nella configurazione implementata dalle varie estensioni Activatable* nel manifesto del pacchetto della tua app.Instead, use one of the DelegateExecute verb handlers as configured by the various Activatable* extensions in your app package manifest.

  • L'applicazione scrive nella cartella AppData o nel Registro di sistema con l'intenzione di condividere dati con un'altra app.Your application writes to the AppData folder or to the registry with the intention of sharing data with another app. Dopo la conversione, la cartella AppData viene reindirizzata all'archivio dati locali dell'app, che consiste in un archivio privato per ogni app.After conversion, AppData is redirected to the local app data store, which is a private store for each app.

    Tutte le voci che l'applicazione scrive nell'hive del Registro di sistema HKEY_LOCAL_MACHINE vengono reindirizzate a un file binario isolato e le eventuali voci che l'applicazione scrive nell'hive del Registro di sistema HKEY_CURRENT_USER vengono inserite in un percorso privato, per singolo utente e singola app.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. Per altre informazioni sul reindirizzamento dei file e del Registro di sistema, vedi Informazioni sul funzionamento di Desktop Bridge.For more details about file and registry redirection, see Behind the scenes of the Desktop Bridge.

    Usa altri mezzi per la condivisione dei dati tra processi.Use a different means of inter-process data sharing. Per altre info, vedi Archiviazione e recupero di impostazioni e altri dati dell'app.For more info, see Store and retrieve settings and other app data.

  • L'applicazione scrive nella relativa directory di installazione.Your application writes to the install directory for your app. Ad esempio, l'applicazione scrive in un file di log che inserisci nella stessa directory del file con estensione exe.For example, your application writes to a log file that you put in the same directory as your exe. Questa situazione non è supportata, quindi dovrai trovare un'altra posizione, come l'archivio dati locale dell'app.This isn't supported, so you'll need to find another location, like the local app data store.

  • L'applicazione usa la directory di lavoro corrente.Your application uses the current working directory. In fase di esecuzione, la tua applicazione desktop in pacchetto non avrà a disposizione la stessa directory di lavoro specificata in precedenza nel collegamento LNK del desktop.At runtime, your packaged desktop application won't get the same working directory that you previously specified in your desktop .LNK shortcut. Devi modificare la directory di lavoro corrente in fase di esecuzione se la disponibilità della directory corretta è importante per il corretto funzionamento della tua applicazione.You need to change your CWD at runtime if having the correct directory is important for your application to function correctly.

    Nota

    Se l'applicazione deve scrivere nella directory di installazione o usare la directory di lavoro corrente, puoi anche valutare l'opportunità di aggiungere al pacchetto una correzione del runtime usando il Package Support Framework.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. Per altre informazioni, vedi questo articolo.For more details, see this article.

  • L'installazione dell'applicazione richiede l'interazione dell'utente.Your application installation requires user interaction. Il programma di installazione della tua applicazione deve poter essere eseguito in modo invisibile all'utente e provvedere all'installazione di tutti i prerequisiti non disponibili per impostazione predefinita in un'immagine pulita del sistema operativo.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.

  • L'applicazione richiede UIAccess.Your application requires UIAccess. Se la tua applicazione specifica UIAccess=true nell'elemento requestedExecutionLevel del manifesto di Controllo dell'account utente, la conversione in formato MSIX non è attualmente supportata.If your application specifies UIAccess=true in the requestedExecutionLevel element of the UAC manifest, conversion to MSIX isn't supported currently. Per altre info, vedi Panoramica della sicurezza di Automazione interfaccia utente.For more info, see UI Automation Security Overview.

  • L'applicazione espone oggetti COM.Your application exposes COM objects. I processi e le estensioni all'interno del pacchetto possono registrare e usare i server COM e OLE, sia in-process sia out-of-process (OOP).Processes and extensions from within the package can register and use COM & OLE servers, both in-process and out-of-process (OOP). Creators Update aggiunge il supporto COM in pacchetto che offre la possibilità di registrare i server OOP COM e OLE che sono ora visibili all'esterno del pacchetto.The Creators Update adds Packaged COM support which provides the ability to register OOP COM & OLE servers that are now visible outside the package. Vedi la pagina relativa al supporto del server COM e del documento OLE per Desktop Bridge.See COM Server and OLE Document support for Desktop Bridge.

    Il supporto COM in pacchetto funziona con le API COM esistenti, ma non funzionerà per le estensioni dell'applicazione che si basano direttamente sulla lettura del Registro di sistema, poiché la posizione per il modello COM in pacchetto è privata.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.

  • L'applicazione espone assembly GAC per l'uso in altri processi.Your application exposes GAC assemblies for use by other processes. La tua applicazione non può esporre assembly GAC per l'uso in processi originati da file eseguibili esterni al tuo pacchetto dell'app di Windows.Your application cannot expose GAC assemblies for use by processes originating from executables external to your Windows app package. I processi interni al pacchetto possono registrare e usare assembly GAC come di consueto, ma questi non saranno visibili esternamente.Processes from within the package can register and use GAC assemblies as normal, but they will not be visible externally. Questo significa che gli scenari di interoperabilità come OLE non funzioneranno se richiamati da processi esterni.This means interop scenarios like OLE will not function if invoked by external processes.

  • L'applicazione si collega a librerie di runtime C (CRT) in modo non supportato.Your application is linking C runtime libraries (CRT) in an unsupported manner. La libreria di runtime C/C++ di Microsoft fornisce routine per la programmazione per il sistema operativo Microsoft Windows.The Microsoft C/C++ runtime library provides routines for programming for the Microsoft Windows operating system. Queste routine automatizzano molte attività di programmazione comuni non fornite dai linguaggi C e C++.These routines automate many common programming tasks that are not provided by the C and C++ languages. Se la tua applicazione usa la libreria di runtime C/C++, devi assicurarti che sia collegata in modo supportato.If your application utilizes C/C++ runtime library, you need to ensure it is linked in a supported manner.

    Visual Studio 2017 supporta sia il collegamento dinamico, per consentire al codice di usare file DLL comuni, sia il collegamento statico, per collegare la libreria direttamente nel tuo codice, alla versione corrente di CRT.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. Se possibile, ti consigliamo di usare per l'applicazione il collegamento dinamico con Visual Studio 2017.If possible, we recommend your application use dynamic linking with VS 2017.

    Il supporto nelle versioni precedenti di Visual Studio è variabile.Support in previous versions of Visual Studio varies. Per altri dettagli, vedi la tabella seguente:See the following table for details:

    Versione di Visual StudioVisual Studio versionCollegamento dinamicoDynamic linkingCollegamento staticoStatic linking
    2005 (VC 8)2005 (VC 8)Non supportatoNot supportedFunzionalità supportataSupported
    2008 (VC 9)2008 (VC 9)Non supportatoNot supportedFunzionalità supportataSupported
    2010 (VC 10)2010 (VC 10)Funzionalità supportataSupportedFunzionalità supportataSupported
    2012 (VC 11)2012 (VC 11)Funzionalità supportataSupportedNon supportatoNot supported
    2013 (VC 12)2013 (VC 12)Funzionalità supportataSupportedNon supportatoNot supported
    2015 e 2017 (VC 14)2015 and 2017 (VC 14)Funzionalità supportataSupportedFunzionalità supportataSupported

    Nota: in tutti i casi, devi impostare il collegamento alla versione di CRT più recente disponibile pubblicamente.Note: In all cases, you must link to the latest publicly available CRT.

  • L'applicazione installa e carica assembly dalla cartella affiancata di Windows.Your application installs and loads assemblies from the Windows side-by-side folder. Ad esempio, la tua applicazione usa librerie di runtime C VC8 o VC9 con collegamento dinamico dalla cartella affiancata di Windows e questo significa che il codice usa i file DLL comuni da una cartella condivisa.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. Questo non è supportato.This is not supported. Dovrai usare un link statico ai file delle librerie ridistribuibili direttamente nel codice.You will need to statically link them by linking to the redistributable library files directly into your code.

  • L'applicazione usa una dipendenza nella cartella System32/SysWOW64.Your application uses a dependency in the System32/SysWOW64 folder. Per fare in modo che le DLL funzionino, devi includerle nella parte del file system virtuale del pacchetto dell'app di Windows.To get these DLLs to work, you must include them in the virtual file system portion of your Windows app package. In questo modo, l'applicazione si comporterà come se le DLL fossero installate nella cartella System32/SysWOW64.This ensures that the application behaves as if the DLLs were installed in the System32/SysWOW64 folder. Nella radice del pacchetto crea una cartella denominata VFS.In the root of the package, create a folder called VFS. All'interno di tale cartella crea una cartella SystemX64 e una SystemX86.Inside that folder create a SystemX64 and SystemX86 folder. Inserisci quindi la versione a 32 bit della DLL nella cartella SystemX86 e la versione a 64 bit nella cartella SystemX64.Then, place the 32-bit version of your DLL in the SystemX86 folder, and place the 64-bit version in the SystemX64 folder.

  • L'applicazione usa un pacchetto framework VCLibs.Your app uses a VCLibs framework package. Se stai convertendo un'app Win32 C++, devi gestire la distribuzione del runtime di Visual C++.If you are converting a C++ Win32 app, you must handle the deployment of the Visual C++ Runtime. Visual Studio 2019 e Windows SDK includono i pacchetti framework più recenti per le versioni 11.0, 12.0 e 14.0 del runtime di Visual C++ nelle cartelle seguenti: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:

    • Pacchetti framework VC 14.0: C:\Programmi (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

    • Pacchetti framework VC 12.0: C:\Programmi (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

    • Pacchetti framework VC 11.0: C:\Programmi (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

    Per usare uno di questi pacchetti, devi fare riferimento al pacchetto come dipendenza nel manifesto del pacchetto.To use one of these packages, you must reference the package as a dependency in your package manifest. Quando i clienti installano la versione finale dell'app da Microsoft Store, il pacchetto verrà installato dallo Store insieme all'app.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. Se trasferisci l'app localmente, le dipendenze non vengono installate.The dependencies will not get installed if you side load your app. Per installare manualmente le dipendenze, devi installare il pacchetto framework appropriato usando il pacchetto con estensione appx appropriato per x86, x64 o ARM, che si trova nelle cartelle di installazione elencate in precedenza.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.

    Per includere nell'app un riferimento a un pacchetto framework del runtime di Visual C++:To reference a Visual C++ Runtime framework package in your app:

    1. Passa alla cartella di installazione del pacchetto framework sopra indicata per la versione del runtime di Visual C++ usata dall'app.Go to the framework package install folder listed above for the version of the Visual C++ Runtime used by your app.

    2. Apri il file SDKManifest.xml nella cartella, individua l'attributo FrameworkIdentity-Debug o FrameworkIdentity-Retail (a seconda che usi la versione di debug o la versione finale del runtime) e copia i valori Name e MinVersion da tale attributo.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. Ecco ad esempio l'attributo FrameworkIdentity-Retail per il pacchetto framework VC 14.0 corrente.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. Nel manifesto del pacchetto per l'app aggiungi l'elemento <PackageDependency> seguente nel nodo <Dependencies>.In the package manifest for your app, add the following <PackageDependency> element under the <Dependencies> node. Assicurati di sostituire i valori Name e MinVersion con quelli copiati nel passaggio precedente.Make sure you replace the Name and MinVersion values with the values you copied in the previous step. L'esempio seguente specifica una dipendenza per la versione corrente del pacchetto framework VC 14.0.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" />
      
  • L'applicazione contiene una jump list personalizzata.Your application contains a custom jump list. Occorre considerare diversi problemi e aspetti relativi ai casi in cui vengono usate le jump list.There are several issues and caveats to be aware of when using jump lists.

    • L'architettura dell'applicazione non corrisponde al sistema operativo.Your app's architecture does not match the OS. Le jump list attualmente non funzionano correttamente se l'applicazione e le architetture del sistema operativo non corrispondono (ad esempio un'applicazione x86 in esecuzione su Windows x64).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). In questo momento, l'unica soluzione consiste nel ricompilare l'applicazione per l'architettura corrispondente.At this time, there is no workaround other than to recompile your application to the matching architecture.

    • L'applicazione crea voci di jump list e chiama ICustomDestinationList::SetAppID o SetCurrentProcessExplicitAppUserModelID .Your application creates jump list entries and calls ICustomDestinationList::SetAppID or SetCurrentProcessExplicitAppUserModelID. Non impostare a livello di codice l'AppID nel codice.Do not programmatically set your AppID in code. Altrimenti le voci di jump list non vengono visualizzate.Doing so will cause your jump list entries to not appear. Se la tua applicazione richiede un ID personalizzato, specificalo usando il file manifesto.If your application needs a custom Id, specify it using the manifest file. Per istruzioni, vedi Creare il pacchetto di un'applicazione desktop manualmente.Refer to Package a desktop application manually for instructions. L'AppID dell'applicazione è specificato nella sezione YOUR_PRAID_HERE.The AppID for your application is specified in the YOUR_PRAID_HERE section.

    • L'applicazione aggiunge un collegamento shell alla jump list che fa riferimento a un eseguibile nel tuo pacchetto.Your application adds a jump list shell link that references an executable in your package. Non è possibile lanciare direttamente eseguibili nel pacchetto da una jump list (a eccezione del percorso assoluto dell'eseguibile (.exe) di un'applicazione).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). In alternativa, registra un alias di esecuzione dell'applicazione (che consente di avviare la tua applicazione desktop in pacchetto tramite una parola chiave come se fosse in PATH) e imposta il percorso di destinazione del link sull'alias.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. Per informazioni dettagliate su come usare l'estensione appExecutionAlias, vedi Integrare l'app desktop con Windows 10.For details on how to use the appExecutionAlias extension, see Integrate your desktop application with Windows 10. Notare che se sono necessari asset del collegamento nella jump list per la corrispondenza al file .exe originale, sarà necessario impostare gli asset come l'icona che utilizza SetIconLocation e il nome di visualizzazione con PKEY_Title come per altre voci personalizzate.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.

    • L'applicazione aggiunge delle voci alla jump list che fanno riferimento agli asset nel pacchetto dell'app mediante percorsi assoluti.Your application adds a jump list entries that references assets in the app's package by absolute paths. Il percorso di installazione di un'applicazione può cambiare quando vengono aggiornati i pacchetti, modificando la posizione degli asset (come le icone, i documenti, l'eseguibile e così via).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). Se le voci della jump list fanno riferimento agli asset mediante percorsi assoluti, l'applicazione deve aggiornare la jump list periodicamente (ad esempio all'avvio) per assicurare la risoluzione corretta dei percorsi.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. In alternativa, utilizza le API UWP Windows.UI.StartScreen.JumpList che consentono di fare riferimento ad asset di immagini e stringhe utilizzando lo schema URI di tipo ms-resource correlato al pacchetto (che è anche sensibile al linguaggio, al DPI e al contrasto elevato).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).

  • L'applicazione avvia un'utilità per eseguire le attività.Your application starts a utility to perform tasks. Evita di avviare utilità di comando, ad esempio PowerShell e Cmd.exe.Avoid starting command utilities such as PowerShell and Cmd.exe. Se gli utenti installano la tua applicazione in un sistema che esegue Windows 10 S, l'applicazione non sarà in grado di avviare tali utilità.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. Questo può bloccare l'invio dell'applicazione in Microsoft Store perché tutte le app inviate in Microsoft Store devono essere compatibili con 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.

    L'avvio di un'utilità rappresenta spesso un modo pratico per ottenere informazioni dal sistema operativo oppure per accedere al Registro di sistema o alle funzionalità del sistema.Starting a utility can often provide a convenient way to obtain information from the operating system, access the registry, or access system capabilities. Puoi tuttavia usare in alternativa le API della piattaforma UWP per eseguire questi tipi di attività.However, you can use UWP APIs to accomplish these sorts of tasks instead. Queste API sono più efficienti perché non necessitano di un eseguibile separato per l'esecuzione, ma soprattutto evitano l'uscita dell'applicazione dal pacchetto.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. In questo modo, la progettazione dell'applicazione rimane coerente con l'isolamento, l'attendibilità e la sicurezza che contraddistinguono un'applicazione inserita in un pacchetto e la tua applicazione funzionerà come previsto nei sistemi che eseguono 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.

  • L'applicazione ospita plug-in, componenti aggiuntivi o estensioni.Your application hosts add-ins, plug-ins, or extensions. In molti casi, le estensioni di tipo COM continueranno probabilmente a funzionare, purché l'estensione non sia in pacchetto e venga installata con attendibilità totale.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. Questo avviene perché tali programmi di installazione possono usare le funzionalità di attendibilità per modificare il Registro di sistema e posizionare i file di estensione ovunque l'applicazione host si aspetti di trovarli.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.

    Se tuttavia queste estensioni sono in pacchetto e, successivamente, vengono installate come un pacchetto di app di Windows, non funzioneranno perché ogni pacchetto (l'applicazione host e l'estensione) sarà isolato dall'altro.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. Per altre informazioni sul modo in cui le applicazioni sono isolate dal sistema, vedi Informazioni sul funzionamento di Desktop Bridge.To read more about how applications are isolated from the system, see Behind the scenes of the Desktop Bridge.

    Tutte le applicazioni e le estensioni che gli utenti installano in un sistema che esegue Windows 10 S devono essere installate come pacchetti di app di Windows.All applications and extensions that users install to a system running Windows 10 S must be installed as Windows App packages. Se pertanto intendi creare un pacchetto delle estensioni o prevedi di incoraggiare i tuoi collaboratori a creare pacchetti, esamina in che modo puoi facilitare la comunicazione tra il pacchetto dell'applicazione host e i pacchetti delle estensioni.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. Un modo per eseguire questa operazione consiste nell'usare un servizio app.One way that you might be able to do this is by using an app service.

  • L'applicazione genera codice.Your application generates code. La tua applicazione può generare codice che utilizza in memoria, ma evita di scrivere il codice generato sul disco perché il processo di certificazione app Windows non è in grado di convalidare tale codice prima dell'invio dell'applicazione.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. Inoltre, le app che scrivono codice sul disco non vengono eseguite correttamente nei sistemi con Windows 10 S. Questo potrebbe bloccare l'invio dell'applicazione in Microsoft Store perché tutte le app inviate in Microsoft Store devono essere compatibili con Windows 10 S.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.

Importante

Dopo aver creato il pacchetto dell'app di Windows, esegui il test della tua applicazione per verificare che funzioni correttamente sui sistemi che eseguono Windows 10 S. Tutte le app inviate a Microsoft Store devono essere compatibili con Windows 10 S. Le app non compatibili non verranno accettate nello Store.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. Vedi Testare l'app di Windows per Windows 10 S.See Test your Windows app for Windows 10 S.