Share via


Microsoft Application Virtualization

Creazione di applicazioni compatibile con Windows 7 in un ambiente di virtualizzazione

Chris Jackson

Microsoft Application Virtualization (App-V) 4.6, boasting supporto completo per Windows 7, a destra intorno all'angolo, molti clienti che prevedono una distribuzione Windows 7 sono inclusi App-V tra i componenti di progetto desktop trasformazione. (Una distribuzione sistema operativo è spesso combinato con una revisione delle applicazioni e infrastrutture in un “ desktop moderno ” o “ desktop all'avanguardia ” iniziativa).

Quando i professionisti IT pensa accoppiando gli investimenti in App-V e Windows 7, le domande seguenti quasi sempre avviarsi come parte della conversazione:

  • Ho sentito che App-V è una soluzione di compatibilità delle applicazioni. Significa che consente di rendere le applicazioni compatibili con Windows 7?
  • È necessario re-sequence i pacchetti di App-V che è già stato creato per il desktop di Windows XP corrente?
  • Che cosa è necessario eseguire per risolvere le applicazioni incompatibili quando si utilizza App-V come le soluzioni di distribuzione

Esplorare Let’s ognuna di queste domande.

È una soluzione di compatibilità delle applicazioni Microsoft App-V?

Microsoft App-V è, innanzitutto e tutto, una soluzione di gestione e distribuzione di applicazioni che può comunicare vantaggio significativo per l'azienda, riducendo i costi di creazione del package, aumentando la stabilità del sistema e al supporto altamente forza di oggi con accesso dinamico a risorse software. Ma come parte di marketing di messaggistica, la compatibilità delle applicazioni di termine overload sono cresciuti per essere erroneamente interpretata nel tempo: che potrebbe consentire di App-V con problemi di compatibilità tra l'applicazione e il sistema operativo. Nella maggior parte dei casi, ciò non è possibile. (Le eccezioni oggi esistono principalmente per motivi storici e non sono qualcosa dipendono, pertanto non verrà esaminato nei dettagli qui).

La confusione cliente risultante ha prodotto alcuni chiarimenti in messaggistica; abbiamo ora forego utilizzo del termine “ compatibilità delle applicazioni ” e invece parlare direttamente ai vantaggi sottostanti: ridurre i conflitti di applicazione per applicazione (si noti l'omissione strategico di compatibilità parola) e che, di conseguenza, è ridurre drasticamente test di regressione.

Quanto non ufficiale del team dei prodotti sulla compatibilità dell'applicazione per OS è la seguente:

Come indicato nella precedente le discussioni, App-V non è una soluzione di compatibilità dell'applicazione per OS di interesse generale, tuttavia, se un'applicazione per lavorare su una determinata versione di Windows in modalità nativa consente di uno shim di compatibilità dell'applicazione (non-virtualizzata), esso verrà nella maggior parte dei casi e per la maggior parte degli shim funzionano con App-V quando app shimmed è virtualizzata. Come regola generale, di conseguenza, App-V supporterà utilizzare app con shim fornito come parte di App Compat strumenti Microsoft come l'applicazione shimmed possa essere eseguita in modalità nativa sulla versione del sistema operativo di destinazione.

In questo modo, è piuttosto chiaro che App-V non è destinato a essere una soluzione di compatibilità dell'applicazione sistema operativo. (Verranno illustrati shim in combinazione con App-V più avanti in questo articolo.) Osservare Let’s effetti che la virtualizzazione delle applicazioni ha sulla compatibilità del sistema operativo.

È una soluzione di pacchetto di compatibilità di App-V Microsoft?

Quando si parla di compatibilità delle applicazioni, è buona compatibilità pacchetto separato dal runtime compatibilità. In effetti, il processo consigliato per test di compatibilità delle applicazioni (illustrato nella figura 3 del mio articolo di giugno 2009 su Planning Your Application Compatibility Project) separa installare test dai test in fase di esecuzione. Avviare Let’s operazionali team ufficiale del prodotto:

È spesso possibile sequenza su un sistema operativo ed eseguire l'applicazione virtualizzata su un sistema operativo diverso; tuttavia, questo scenario è entrambi dipendente dell'applicazione e sistema operativo e non è garantito che funziona per tutte le combinazioni di applicazione/OS perché App-V non è una soluzione di compatibilità del sistema operativo di interesse generale. Se si verificano problemi, il cliente potrebbe essere necessario sequenza sulla stesso ambiente del sistema operativo client App-V è in esecuzione per risolvere tali problemi.

OK, in modo non audio così promessa, ovvero di quanto non ufficiale è fondamentalmente, “ dipende. ” Ma quando si sta valutando di misurazione dei rischi, confrontare la configurazione principale tre tecnologie attualmente utilizzano:

Setup.exe:  Ciò viene eseguito codice arbitrario e pertanto il codice non autorizzato è soggetto ai potenziali problemi runtime stesso che è il codice non autorizzato dell'applicazione stessa, in modo che dovranno essere verificate attentamente.

Windows Installer: Anche questo viene eseguito codice da eseguire un'installazione, ma la maggior parte di questo codice è codice strutturato e dichiarativa. Solo il codice imperativo delle azioni personalizzate è arbitrario, in modo che all'esterno delle modifiche apportate quantificabili di regole per l'elaborazione di codice eseguito a fronte del database e il codice non autorizzato in azioni personalizzate, si prevede una migliore compatibilità (anche se ancora non perfetto) e meno test.

Applicazione di Microsoft-V: Questo non è necessario eseguire tutto il codice. Copia su un blob di dati del file system virtuale e quindi “ OK, il file system virtuale è indicato come qui. ” In questo modo, la preoccupazione principale non indica se l'applicazione verrà installata (copia di un blob di dati è, dopotutto, veramente semplice), è la compatibilità di runtime dell'applicazione. In questo modo, si prevede di installare test per essere più breve di tutte le tre tecnologie. È adeguatezza!

In questo modo, mentre nessuno ufficialmente si supponga che i pacchetti funziona con qualsiasi, sembra che il motivo principale per la messaggistica è che molte persone conflate installare problemi di runtime e. In generale, è possibile eseguire ricerche per ridurre i costi previsti dell'installazione dell'applicazione test in modo significativo se hanno già investito in Microsoft App-V.

Come Correggi Runtime Compatibility Issues When mio Application Is Packaged con App-V Microsoft?

È importante ricordare il bit tantalizing dall'istruzione supporto? “ App-V supporterà utilizzare app con shim fornito come parte App Compat tools… di Microsoft. ” Come effettivamente implementare che? I due sono fondamentalmente compatibile?

La risposta è, Fortunatamente, Sì. Infatti, sono disponibili due diverse opzioni per questa operazione.

Panoramica su shim Brief

Per coloro che conoscono shim, uno shim è una delle poche quattro - lettera di parole in uso da Microsoft che non è un acronimo di qualche tipo. È una metafora basata sullo shim di parola in lingua inglese, che è un termine ingegneria utilizzato per descrivere una porzione di legno o metallo inserita tra due oggetti in modo da renderli adatta meglio insieme. In questo caso particolare, i due oggetti sono di programma dell'applicazione e Windows e il materiale shim è codice aggiuntivo che causa i due un comportamento meglio insieme, come illustrato nella Figura 1 e 2 .

 

Figura 1 prima viene applicato lo shim, l'applicazione interagisce direttamente con Windows.

 

 

Nella figura 2 dopo viene applicato lo shim, l'applicazione interagisce con Windows indirettamente; viene inserito il codice dello shim e può modificare la richiesta di Windows, la risposta di Windows o entrambi.

Uno shim funziona utilizzando API intercettazione. L'API di Windows viene implementata utilizzando un insieme di DLL. Ogni applicazione creata per Windows consente di importare queste DLL e viene gestita una tabella di indirizzi di ciascuna di queste funzioni in memoria. Poiché l'indirizzo della funzionalità di Windows si trova in una tabella, è molto semplice per il modulo di gestione di shim sostituire questo indirizzo invece con l'indirizzo della DLL shim. L'applicazione è in genere non sanno che la richiesta sta per uno shim DLL anziché da Windows e Windows non rileva che la richiesta provenga da un'origine diversa dell'applicazione (perché la DLL shim è semplicemente un'altra DLL all'interno il processo dell'applicazione).

Ad esempio uno shim molto frequente è uno shim lie versione. Per implementare questa correzione rapida per la compatibilità, si intercettano diverse API utilizzate per determinare quale versione di Windows in esecuzione l'applicazione. In genere, questa informazione viene passata lo stesso sistema Windows e le risposte truthfully. Con applicato lo shim, tuttavia, queste API vengono intercettate. Invece di passare la richiesta a Windows, viene restituita una versione diversa di Windows (ad esempio, Windows XP invece di Windows 7). Se l'applicazione è programmato per essere eseguita solo su Windows XP, questo è un modo per indurre l'applicazione a credere è in esecuzione sul sistema operativo corretto. (Spesso questo è tutto ciò che è necessario risolvere un problema di compatibilità dell'applicazione!)

Esistono un elevato numero di suggerimenti che è possibile riprodurre con shim. Ad esempio:

  • Lo shim ForceAdminAccess tenta di indurre l'applicazione a credere che l'utente corrente è un membro del gruppo Administrators locale, anche se non si ha. (Molte applicazioni direttamente errori se non si è amministratore locale, anche se potrebbe essere in grado di utilizzare altri espedienti, ad esempio UAC virtualizzazione dei file e del Registro di sistema, per risolvere i problemi che ha causato il controllo nella prima posizione.) Come implementa questo controllo può essere piuttosto semplice. Ad esempio, questa correzione rapida per la compatibilità intercetta API IsUserAnAdmin da shell32.dll. Il codice sorgente completo della funzione shimmed (che dispone di caratteristiche di prestazioni meraviglioso rispetto all'API effettiva) viene semplicemente restituito TRUE;
  • Programmi di installazione WrpMitigation shim trucchi applicazione contenuti in credere possono scrivere nei file sono protetti da protezione risorse di Windows (WRP). Se si tenta di scrivere in un file è protetto, che lo shim viene creato innanzitutto un nuovo file temporaneo, contrassegnata da eliminare dopo l'handle viene chiuso e quindi restituisce l'handle per il file temporaneo come se fosse il file effettivo protetto. L'applicazione viene installata la versione precedente crusty di kernel32.dll o shell32.dll (o qualunque altro file viene prelevato mentre era in assemblate) in un file temporaneo ma quindi tale file temp scompare e rimane nel file system versione corrispondente, corretti e aggiornata del file protetto. In questo modo, WRP comunque possibile garantire che si Don ’t finisce con una copia antichi di shell32.dll da Windows 95 nel computer, ma il programma di installazione non si verificherà un errore con ACCESS_DENIED quando si utilizza questo shim.
  • Lo shim CorrectFilePaths può reindirizzare i file da una posizione a altra. In questo modo, se si dispone di un'applicazione che sta tentando di scrivere c:\myprogramdir (che non viene corretto automaticamente utilizzando la virtualizzazione dei file di UAC e del Registro di sistema), è possibile reindirizzare i file vengono modificati in fase di esecuzione in un percorso per utente. In questo modo è possibile eseguire come utente standard senza meno rigorose gli elenchi di controllo di accesso (ACL), poiché si conosce che odiare la sicurezza personale quando meno rigorose ACL.
  • Esistono centinaia di interesse generale shim disponibile per la risoluzione dei problemi di compatibilità delle applicazioni e può essere un costo significativo salvataggio per poter usufruire di queste correzioni. Ad esempio, i clienti utilizzano spesso shim quando:
  • Il fornitore è di business in modo che non dispongono di alcuna opzione per ottenere una versione aggiornata. Se non ci si può permettere di ottenere un'applicazione diversa da un nuovo fornitore o creare manualmente una nuova versione, questo possibile acquistare alcuni minuti.
  • L'applicazione non è importante investire in versioni aggiornate (che sarebbero forniti con le istruzioni di supporto), ma quanto rende felice gli utenti si Don ’t presente se eseguono una versione non supportata.
  • L'applicazione viene sviluppata internamente ma non si desidera attendere che il team di rilasciare una versione aggiornata completamente. Si preferisce applicare una correzione temporanea e consentire al team di sviluppo rilasciare la correzione permanente in combinazione con il successivo rilascio pianificato dell'applicazione. Con questo approccio è non è più necessario interrompere tutte le attività di sviluppo dell'applicazione e dedicare tempo e risorse per la correzione dei bug di compatibilità. È possibile applicare correzioni temporanee e consentire al team di rilasciare le correzioni con la nuova funzionalità che è già nel centro di sviluppo.

Utilizzo degli shim come parte dell'approccio compatibilità dell'applicazione può condurre a risparmi significativi e accelerare notevolmente una distribuzione di Windows 7.

Opzioni per la gestione degli shim in azienda

Nel mio white paper su Managing shim in azienda da novembre 2007, è possibile delineare le due opzioni primarie la maggior parte delle persone scegliere tra prima di decidere come gestire shim come soluzione di compatibilità delle applicazioni all'interno dell'organizzazione. Per riassumere brevemente, sono:

Database di shim singola e gestiti centralmente Con questa opzione, è possibile distribuire un database di shim singola e gestiti centralmente contiene voci per ogni applicazione che richiede uno shim. È quindi possibile propagare gli aggiornamenti per il database centrale come scoprire altre applicazioni che richiedono le correzioni. Questo è l'approccio utilizzato da Microsoft. Windows 7 è fornito con un database di shim sistema correzione migliaia di applicazioni e come trovare ulteriori abbiamo forniti aggiornamenti al database tramite Windows Update. È possibile eseguire la stessa cosa cottura di un database di shim in immagine master e l'aggiornamento tramite il software di gestione dei sistemi (ad esempio System Center Configuration Manager).

Database di shim per ogni applicazione. In alternativa, è possibile distribuire le correzioni dell'applicazione direttamente con l'applicazione. Alcuni clienti sceglie di eseguire questa operazione quando solo hanno uno o due applicazioni che richiedono le correzioni, come può essere meno costoso in un ambiente di piccole dimensioni rispetto all'impostazione di un processo per la gestione di un database centrale. Uno svantaggio significativo dei database di shim per ogni applicazione è diventa difficile aggiornare il database di shim se vi sono problemi. Tuttavia, App-V rimuove questo come uno svantaggio come ora è possibile aggiornare il database per ogni applicazione e la versione aggiornata trasmessa agli utenti. (Tuttavia, come si vedrà questo introduce molto più significativo, un altro svantaggio.)

L'approccio utilizzato per distribuire il software Microsoft App-V broadens le scelte che sono per la distribuzione di applicazione delle correzioni nell'organizzazione ed è possibile scegliere il modello di processo attualmente presenti nell'organizzazione si adatta a prescindere dall'approccio migliore.

Shimming App-V di applicazioni con un valore Single, gestiti centralmente shim database

In questo modo, dal punto di vista tattico, quale operazione è necessario effettuare per distribuire un database di shim singolo, gestito centralmente e automaticamente prelevati da un'applicazione in sequenza utilizzando App-V? È facile, installarlo solo come si farebbe normalmente! Un'applicazione installata mediante App-V viene avviata nello stesso modo che l'applicazione normalmente sarebbe e utilizza gli stessi meccanismi del caricatore in cui vengono applicati shim. Essi sta semplicemente avviati da un processo sostitutivo. In particolare, sfttray.exe è ciò che svolge il lavoro per avviare il nuovo processo, anziché Esplora risorse. Di conseguenza, la struttura dei processi, viene visualizzata in Figura 3.

 

Nella figura 3 una struttura processi sostituto

Quando l'applicazione viene avviata, prosegue attraverso il caricatore come farebbe con qualsiasi altra applicazione. Microsoft Application Virtualization Client Interface Layer (sftintf.dll) effettua una chiamata in CreateProcessW che chiama il API CreateProcessInternalW interna. È l'API CreateProcessInternalW che viene richiamato il motore di shim e cablati di shim fino al processo.

OK, in modo che sia piuttosto semplice. Sono presenti eventuali catch? Beh, Sì, è disponibile. Esso non gestisce anche l'elevazione dei privilegi. Non è semplicemente possibile chiedere l'elevazione dei privilegi di un'applicazione, utilizzando uno shim RunAsAdmin, o correggere i problemi con le applicazioni che richiedono l'elevazione utilizzando ElevateCreateProcess, ad esempio. Perché? A causa della bolla.

Ad esempio let’s richiedere un'applicazione che tenta di avviare un aggiornamento automatico di se stesso (Sfortunatamente, un'attività frequenti tutti troppo). Esecuzione in modalità nativa, ad esempio che è verificato un problema in quanto utilizzata l'API CreateProcess, che è Impossibile richiamare l'elevazione dei privilegi. Che verrebbe quindi restituito errore-1073740756 – STATUS_ELEVATION_REQUIRED. Lo shim ElevateCreateProcess dovrebbe intercettare questo valore restituito e quindi richiamare il servizio informazioni applicazioni per fornire l'elevazione. Ma questo servizio non riesce a trovare l'applicazione di elevare, poiché il servizio si trova all'esterno della bolla!

In questo modo, come l'applicazione non richiede l'elevazione dei privilegi, distribuire una soluzione di database di shim singolo è trivially semplice se si dispone già di un processo ha lavorato — semplicemente continuare eseguendo la stessa cosa.

Shimming Applications App-V con i database di shim per applicazioni

L'alternativa per la distribuzione degli shim per risolvere i problemi di compatibilità delle applicazioni consiste nel distribuire shim con l'applicazione. Nel mondo MSI, in genere includono il file SDB nel programma di installazione e quindi incorporare un'azione personalizzata denominata sdbinst contro il file SDB che eliminato. Questo dovrebbe installare il database di shim personalizzati come parte del programma di installazione. (Se successivamente è necessario aggiornare shim per tale applicazione, è necessario individuare tutti i client installati ed eseguire uno script per installare un aggiornamento, complica le cose leggermente.)

Con App-V, è possibile eseguire la stessa cosa. È possibile includere il file di database (con estensione sdb) shim in sequenza, in modo che il file SDB si trova all'interno della bolla. In primo luogo, di sequenza dell'applicazione che richiede di shim per il corretto funzionamento. Al termine che, vorrei trascinare il database di shim personalizzati in system32.

(Sebbene in genere si consiglia agli utenti di mai, mai inserire nulla in system32, a meno che la busta paga è firmata da Steve Ballmer e catena di reporting include Steven Sinofsky, in questa particolare istanza si sceglie di farlo perché semplifica la creazione di script, ovvero è system32 nel percorso e si è non effettivamente lasciando nulla in system32 in un sistema di produzione, in aspetto system32 per il file system virtuale).

Una volta ho fatto questo, modificare il file .sprj. È possibile passare alla scheda file system virtuale e fare clic su Visualizza | file system virtuale | Aggiungi. Quindi, è possibile individuare il percorso in cui eliminato il file SDB (c:\windows\system32\appshim.sdb) e fare clic su OK. A questo punto, il file con estensione sdb sarà presente all'interno del fumetto e installato quando si installa il pacchetto di softgrid. Poiché il file fa parte del contenitore, eseguita intorno come parte dell'applicazione e può essere aggiornato quando l'applicazione viene aggiornata.

Naturalmente, semplicemente con il file SDB nel file system non sufficienti per applicare le correzioni dell'applicazione, ovvero, devono essere installati. Tuttavia, il database di shim deve essere installato all'esterno di della bolla App-V. Se si installa il database di shim all'interno della bolla, quindi il file SDB virtualizzati non è rilevabile finché dopo il processo di creazione, quando è troppo tardi per il modulo di gestione di shim per individuarlo e intraprendere l'azione su di esso. È necessario disporre del database di shim accessibile per il caricatore all'esterno della bolla durante il processo viene creato.

Fortunatamente, App-V include un meccanismo per l'esecuzione di script come parte del processo di avvio dell'applicazione. Si osservi il file OSD per un'applicazione mediante l'editor di testo preferito, si noterà che è semplicemente XML che può essere modificato. L'elemento < SOFTPGK > contiene un elemento < IMPLEMENTATION >, un elemento < DEPENDENCY >, un elemento < PACKAGE >, un elemento < ASTRATTA >, un elemento < MGMT_SHORTCUTLIST > e un elemento < MGMT_FILEASSOCIATIONS >. L'elemento < DEPENDENCY > è quello che si desidera modificare, ovvero si intende aggiungere elementi figlio < SCRIPT > per eseguire l'installazione del database di shim personalizzato. Di seguito è riportato un esempio di uno script che è possibile installare il database di shim personalizzato quando viene avviata l'applicazione e rimuovere nuovamente quando l'applicazione esiste (in modo che sia un'installazione JIT pulisce dietro stessa, un obiettivo importante di App-V):

<DEPENDENCY>
       <CLIENTVERSION VERSION="4.6.0.0"/>
       <SCRIPT EVENT="LAUNCH" PROTECT="TRUE" TIMING="PRE" WAIT="TRUE" EXTERN="TRUE">
<SCRIPTBODY LANGUAGE="Batch">sdbinst /q appshims.sdb</SCRIPTBODY>
       </SCRIPT>
       <SCRIPT EVENT="SHUTDOWN" PROTECT="TRUE" TIMING="POST" WAIT="TRUE" EXTERN="TRUE">
              <SCRIPTBODY LANGUAGE="Batch">sdbinst /u appshims.sdb</SCRIPTBODY>
       </SCRIPT>
</DEPENDENCY>

 

Con questo script si verrà chiamata il programma di installazione database di shim (sdbinst.exe) all'esterno di della bolla App-V, ma utilizza un argomento di un .sdb che vive in della bolla App-V e di conseguenza viene distribuito come parte della sequenza di distribuzione dell'applicazione. Pertanto, è facile da distribuire e aggiornare l'applicazione delle correzioni come se si trattasse di qualsiasi altra parte dell'applicazione.

Installazione dei database di shim personalizzato è un processo che richiede amministratore i diritti; è verificato un problema che si sta installando questo in fase di esecuzione? Si Don ’t desidera richiedere diritti amministrativi per gli utenti e gli utenti Don ’t desidera necessario fare clic sulle finestre di dialogo UAC ogni volta che si avvia le applicazioni. Fortunatamente, non è necessario eseguire questa operazione, la chiamata a sdbinst.exe automaticamente è elevata per l'utente. Figura 4 è illustrata la struttura dei processi per l'installazione di shim.

 

 

Nella figura 4 una struttura di processi di installazione shim

Una shell dei comandi viene creata, che quindi effettua una chiamata a sdbinst.exe per installare il database di shim personalizzato. Si verifica un errore due volte con STATUS_ELEVATION_REQUIRED prima viene eseguita una chiamata per il servizio informazioni applicazioni, ovvero il servizio che fornisce l'elevazione dei privilegi. Questo servizio chiama consent.exe, controlla i criteri per determinare se l'applicazione deve essere elevato. Il criterio (in ambiente virtuale) restituisce Sì senza che sia necessario richiedere all'utente; consent.exe approva l'elevazione e viene creata un'istanza con privilegi elevata di sdbinst.exe che installa il database di shim personalizzato. Ma è importante tenere presente che un criterio di privilegi elevati senza chiedere conferma funziona solo in modo invisibile all'utente se si è in grado di privilegi elevati. Se si è un utente standard, ogni avvio dell'applicazione determinerà una richiesta di credenziali di amministratore, così come ogni volta che si chiude l'applicazione. Poiché questo verrà probabilmente visualizzato come estremamente indesiderato in un ambiente utente standard, questo approccio funziona solo se è stato distribuito agli utenti di amministratore locale. Ci auguriamo che la percentuale di utenti che si applica alle è estremamente piccola!

Conclusioni

Microsoft Application Virtualization è uno strumento potente applicazione di gestione e distribuzione. Quando si utilizza tale ai piani per una migrazione Windows 7, è possibile trarre vantaggio dal potenziale riduzione dei costi durante i test di installazione (anche se questo costo è promessa non uguale a zero).

È inoltre possibile continuare a sfruttare la maggior parte degli stessi processi per la risoluzione dei problemi di compatibilità delle applicazioni utilizzando shim. Se si sta distribuendo un database di shim singola e a livello di organizzazione, la transizione sarà molto minima, è solo necessario prestare attenzione evitare l'elevazione dei privilegi shim (in modo analogo è opportuno evitare in generale l'elevazione dei privilegi in un ambiente App-V). Se si esegue la distribuzione di shim per ogni applicazione, esistono alcuni metodi eleganti per impacchettare e distribuire shim di database con l'applicazione, ma hanno lo svantaggio significativo del grado di eseguire ragionevolmente l'applicazione come utente non amministratore. Di conseguenza, mio sicuro (come nel caso nelle distribuzioni di applicazioni basate su MSI) è consigliabile sforzarsi di distribuzione degli shim come un unico database gestito centralmente che è possibile distribuire utilizzando il software di gestione di sistemi esistenti. Consente di controllare per un futuro in cui una percentuale più grande e più grande degli utenti verrà eseguita come parte di utenti non amministratori.

Chris Jackson ( “ Di App Compat Guy ”) è un consulente presso Microsoft e responsabile tecnico di Windows Application Experience SWAT team principale. Jackson è un esperto ampiamente riconosciuto nel campo della compatibilità delle applicazioni per Windows, creazione di documentazione tecnica, formazione, e offerte di servizi utilizzate all'interno e all'esterno di Microsoft si basano su anni di esperienza del mondo reale con i clienti aziendali e i fornitori di software indipendenti. È possibile contattarlo tramite il suo blog più comuni di Jackson.

Contenuto correlato