Installazione guidata dall'utente - Guida per gli sviluppatori

L'installazione guidata dall'utente consente di semplificare la distribuzione di sistemi operativi client Windows®, ad esempio Windows 8.1, nei computer che usano la funzionalità di distribuzione del sistema operativo (OSD) in Microsoft® System Center 2012 R2 Configuration Manager. L'UDI fa parte di Microsoft Deployment Toolkit (MDT).

Introduzione

In genere, quando si distribuiscono sistemi operativi usando la funzionalità OSD, è necessario fornire tutte le informazioni necessarie per la distribuzione del sistema operativo. Le informazioni vengono configurate nei file di configurazione o nei database, ad esempio il file CustomSettings.ini o il database MDT [MDT DB]. Prima di avviare la distribuzione, è necessario specificare tutte le impostazioni di configurazione.

UDI fornisce un'interfaccia guidata che consente di fornire informazioni di configurazione immediatamente prima di eseguire la distribuzione. Questo comportamento consente di creare sequenze di attività OSD generiche e quindi fornire informazioni specifiche del computer al momento della distribuzione, con una maggiore flessibilità nel processo di distribuzione.

Target

Questa guida viene scritta per gli sviluppatori che creano pagine della procedura guidata personalizzata per la Procedura guidata UDI e per gli editor di pagine della procedura guidata personalizzata per la procedura guidata UDI Designer. Questa guida presuppone che si abbia familiarità con lo sviluppo di applicazioni Windows con:

  • C++, usato per creare pagine personalizzate della procedura guidata

  • Microsoft .NET Framework, usato per creare editor di pagine personalizzate della procedura guidata

  • Windows Presentation Foundation (WPF), usato per creare editor di pagine della procedura guidata personalizzati

  • Linguaggi supportati da WPF, ad esempio C#, C++ o Microsoft Visual Basic® .NET, usati per creare editor di pagine della procedura guidata personalizzati

Informazioni su questa guida

Questa guida fornisce le informazioni di riferimento necessarie per personalizzare l'UTI per l'organizzazione. Questa guida non illustra argomenti amministrativi o operativi, ad esempio l'installazione di MDT (che include UDI), la configurazione dell'UDI per distribuire sistemi operativi e applicazioni o l'esecuzione di distribuzioni tramite la Procedura guidata UDI. Per altre informazioni su questi argomenti, vedere gli argomenti UDI in Uso di Microsoft Deployment Toolkit, incluso in MDT.

Panoramica dello sviluppo UDI

Lo sviluppo UDI consente di estendere le funzionalità fornite da UDI. In genere, lo sviluppo UDI è necessario quando si vogliono raccogliere informazioni aggiuntive usate dal processo di distribuzione UDI. Queste informazioni aggiuntive vengono in genere salvate come variabili della sequenza di attività che vengono eseguite in una sequenza di attività UDI in Configuration Manager lette.

Architettura UDI

L'obiettivo principale dello sviluppo UDI consiste nel creare pagine della procedura guidata personalizzate che possono essere visualizzate nella Procedura guidata UDI. Creando pagine personalizzate della procedura guidata, è possibile estendere le funzionalità esistenti dell'UDI per soddisfare i requisiti aziendali e tecnici dell'organizzazione. Una pagina della procedura guidata personalizzata raccoglie informazioni in aggiunta o al posto delle pagine della procedura guidata fornite da UDI.

Nella figura 1 viene illustrata la relazione tra la procedura guidata UDI Designer e la Procedura guidata UDI.

Figura 1. Relazione tra la Procedura guidata UDI e la Procedura guidata UDI Designer Figura 1. Relazione tra la procedura guidata UDI e la procedura guidata UDI Designer

Figura 1. Relazione tra la procedura guidata UDI e la procedura guidata UDI Designer

A livello concettuale, lo sviluppo UDI include la creazione di:

  • Pagine personalizzate della procedura guidata. Le pagine della procedura guidata vengono visualizzate nella Procedura guidata UDI e raccolgono le informazioni necessarie per completare il processo di distribuzione. Creare pagine della procedura guidata usando C++ in Microsoft Visual Studio®. Le pagine della procedura guidata personalizzata vengono implementate come DLL lette dalla Procedura guidata UDI. L'SDK (Software Development Kit) UDI include un esempio di come creare pagine personalizzate della procedura guidata.

  • Editor di pagine della procedura guidata personalizzati. Gli editor di pagine della procedura guidata consentono di configurare il comportamento della pagina della procedura guidata personalizzata. Gli editor di pagine della procedura guidata personalizzata vengono implementati come DLL che la Procedura guidata UDI Designer legge. È possibile creare editor di pagine della procedura guidata usando:

    • WPF versione 4.0

    • Microsoft Prism versione 4.0

    • Microsoft Unity Application Block (Unity) versione 2.1

      MDT include tutti gli assembly necessari per creare un editor di pagine della procedura guidata personalizzato da usare nella Designer della Procedura guidata UDI. UDI SDK include un esempio di come creare editor di pagine personalizzate della procedura guidata.

    Inoltre, la procedura guidata UDI Designer utilizza i file di configurazione dell'editor di pagine della procedura guidata di supporto. I file di configurazione dell'editor di pagine della procedura guidata vengono creati come parte del processo di creazione delle pagine personalizzate della procedura guidata e degli editor di pagine personalizzate della procedura guidata. La procedura guidata UDI Designer crea le informazioni XML necessarie nel file di configurazione della Procedura guidata UDI e nel file di .app corrispondente.

Preparazione dell'ambiente di sviluppo UDI

Prima di iniziare a creare pagine personalizzate della procedura guidata e editor di pagine della procedura guidata, seguire questa procedura per preparare l'ambiente di sviluppo UDI:

  1. Preparare i prerequisiti dell'ambiente di sviluppo UDI come descritto in Preparare i prerequisiti dell'ambiente di sviluppo UDI.

  2. Configurare l'ambiente di sviluppo UDI come descritto in Configurare l'ambiente di sviluppo UDI.

  3. Verificare che l'ambiente di sviluppo UDI sia configurato correttamente come descritto in Verificare l'ambiente di sviluppo UDI.

Preparare i prerequisiti dell'ambiente di sviluppo UDI

Per preparare i prerequisiti dell'ambiente di sviluppo UDI, seguire questa procedura:

  1. Preparare i perquisite hardware dell'ambiente di sviluppo UDI come descritto in Preparare i prerequisiti hardware dell'ambiente di sviluppo UDI.

  2. Preparare i perquisiti software dell'ambiente di sviluppo UDI come descritto in Preparare i prerequisiti software dell'ambiente di sviluppo UDI.

Preparare i prerequisiti hardware dell'ambiente di sviluppo UDI

I prerequisiti hardware dell'ambiente di sviluppo UDI sono gli stessi requisiti hardware per l'edizione di Microsoft Visual Studio in uso. Per altre informazioni su questi requisiti, vedere i requisiti di sistema per ogni edizione nella documentazione di Visual Studio.

Preparare i prerequisiti software dell'ambiente di sviluppo UDI

L'ambiente di sviluppo UDI presenta i prerequisiti software seguenti:

  • Qualsiasi sistema operativo Windows supportato da Visual Studio 2010 (è consigliabile usare Windows 7 o Windows Server® 2008 R2).

    Sarà necessario un sistema operativo Windows che supporti l'architettura del processore per cui si vuole sviluppare. È possibile eseguire lo sviluppo UDI a 32 e 64 bit usando un sistema operativo a 64 bit. Lo sviluppo UDI a 32 bit viene eseguito solo in sistemi operativi a 32 bit. Per questo motivo, è consigliabile usare un sistema operativo a 64 bit.

    Nota

    Le versioni IntelItanium (IA-64) del sistema operativo Windows non sono supportate per gli ambienti di sviluppo UDI.

    Per altre informazioni sui sistemi operativi supportati da Visual Studio 2010, vedere i requisiti di sistema per ogni edizione nella documentazione di Visual Studio.

  • Microsoft .NET Framework versione 4.0 (richiesto da Visual Studio 2010)

  • Linguaggio C++ (lingua usata per estendere le pagine della procedura guidata UDI)

  • Altri linguaggi supportati da WPF, ad esempio C#, Visual Basic .NET o C++/Common Language Infrastructure, usati per estendere la procedura guidata UDI Designer editor di pagine della procedura guidata

    Nota

    Il codice sorgente di esempio per la procedura guidata UDI Designer editor di pagine della procedura guidata è scritto in C#. Installare il linguaggio C# se si vuole usare il codice sorgente di esempio.

Configurare l'ambiente di sviluppo UDI

Dopo aver soddisfatto i prerequisiti dell'ambiente di sviluppo UDI, seguire questa procedura per configurare l'ambiente di sviluppo UDI:

  1. Installare Visual Studio 2010.

    Assicurarsi di installare il linguaggio C++ e qualsiasi altro linguaggio supportato da WPF.

    Nota

    Il codice sorgente di esempio per la Creazione guidata UDI Designer pagine dell'editor è scritto in C#. Installare il linguaggio C# se si vuole usare il codice sorgente di esempio.

    Per altre informazioni sull'installazione di Visual Studio 2010, vedere Installazione di Visual Studio.

  2. Installare MDT.

    Per altre informazioni su come installare MDT, vedere la sezione "Installazione o aggiornamento a MDT" nel documento MDT Uso di Microsoft Deployment Toolkit.

  3. In Esplora risorse creare local_folder (dove local_folder è una cartella che si trova in un'unità locale nel computer di sviluppo).

  4. Copiare la cartella installation_folder\SDK in local_folder , dove installation_folder è la cartella in cui è stato installato MDT e local_folder è una cartella presente in un'unità locale nel computer di sviluppo.

    Copiare la cartella SDK in un altro percorso perché MDT è installato nella cartella Programmi, in cui non è possibile scrivere senza autorizzazioni elevate. La copia della cartella SDK in un altro percorso consente di modificare i file nella cartella SDK senza richiedere autorizzazioni elevate.

  5. Copiare la cartella installation_folder\Templates\Distribution\Tools in local_folder (dove installation_folder è la cartella in cui è stato installato MDT e local_folder è la cartella creata in precedenza nel processo).

  6. Rinominare la cartella local_folder\Tools in local_folder\OSDSetupWizard(dove local_folder è la cartella creata in precedenza nel processo).

    Al termine, la struttura di cartelle sotto local_folder dovrebbe essere simile alla struttura di cartelle illustrata nella figura 2, dove local_folder è la cartella creata in precedenza nel processo e viene visualizzata come UDIDevelopment nella figura.

    Figura 2. Struttura di cartelle per lo sviluppo UDI Figura 2. Struttura di cartelle per lo sviluppo di UDI

    Figura 2. Struttura di cartelle per lo sviluppo di UDI

Verificare l'ambiente di sviluppo UDI

Quando l'ambiente di sviluppo UDI è configurato, verificare che l'ambiente di sviluppo UDI sia configurato correttamente assicurando che i progetti di esempio vengano compilati correttamente in Visual Studio 2010.

Verificare che l'ambiente di sviluppo UDI sia configurato correttamente determinando se:

Verificare che il progetto SamplePage sia compilato correttamente

Il progetto SamplePage fornisce un esempio di come creare una pagina della procedura guidata personalizzata per la Procedura guidata UDI. Per altre informazioni sul progetto SamplePage, vedere Esaminare la soluzione Visual Studio SamplePage.

Per verificare che il progetto SamplePage sia compilato correttamente

  1. Avviare Visual Studio 2010.

  2. Aprire il progetto SamplePage.

    Il progetto SamplePage si trova nella cartella local_folder\SDK\UDI\SamplePage (dove local_folder è la cartella creata in precedenza nel processo).

  3. In Visual Studio 2010, in Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto SamplePage e quindi scegliere Proprietà.

    Verrà visualizzata la finestra di dialogo Pagine delle proprietà SamplePage .

  4. Nella finestra di dialogo Pagine delle proprietà SamplePage passare a Proprietà configurazione/Debug.

  5. In Proprietà di debug selezionare Tutte le configurazioni in Configurazione.

  6. In Proprietà di debug, in Comando, digitare $(TargetDir)\OSDSetupWizard.exe.

  7. In Proprietà di debug, in Directory di lavoro, digitare $(TargetDir).

  8. Nella finestra di dialogo Pagine delle proprietà SamplePage passare a Proprietà configurazione/Eventi di compilazione/Evento post-compilazione.

  9. Nelle proprietà Evento post-compilazione, in Riga di comando, digitare quanto segue:

    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\*.*" "$(TargetDir)"
    xcopy /y /i "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\en-us" "$(TargetDir)en-us"
    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\OSDResults\Images\UDI_Wizard_Banner.bmp" "$(ProjectDir)header.bmp"
    copy /y "$(ProjectDir)Config.xml" "$(TargetDir)"
    copy /y "$(ProjectDir)header.bmp" "$(TargetDir)header.bmp"
    
  10. Nella finestra di dialogo Pagine delle proprietà SamplePage selezionare OK.

  11. Salvare il progetto.

  12. Dal menu Debug selezionare Avvia debug.

    Viene visualizzata la finestra di dialogo Microsoft Visual Studioche indica che l'origine non è aggiornata e chiede se si vuole compilare il progetto.

  13. Nella finestra di dialogo Microsoft Visual Studio selezionare .

    Verrà visualizzata la finestra di dialogo Nessuna informazione di debug che informa che non sono disponibili informazioni di debug per OSDSetupWizard.exe.

  14. Nella finestra di dialogo Nessuna informazione di debug selezionare .

    Verrà visualizzata la procedura guidata UDI con la pagina personalizzata della procedura guidata.

  15. Verificare che sia possibile selezionare un valore in Scegliere la posizione.

  16. Nel modulo Procedura guidata con pagina di esempio selezionare Annulla.

    Verrà visualizzata la finestra di dialogo Annulla procedura guidata .

  17. Nella finestra di dialogo Annulla procedura guidata selezionare .

  18. Chiudere Visual Studio 2010.

Verificare che il progetto SampleEditor sia compilato correttamente

Il progetto SampleEditor fornisce un esempio di come creare un editor di pagine della procedura guidata personalizzata per la procedura guidata UDI Designer. Per altre informazioni sul progetto SampleEditor, vedere Esaminare la soluzione di Visual Studio SamplePage.

Per verificare che il progetto SampleEditor sia compilato correttamente

  1. Avviare Visual Studio 2010.

  2. Aprire il progetto SampleEditor.

    Il progetto SampleEditor si trova nella cartella local_folder\SDK\UDI\SampleEditor (dove local_folder è la cartella creata in precedenza nel processo).

  3. In Visual Studio 2010, in Esplora soluzioni selezionare il progetto SampleEditor.

  4. Dal menu Progetto selezionare Aggiungi riferimento.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento .

  5. Nella finestra di dialogo Aggiungi riferimento selezionare la scheda Sfoglia .

  6. Nella scheda Sfoglia passare a installation_folder\Bin (dove installation_folder è la cartella in cui è stato installato MDT). Selezionare i file seguenti e quindi selezionare OK:

    • Microsoft.Enterprise.UDIDesigner.Common.dll

    • Microsoft.Enterprise.UDIDesigner.DataService.dll

    • Microsoft.Enterprise.UDIDesigner.Infrastructure.dll

    • Microsoft.Practices.Prism.dll

    • Microsoft.Practices.ServiceLocation.dll

    • Microsoft.Practices.Unity.dll

    • RibbonControlsLibrary.dll

    Nota

    È possibile selezionare più file nella scheda Sfoglia tenendo premuto CTRL mentre si selezionano i file.

  7. In Esplora soluzioni passare a SampleEditor/References.

  8. Verificare che nessuno dei riferimenti presenti avvisi o errori.

  9. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SampleEditor e quindi scegliere Proprietà.

    Verrà visualizzata la finestra di dialogo Pagine delle proprietà SampleEditor .

  10. Nella finestra di dialogo Pagine delle proprietà SampleEditor selezionare la scheda Debug .

  11. Nella scheda Debug selezionare Avvia programma esterno.

  12. In Avvia programma esterno digitare installation_folder\Bin\UDIDesigner.exe (dove installation_folder è la cartella in cui è stato installato MDT) e quindi selezionare OK.

    Consiglio

    È possibile selezionare il pulsante con i puntini di sospensione (...) per passare alla cartella e selezionare UDIDesigner.exe.

  13. Dal menu File selezionare Salva tutto.

  14. Copiare il file\SDK\SamplePage\SamplePage.dll.config local_folder nella cartella installation_folder\Bin\Config, dove local_folder è la cartella creata nel computer di sviluppo in precedenza nel processo di configurazione einstallation_folder è la cartella in cui è stato installato MDT.

  15. In Visual Studio 2010 scegliere Avvia debug dal menu Debug.

    Viene avviata la procedura guidata UDI Designer.

  16. Nella Designer della Procedura guidata UDI selezionare Apri sulla barra multifunzione.

    Verrà visualizzata la finestra di dialogo Apri .

  17. Nella finestra di dialogo Apri aprire il file local_folder\SDK\SamplePage\SamplePage\Config.xml, dove local_folder è la cartella creata nel computer di sviluppo in precedenza nel processo di configurazione.

    Viene aperto il file Config.xml e il gruppo di fasi personalizzato viene visualizzato nel riquadro dei dettagli.

  18. Nel riquadro dei dettagli selezionare la scheda Configura .

  19. Esaminare le informazioni di configurazione per la casella Percorso , incluse le informazioni seguenti:

    • Pulsante Sbloccato con il quale si abilita o disabilita la casella Percorso

    • Casella Valore predefinito in cui immettere un valore predefinito da visualizzare nella casella Percorso

    • Nome visualizzato descrittivo visibile nella pagina di riepilogo, in cui si immette il didascalia per le informazioni visualizzate nella pagina Riepilogo

    • Casella di riepilogo Percorso, che include un elenco di possibili posizioni

  20. Chiudere la procedura guidata UDI Designer.

  21. Chiudere Visual Studio 2010.

Revisione degli esempi di UDI SDK

Prima di iniziare lo sviluppo, esaminare gli esempi forniti in UDI SDK. Usare le informazioni contenute in questa guida e il codice sorgente negli esempi per creare pagine personalizzate della procedura guidata UDI e editor di pagine della procedura guidata.

Esaminare gli esempi di UDI SDK esaminando:

Esaminare il contenuto della cartella SDK

Durante la configurazione dell'ambiente di sviluppo UDI, la cartella SDK è stata copiata dalla cartella in cui È stato installato MDT in un'altra cartella creata. La tabella 1 elenca le cartelle immediatamente sotto la cartella SDK e fornisce una breve descrizione di ognuna di esse.

Tabella 1. Cartelle in UDI SDK

Cartella Questa cartella contiene
Include File di intestazione C++ necessari per la creazione di pagine della procedura guidata personalizzata per l'UDI Wizard
Libs I file di libreria C++ che verranno collegati alla pagina personalizzata; Esistono versioni a 32 bit e a 64 bit delle librerie di collegamento statico. Nota: Le versioni Itanium delle librerie (IA-64) non sono disponibili.
SampleEditor Un progetto di Visual Studio per la compilazione di un editor personalizzato usato per modificare la pagina SamplePage nella procedura guidata UDI Designer, scritto in C#
SamplePage Un progetto di Visual Studio per la creazione di una pagina della procedura guidata UDI personalizzata, scritta in Visual C++

Esaminare la soluzione Visual Studio SamplePage

Prima di iniziare a creare le pagine della procedura guidata personalizzata e gli editor di pagine della procedura guidata, eseguire le attività seguenti per preparare l'ambiente di sviluppo UDI:

Esaminare il ciclo di vita della pagina della procedura guidata

Una pagina della procedura guidata UDI include metodi che corrispondono a ogni fase (o fase) del ciclo di vita della pagina. Come parte della creazione della pagina della procedura guidata personalizzata, è necessario eseguire l'override di questi metodi con il codice. La tabella 2 elenca i metodi di cui è necessario eseguire l'override e fornisce una breve descrizione di ogni metodo, incluso quando usare il metodo nel ciclo di vita della pagina della procedura guidata.

Tabella 2. Metodi in un ciclo di vita della pagina della procedura guidata

Metodo Descrizione
OnWindowCreated Questo metodo viene chiamato una volta, dopo la creazione della finestra della pagina.

Per questo metodo, scrivere codice che inizializza la pagina per la prima volta e che deve essere eseguito una sola volta. Ad esempio, utilizzare questo metodo per inizializzare i campi o leggere le informazioni di configurazione dagli elementi Setter nel file di configurazione della Procedura guidata UDI.
OnWindowShown Questo metodo viene chiamato ogni volta che la pagina viene visualizzata (visualizzata) nella Procedura guidata UDI. Viene chiamata la prima volta che viene visualizzata la pagina e ogni volta che si passa alla pagina selezionando Avanti o Indietro nella procedura guidata.

Per questo metodo, scrivere codice che prepari la pagina da visualizzare, ad esempio la lettura di variabili di memoria, variabili della sequenza di attività o variabili di ambiente, e quindi l'aggiornamento della pagina in base alle modifiche apportate a tali variabili.
OnCommonControlEvent Questo metodo può essere chiamato ogni volta che viene visualizzata la pagina della procedura guidata e riceve un messaggio di WM_NOTIFY da un elemento figlio (in genere controlli comuni).

Per questo metodo, scrivere codice che gestisce WM_NOTIFY in base al messaggio di notifica. Ad esempio, potresti voler rispondere agli eventi da un controllo comune, ad esempio rispondere a eventi di selezione o doppio clic per un controllo TreeView .
OnUnhandledEvent Questo metodo viene chiamato ogni volta che si verifica un messaggio di finestra non gestita per la pagina della procedura guidata. Questo metodo offre l'opportunità di intercettare e gestire questi messaggi della finestra altrimenti non gestiti.

Per questo metodo, scrivere codice che gestisce i messaggi della finestra pertinenti alla pagina della procedura guidata. In genere, non sarà necessario eseguire l'override di questo metodo.
OnNextSelected Questo metodo viene chiamato quando si seleziona Avanti nella procedura guidata.

Per questo metodo, scrivere codice che esegua le azioni necessarie prima di passare alla pagina successiva della procedura guidata, ad esempio eseguendo una convalida che può richiedere molto tempo. Se la convalida non riesce, è possibile annullare la richiesta Avanti e visualizzare un messaggio.
OnWindowHidden Questo metodo viene chiamato ogni volta che la pagina viene nascosta quando viene visualizzata la pagina della procedura guidata precedente o successiva.

Per questo metodo, scrivere codice che esegua qualsiasi azione prima che la pagina venga nascosta, prima che venga visualizzata un'altra pagina. In genere, non sarà necessario eseguire l'override di questo metodo.

Esaminare l'esempio SamplePage

Esaminare l'esempio SamplePage usando l'elenco seguente, che rappresenta la sequenza di eventi durante il ciclo di vita della pagina della procedura guidata dell'esempio SamplePage:

  1. La procedura guidata UDI, OSDSetupWizard.exe, legge le informazioni di configurazione dal file di configurazione della Procedura guidata UDI nell'esempio (il file Config.xml) come descritto in Passaggio 1: La Procedura guidata UDI (OSDSetupWizard.exe) legge il file Config.xml.

  2. La procedura guidata UDI carica le DLL necessarie per ogni pagina della procedura guidata elencata nel file di configurazione della Procedura guidata UDI, come descritto in Passaggio 2: La procedura guidata UDI carica la DLL per la pagina creazione guidata personalizzata.

  3. La procedura guidata UDI visualizza la pagina della procedura guidata personalizzata e consente l'interazione del controllo desiderata, come descritto in Passaggio 3: La Procedura guidata UDI visualizza la pagina Creazione guidata personalizzata.

  4. Dopo che la pagina della procedura guidata personalizzata ha raccolto le informazioni, eseguire le attività necessarie prima di selezionare Avanti per passare alla procedura guidata successiva, come descritto in Passaggio 4: Il pulsante Successivo è selezionato nella pagina Creazione guidata personalizzata.

Passaggio 1: La procedura guidata UDI (OSDSetupWizard.exe) legge il file Config.xml

All'avvio della Procedura guidata UDI (OSDSetupWizard.exe), per impostazione predefinita legge il file di configurazione della Procedura guidata UDI, ovvero il file UDIWizard_Config.xml, ovvero il file di configurazione principale per la Procedura guidata UDI.

Nota

Nell'esempio viene usato il file Config.xml come file di configurazione. In MDT, il file di configurazione predefinito è il file UDIWizard_Config.xml, che si trova nella cartella Scripts del pacchetto MDT Files per la configurazione.

È possibile eseguire l'override del file di configurazione predefinito usato dalla Procedura guidata UDI modificando il passaggio della sequenza di attività creazione guidata UDI per usare il parametro /definition . Per altre informazioni sull'override del file di configurazione predefinito usato dalla Procedura guidata UDI, vedere "Eseguire l'override del file di configurazione usato dalla Procedura guidata UDI".

Gli elementi di primo livello nel file Config.xml sono i seguenti:

  • Elemento DLLs

  • Elemento Style

  • Elemento Pages

  • Elemento StageGroups

    Per altre informazioni sullo schema del file di configurazione della Procedura guidata UDI e su ognuno di questi elementi, vedere Informazioni di riferimento sullo schema del file di configurazione della procedura guidata UDI.

    La Procedura guidata UDI analizza l'elemento DLL cercando i file .dll da caricare. Nell'esempio vengono elencati due file .dll: SamplePage.dll e SharedPages.dll. Questi file .dll devono trovarsi nella stessa cartella di OSDSetupWizard.exe, ovvero la cartella Tools\platform (dove platform è x86 per la versione a 32 bit o x64 per la versione a 64 bit).

    La Procedura guidata UDI analizza l'elemento Pages cercando le pagine definite. Nell'esempio vengono definite due pagine: Custom e SummaryPage. L'attributo Type dell'elemento Page è definito nel file PageClassIDs.h e definisce in modo univoco il tipo della pagina personalizzata.

    Nell'esempio il tipo definito è Microsoft.SamplePage.LocationPage. Per la pagina personalizzata, sostituire quanto segue per evitare potenziali conflitti con altre pagine che potrebbero essere create in futuro:

  • Nome dell'organizzazione al posto di Microsoft.

  • Nome del progetto al posto di SamplePage.

  • Nome della pagina della procedura guidata personalizzata al posto di LocationPage.

Passaggio 2: La Procedura guidata UDI carica la DLL per la pagina Creazione guidata personalizzata

Quando la Procedura guidata UDI carica la DLL, chiama la funzione RegisterFactories , che deve essere implementata nel file .dll. Nell'esempio questa funzione viene implementata nel file dllmain.ccp. Ogni pagina della procedura guidata creata deve implementare la funzione RegisterFactories .

La funzione RegisterFactories viene usata per registrare la classe factory della pagina della procedura guidata con il Registro di sistema di class factory per la Procedura guidata UDI. Le class factory sono classi che possono creare un'istanza di un'altra classe. La funzione RegisterFactories crea una nuova istanza di una classe factory e passa tale classe al Registro di sistema della class factory per la Creazione guidata UDI, rendendo disponibile tale classe factory per la procedura guidata. La Procedura guidata UDI cerca una classe factory registrata con un ID corrispondente all'attributo Type dell'elemento Page per la pagina della procedura guidata personalizzata.

Nell'esempio l'ID viene definito come ID_Location nel file PageClassIds.h come Microsoft.SamplePage.LocationPage, che corrisponde all'attributo Type per l'elemento Page nel file Config.xml. ID_Location viene passato come parametro nella funzione RegisterFactories implementata nel file dllmain.ccp.

È possibile creare una funzione usando il modello di funzione Register_name per semplificare la creazione di una nuova istanza di factory e registrare l'istanza appena creata. Il valore del nome fornito usando il modello di funzione Register deve implementare l'interfaccia iClassFactory . La classe ClassFactoryImpl gestisce la maggior parte dei dettagli per l'implementazione di una class factory.

È anche possibile usare la funzione RegisterFactories per registrare tipi di attività e tipi di convalida. Per ulteriori informazioni, vedere gli argomenti seguenti:

Nota

L'esempio contiene e registra solo una pagina della procedura guidata personalizzata. L'esempio non include attività personalizzate o validator e pertanto non registra attività personalizzate o validator.

Passaggio 3: La procedura guidata UDI visualizza la pagina Creazione guidata personalizzata

La pagina della procedura guidata personalizzata nell'esempio è definita nel file LocationPage.cpp. Le pagine della procedura guidata derivano da classi di modelli che forniscono gran parte delle funzionalità di una pagina. Tutte le pagine della procedura guidata devono derivare dalla classe modello WizardPageImpl, che implementa l'interfaccia IWizardPage. Ogni pagina della procedura guidata può implementare altre classi modello facoltative e interfacce corrispondenti in base alle esigenze della pagina.

La classe modello WizardPageImpl include diverse interfacce utili che consentono di scrivere pagine personalizzate della procedura guidata. Implementare la classe modello WizardPageImpl come classe di base per la pagina della procedura guidata personalizzata.

Per un elenco degli elementi disponibili:

  • Classi modello per le pagine della procedura guidata, vedere Classi helper della pagina della procedura guidata

  • Interfacce per le classi di modelli di pagina della procedura guidata, vedere Interfacce pagina della procedura guidata

    La pagina della procedura guidata personalizzata nell'esempio deriva dalla classe modello WizardPageImpl e implementa l'interfaccia IWizardPage. Inoltre, la pagina della procedura guidata personalizzata implementa l'interfaccia IFieldCallback . Entrambi vengono implementati nel file LocationPage.cpp.

    La pagina della procedura guidata personalizzata di esempio esegue l'override dei metodi seguenti:

  • OnWindowCreated. Il metodo OnWindowCreated nella pagina della procedura guidata di esempio chiama i metodi seguenti:

    • AddField. Questo metodo mette in relazione il controllo casella IDC_COMBO_LOCATION nella risorsa IDD_LOCATION_PAGE con l'elemento Data denominato Location nel file di Config.xml.

      Oltre al metodo AddField , è possibile usare i metodi AddRadioGroup e AddToGroup per supportare altri controlli e comportamenti.

      Nota

      Assicurarsi di chiamare il metodo AddField, AddRadioGroup o AddToGroup prima di chiamare il metodo InitFields .

    • InitFields. Utilizzare questo metodo per inizializzare i campi (controlli) aggiunti al modulo. Il puntatore della pagina è un parametro. Nell'esempio viene passato il puntatore this , che fa riferimento alla pagina corrente.

      Nota

      Per supportare l'uso di questo puntatore, è necessario implementare l'interfaccia IFieldCallback oltre alle interfacce supportate dalla classe di modello WizardPageImpl .

      L'interfaccia IFieldCallback chiama il metodo SetFieldDefault , utilizzato per impostare i valori predefiniti per i controlli diversi dai controlli casella di testo e casella di controllo. Nell'esempio il metodo SetFieldDefault imposta l'indice iniziale del controllo casella combinata in base al valore predefinito specificato nell'elemento Default per l'elemento Field nel file di Config.xml.

      Il metodo OnWindowCreated configura il controller del modulo usando l'interfaccia IFormController. Per altre informazioni sulla configurazione del controller del modulo, vedere Configurazione del modulo.

  • InitLocations. Questo metodo popola la casella combinata dall'elenco dei percorsi nel file Config.xml. L'elemento Data e gli elementi DataItem figlio del file Confg.xml forniscono l'elenco dei valori possibili.

  • OnNextSelected. Questo metodo esegue le attività seguenti:

    • Aggiornamenti la variabile della sequenza di attività TSLocation con il valore selezionato nella casella combinata tramite il metodo SaveFields

    • Aggiunge informazioni che verranno visualizzate nella pagina Riepilogo tramite il metodo SaveFields

Passaggio 4: Il pulsante Successivo è selezionato nella pagina Creazione guidata personalizzata

Quando l'utente completa i campi nella pagina della procedura guidata personalizzata, seleziona Avanti, che chiama il metodo OnNextSelected . Il metodo OnNextSelected esegue tutte le attività necessarie prima di passare alla pagina successiva della procedura guidata, ad esempio la registrazione di eventuali modifiche alla configurazione apportate nella pagina della procedura guidata personalizzata.

Per la pagina della procedura guidata personalizzata di esempio, l'override per il metodo OnNextSelected viene implementato nel file LocationPage.ccp. Nella pagina della procedura guidata personalizzata di esempio del metodo OnNextSelected vengono chiamati i metodi seguenti:

  1. InitSection. Questo metodo inizializza l'intestazione (etichetta didascalia) per i dati di riepilogo visualizzati nella pagina Riepilogo. In genere, è possibile impostare questo valore usando la funzione DisplayName( ). I dati associati a questo didascalia vengono salvati tramite il metodo SaveFields.

  2. SaveFields. Questo metodo salva i valori dei campi nelle variabili della sequenza di attività e nei dati visualizzati nella pagina Riepilogo .

Esaminare la soluzione Visual Studio SampleEditor

Prima di iniziare a creare pagine personalizzate della procedura guidata e editor di pagine della procedura guidata, seguire questa procedura per preparare l'ambiente di sviluppo UDI:

Esaminare l'architettura di Designer guidata UDI

La procedura guidata UDI Designer è stata sviluppata usando WPF, Prism e Unity. Il Designer UDI viene usato per modificare il file di configurazione della Procedura guidata UDI (UDIWizard_Config.xml), letto dalla Procedura guidata UDI (OSDSetupWizard.exe) in fase di esecuzione. L'elemento Pages nel file di configurazione della Procedura guidata UDI contiene un elenco di pagine con un elemento Page separato per ogni pagina della procedura guidata.

Quando si modificano le impostazioni di configurazione per una pagina della procedura guidata, la procedura guidata UDI Designer carica l'editor di pagine personalizzato corrispondente al tipo di pagina della procedura guidata. Gli editor di pagine della procedura guidata personalizzata vengono sviluppati come controlli utente WPF. Le pagine dell'editor di pagine della procedura guidata personalizzata usano il modello di progettazione Model-View-ViewModel (MVVM) per WPF.

Il modello di progettazione MVVM consente di separare l'interfaccia utente (interfaccia utente; presentazione) dai dati presentati. I dati sono una facciata sull'elemento Page nel file di configurazione della Procedura guidata UDI (il file Config.xml nell'esempio), a cui si accede tramite la proprietà CurrentPage dell'interfaccia IDataService .

La procedura guidata UDI Designer usa DependencyAttribute per ottenere l'accesso alla classe DataService in base al framework di inserimento delle dipendenze in Unity. Per altre informazioni sul framework di inserimento delle dipendenze in Unity, vedere Inserire un po' di vita nelle applicazioni- Informazioni sul blocco di applicazioni Unity.

Esaminare i componenti configurabili di una pagina della procedura guidata UDI

Quando si crea la pagina della procedura guidata personalizzata, alcune impostazioni di configurazione possono essere impostate nel codice e non possono essere modificate dopo aver compilato la pagina. Tuttavia, per altre impostazioni di configurazione, sarà necessario consentire la modifica di tali impostazioni di configurazione tramite la procedura guidata UDI Designer.

In genere, le impostazioni di configurazione che si desidera configurare usando la procedura guidata UDI Designer vengono salvate nel file di configurazione della Procedura guidata UDI (il file Config.xml nell'esempio). Tuttavia, è anche possibile creare un file di configurazione separato, se necessario. Un esempio di utilizzo di un file di configurazione separato è il file UDIWizard_Config.xml.app, usato dall'attività Individuazione applicazione e dal tipo di pagina della procedura guidata ApplicationPage .

Di seguito è riportato un elenco delle impostazioni di configurazione tipiche che è possibile gestire usando la procedura guidata UDI Designer:

  • Campo. I campi consentono agli utenti di fornire input. I campi vengono visualizzati come elementi Field nel file di configurazione della Creazione guidata UDI (UDIWizard_Config.xml), che contiene le impostazioni di configurazione per ogni campo. L'editor di pagine della procedura guidata corrispondente deve fornire un metodo per modificare le impostazioni di configurazione del campo tramite FieldElementControl.

  • Proprietà. I setter consentono di creare proprietà per le entità nella pagina, ad esempio le pagine nell'elemento Page , i campi nell'elemento Field o i dati negli elementi Data o DataItem . È possibile configurare le proprietà negli elementi Setter . Aggiungere un elemento Setter separato per ogni proprietà da definire. È possibile modificare le proprietà usando SetterControl e configurare altri elementi Setter usando altri controlli.

  • Dati. I dati vengono usati per archiviare le informazioni per l'uso da parte della pagina della procedura guidata e di altri componenti. È possibile definire dati per pagine o campi usando gli elementi Data o DataItem . I dati possono essere definiti in una struttura flat o gerarchica tramite l'uso appropriato degli elementi Data o DataItem . Il Config.xml nell'esempio nell'SDK mostra come compilare strutture di dati flat.

    L'editor di pagine della procedura guidata personalizzato creato deve essere in grado di gestire queste impostazioni di configurazione.

Esaminare l'esempio EditorPage

L'esempio EditorPage viene usato per configurare le impostazioni di configurazione per la pagina della procedura guidata SamplePage nel file di configurazione della Procedura guidata UDI. Nell'esempio EditorPage sono disponibili i componenti primari seguenti:

  • Interfaccia utente per configurare le impostazioni della casella combinata Percorso

  • Interfaccia utente per aggiungere o modificare una posizione nell'elenco delle posizioni possibili, visualizzate nella casella combinata Percorso

  • Impostazioni di configurazione lette e salvate nel file di configurazione della Procedura guidata UDI

  • Codice di supporto per gli altri componenti

    Esaminare l'esempio EditorPage in Visual Studio seguendo questa procedura:

  1. Esaminare il modo in cui l'editor di pagine della procedura guidata SampleEditor viene caricato e inizializzato nella procedura guidata UDI Designer come descritto in Caricamento e inizializzazione dell'editor di pagine della Verifica guidata.

  2. Esaminare l'interfaccia utente usata per modificare la casella combinata Percorso nei file LocationPageEditor.xaml e LocationPageEditor.xaml.cs come descritto in Esaminare l'interfaccia utente usata per configurare la casella combinata percorso.

  3. Esaminare l'interfaccia utente usata per aggiungere o modificare i percorsi all'elenco nei file AddEditLocationView.xaml e AddEditLocationView.xaml.cs come descritto in Esaminare l'interfaccia utente usata per modificare l'elenco delle posizioni possibili.

  4. Esaminare il codice usato per gestire le informazioni di configurazione salvate nel file di configurazione della Procedura guidata UDI, come descritto in Esaminare il codice usato per gestire le informazioni di configurazione.

Caricamento e inizializzazione dell'editor di pagine della procedura guidata di revisione

Gli editor di pagine della procedura guidata personalizzata vengono caricati come richiesto dalla procedura guidata UDI Designer. La Procedura guidata UDI Designer i file di configurazione vengono caricati all'avvio della procedura guidata UDI Designer. La procedura guidata UDI Designer analizza la cartella install_folder\Bin\Config (dove install_folder è il nome della cartella in cui è installato MDT) per i file con estensione file .config.

Durante la configurazione dell'ambiente di sviluppo UDI, il file SamplePage.dll.confg è stato copiato nella cartella install_folder\Bin\Config. Quando si avvia la procedura guidata UDI Designer, viene trovato e caricato il file SamplePage.dll.confg.

La procedura guidata UDI Designer usa gli attributi seguenti dell'elemento Page nel file SamplePage.dll.confg per caricare e inizializzare l'esempio EditorPage:

  • DesignerAssembly. Questo attributo determina il nome della DLL da caricare. Questa DLL deve essere inserita nella stessa cartella del file UDIDesigner.exe, ovvero la cartella install_folder\Bin (dove install_folder è il nome della cartella in cui è installato MDT).

  • DesignerType. Questo attributo è il nome del tipo Microsoft .NET della classe che contiene il controllo utente WPF.

  • Tipo. Utilizzare questo attributo per configurare il tipo di pagina della pagina della procedura guidata personalizzata caricata dalla Procedura guidata UDI. La procedura guidata UDI Designer usa questo attributo per individuare l'elemento Page appropriato nel file di configurazione della Procedura guidata UDI.

  • DLL. Utilizzare questo attributo per configurare l'elemento DLL nel file di configurazione della Procedura guidata UDI, creato dalla procedura guidata UDI Designer.

  • Descrizione. Utilizzare questo attributo per fornire informazioni sull'editor di pagine della procedura guidata. Il valore di questo attributo viene visualizzato nella finestra di dialogo Aggiungi nuova pagina della procedura guidata UDI Designer, utilizzata per aggiungere la pagina della procedura guidata alla "Raccolta pagine".

  • DisplayName. Utilizzare questo attributo per specificare il nome della pagina della procedura guidata personalizzata visualizzata nella Designer della Procedura guidata UDI. Il valore di questo attributo viene visualizzato nella finestra di dialogo Aggiungi nuova pagina della procedura guidata UDI Designer, utilizzata per aggiungere la pagina della procedura guidata alla "Raccolta pagine".

    Nell'esempio il tipo della pagina della procedura guidata personalizzata SamplePage è Microsoft.SamplePage.LocationPage, salvato nel file Config.xml. Il file Config.xml si trova nella cartella local_folder\SDK\SamplePage\SamplePage in (dove local_folder è la cartella creata nel computer di sviluppo in precedenza nel processo di configurazione).

Esaminare l'interfaccia utente usata per configurare la casella combinata Percorso

Quando l'editor di pagine della procedura guidata viene caricato e inizializzato, l'editor di pagine della procedura guidata SampleEditor viene caricato quando viene modificata una pagina con un tipo di Microsoft.SamplePage.LocationPage . L'interfaccia utente per l'editor di pagine viene archiviata nel file LocationPageEditor.xaml.

Se si esamina l'interfaccia utente nella scheda Progettazione e il codice nella scheda XAML , è possibile visualizzare la relazione tra l'interfaccia utente grafica e gli elementi e gli attributi nel linguaggio XAML (Extensible Application Markup Language).

Ad esempio, se rivedi l'elemento Controls:FieldElementControl nel codice XAML puoi vedere in che modo è correlato al layout dell'interfaccia utente corrispondente. Usare l'elemento Controls:FieldElementControl per definire il controllo FieldElementControl .

I parametri binding nel file XAML associano i campi nell'editor di pagine di esempio con le informazioni nel file di configurazione della procedura guidata UDI. Ad esempio, il codice seguente collega la casella di testo Valore predefinito con l'elemento Default nel file di configurazione della procedura guidata UDI (Config.xml nell'esempio):

<TextBox Text="{Binding FieldData.DefaultValue,
 UpdateSourceTrigger=PropertyChanged,
 Mode=TwoWay}"/>

Per altre informazioni, vedere Procedura: Rendere disponibili i dati per l'associazione in XAML.

Usa l'elemento Views:CollectionTControl.ColumnCollectionView nel codice XAML per modificare l'elenco delle posizioni disponibili nella visualizzazione griglia. Usare il controllo CollectionTControl per visualizzare la visualizzazione griglia e associare la visualizzazione griglia all'elemento Data con il nome Location nel file di configurazione UDI.

Esaminare l'interfaccia utente usata per modificare l'elenco delle posizioni possibili

L'interfaccia utente per la modifica dell'elenco delle posizioni possibili è costituita da:

Esaminare i pulsanti di menu e barra multifunzione sensibili al contesto per la modifica dell'elenco delle posizioni

Quando si fa clic con il pulsante destro del mouse nella casella di riepilogo contenente l'elenco delle posizioni, viene visualizzato un menu sensibile al contesto. La barra multifunzione include pulsanti corrispondenti che consentono di eseguire le stesse attività. L'elemento di controllo Views:CollectionsTControl nel file LocationPageEditor.xaml definisce i metodi chiamati in base all'azione eseguita e alle proprietà impostate come segue:

  • SelectedItem. Questa proprietà associata a dati viene attivata quando l'utente seleziona un elemento dall'elenco. Questa proprietà è associata alla proprietà CurrentLocation nel modello di visualizzazione, che si trova nel file LocationPageEditorViewModel.cs e viene utilizzata dal controllo CollectionTControl per passare l'elemento selezionato quando si modifica o si rimuove un elemento esistente.

  • AddItemAction. Questa azione viene eseguita quando l'utente seleziona l'opzione Aggiungi elemento dal menu sensibile al contesto o dai pulsanti corrispondenti sulla barra multifunzione. Nel modello di visualizzazione è presente un data binding a una proprietà che restituisce l'oggetto AddLocationAction . Questo oggetto è il metodo AddLocationCallback , che si trova nel file LocationPageEditorViewModel.cs, e visualizza la finestra di dialogo nel file AddEditLocationView.xaml.

  • EditItemAction. Questa azione viene eseguita quando l'utente seleziona l'opzione Modifica elemento dal menu sensibile al contesto. Nel modello di visualizzazione è presente un data binding a una proprietà che restituisce l'oggetto EditLocationAction . Questo oggetto è il metodo EditLocationCallback , che si trova nel file LocationPageEditorViewModel.cs, e visualizza la finestra di dialogo nel file AddEditLocationView.xaml.

  • RemoveAction. Questa azione viene eseguita quando l'utente seleziona l'opzione Rimuovi elemento dal menu sensibile al contesto. Nel modello di visualizzazione è presente un data binding a una proprietà che restituisce l'oggetto RemoveAction . Questo oggetto è il metodo EditLocationCallback , che si trova nel file LocationPageEditorViewModel.cs, e mostra un messaggio che conferma l'eliminazione del percorso.

Esaminare la finestra di dialogo per l'aggiunta o la modifica di percorsi

Se si aggiunge un nuovo percorso all'elenco di posizioni o si modifica una posizione esistente, viene visualizzato un messaggio nel file AddEditLocationView.xaml. Il messaggio viene visualizzato usando il metodo della finestra ShowDialogWindow nel file LocationPageEditorViewModel.cs.

L'interfaccia utente nel file AddEditLocationView.xaml è costituita da:

  • Una cornice di dialogo denominata DialogFrame, che include gli elementi seguenti:

    • Titolo configurato usando l'attributo DialogTitle della cornice di dialogo

    • Pulsante OK , che imposta lo stato restituito come per la proprietà Approved su True (lo stato restituito viene selezionato nel metodo AddLocationCallback nel file LocationPageEditorViewModel.cs per determinare se l'utente ha selezionato OK).

    • Pulsante Annulla , che imposta lo stato restituito come per la proprietà Approvedsu False .The return status is checked in the AddLocationCallback method in the LocationPageEditorViewModel.cs file to determine whether the user selected Cancel.)

  • Elemento WPF che contiene:

    • Etichetta configurata usando l'attributo Content

    • Casella di testo associata all'elemento Data con il nome Location nel file di configurazione UDI (il file di Config.xml nell'esempio)

Esaminare il codice usato per gestire le informazioni di configurazione

Le informazioni di configurazione per la pagina della procedura guidata personalizzata vengono archiviate nel file di configurazione della Procedura guidata UDI, ovvero:

  • Config.xml file nell'esempio fornito con UDI SDK (questo file contiene solo le impostazioni di configurazione per l'esempio).

  • UDIWizard_Config.xml file fornito con MDT, archiviato nella cartella installation_folder\Templates\Distribution\Scripts (dove installation_folder è la cartella in cui è stato installato MDT); questo file contiene le impostazioni di configurazione per tutte le pagine e le fasi predefinite della procedura guidata

    Nell'esempio SampleEditor la routine Locations consente di gestire le informazioni di configurazione e si trova nel file LocationPageEditorViewModel.cs. La routine Locations restituisce un elenco delle posizioni dal file di configurazione della Procedura guidata UDI. In particolare, l'elenco restituito contiene un elemento per ogni elemento DataItem nel file di configurazione della Procedura guidata UDI.

Creazione di pagine della procedura guidata UDI personalizzate

Il processo generale per la creazione di pagine della procedura guidata UDI personalizzate è il seguente:

  1. Creare una copia della soluzione SamplePage come punto di partenza.

  2. Inserire i controlli (campi) desiderati nel modulo.

  3. Scrivere codice per eseguire le attività appropriate quando viene caricata la pagina della procedura guidata (override per il metodo OnWindowCreated ), inclusi i passaggi seguenti:

    1. Inizializzare il modulo.

    2. Leggere le variabili di memoria, le variabili della sequenza di attività, le variabili di ambiente o le informazioni sui file XML, ad esempio le proprietà Setter .

  4. Scrivere codice per eseguire le attività appropriate quando viene visualizzata la pagina (override per il metodo OnWindowShown ), inclusi i passaggi seguenti:

    1. Abilitare o disabilitare i controlli in base alle informazioni lette quando la pagina viene caricata nel passaggio 3.

    2. Aggiornare i controlli in base alle informazioni lette al momento del caricamento della pagina nel passaggio 3, ad esempio il popolamento dei controlli in base alle informazioni lette.

  5. Scrivere codice per eseguire le attività appropriate mentre l'utente interagisce con la pagina della procedura guidata.

  6. Scrivere codice per eseguire le attività appropriate quando l'utente seleziona Avanti nella Procedura guidata UDI (override per il metodo OnNextSelected ), inclusi i passaggi seguenti:

    1. Aggiornare le variabili di memoria, le variabili della sequenza di attività, le variabili di ambiente o le informazioni sui file XML.

    2. Aggiornare le informazioni della pagina di riepilogo (se non vengono eseguite dai campi nella pagina).

  7. Compilare la soluzione.

    Assicurarsi che la versione della DLL creata sia la stessa piattaforma del processore dell'installazione di MDT, in particolare la piattaforma del processore per Windows Preinstallation Environment (Windows PE). La Procedura guidata UDI può essere eseguita in:

    • Sistema operativo esistente nel computer di destinazione. È possibile eseguire versioni a 32 bit della pagina della procedura guidata in sistemi operativi Windows a 32 bit o a 64 bit. Tuttavia, è possibile eseguire solo versioni a 64 bit della pagina della procedura guidata nei sistemi operativi Windows a 64 bit.

    • Windows PE nel computer di destinazione. Windows PE non supporta l'esecuzione di applicazioni a 32 bit in una versione a 64 bit di Windows PE. È quindi necessario avere creato una versione per la pagina della procedura guidata per ogni architettura del processore di Windows PE che si prevede di usare.

  8. Copiare la DLL per la pagina della procedura guidata personalizzata in installation_folder\Templates\Distribution\Tools\ cartella della piattaforma (dove installation_folder è la cartella in cui È stato installato MDT e la piattaforma è x86 per la versione a 32 bit o x64 è per la versione a 64 bit).

  9. Completare i passaggi per la creazione dell'editor di pagine personalizzato.

Creazione di editor di pagine della creazione guidata personalizzata

Il processo generale per la creazione di editor di pagine della procedura guidata UDI personalizzati è il seguente:

  1. Creare una copia della soluzione SampleEditor come punto di partenza.

  2. Creare l'interfaccia utente dell'editor di pagine primaria in un file con estensione xaml.

  3. Aggiungere istanze del controllo FieldElementControl come richiesto dalla pagina della procedura guidata da configurare (se necessario).

  4. Aggiungere istanze del controllo SetterControl come richiesto dalla pagina della procedura guidata da configurare (se necessario).

  5. Aggiungere istanze del controllo CollectionTControl come richiesto dalla pagina della procedura guidata da configurare (se necessario).

  6. Aggiungere l'interfaccia IDataService .

  7. Scrivere il codice appropriato per aggiornare il file di configurazione della Procedura guidata UDI in base alle impostazioni di configurazione da configurare usando l'editor di pagine della procedura guidata personalizzata.

  8. Creare finestre di dialogo figlio in un file con estensione xaml e chiamarle dall'editor di pagine primarie usando l'interfaccia IMessageBoxService come richiesto dalla pagina della procedura guidata da configurare.

  9. Aggiungere le interfacce appropriate alla procedura guidata UDI Designer barra multifunzione in base ai requisiti della pagina della procedura guidata da configurare.

  10. Compilare la soluzione.

    Nota

    Assicurarsi che la versione della DLL creata sia la stessa piattaforma del processore dell'installazione di MDT. Ad esempio, se si installa la versione a 64 bit di MDT, compilare una versione a 64 bit dell'editor di pagine personalizzato.

  11. Creare una procedura guidata UDI Designer file di configurazione per caricare le DLL necessarie e eseguire il mapping dell'editor di pagine della procedura guidata con la pagina della procedura guidata corrispondente (il file SamplePage.dll.config nell'esempio).

    Per altre informazioni sugli elementi necessari per eseguire il mapping tra la pagina della procedura guidata e l'editor di pagine della procedura guidata, vedere l'elemento DesignerMappings, gli elementi figlio e gli attributi corrispondenti.

  12. Copiare la Procedura guidata UDI Designer file di configurazione creato nel passaggio precedente nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui è stata installata la versione di MDT).

  13. Copiare la DLL per l'editor di pagine della procedura guidata personalizzata nella cartella installation_folder\Bin (dove installation_folder è la cartella in cui è stato installato MDT).

Creazione di attività UDI personalizzate

Le attività UDI sono DLL scritte in C++ che implementano l'interfaccia ITask. È possibile registrare la DLL con la raccolta attività Designer creazione guidata UDI Designer file di configurazione (file .config) e inserirla nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui è stato installato MDT).

Nota

È possibile creare una DLL contenente pagine, attività e convalidatori della procedura guidata all'interno dello stesso file .dll. È anche possibile creare una singola procedura guidata UDI Designer file di configurazione (.config) contenente le impostazioni di configurazione per le pagine della procedura guidata, le attività e i validator nella DLL.

Per creare attività UDI personalizzate

  1. Scrivere codice che implementa l'interfaccia ITask e i metodi seguenti:

    • Init. Questo metodo viene chiamato per inizializzare l'attività.

    • Eseguire. Questo metodo viene chiamato per eseguire l'attività.

  2. Scrivere codice che registra la factory della classe di attività personalizzata con il Registro di sistema della factory.

  3. Compilare la soluzione per l'attività personalizzata.

    Nota

    Assicurarsi che la versione della DLL creata sia la stessa piattaforma del processore dell'installazione di MDT. Ad esempio, se si installa la versione a 64 bit di MDT, compilare una versione a 64 bit dell'attività UDI personalizzata.

  4. Creare un elemento Task nell'elemento TaskLibrary nella Procedura guidata UDI Designer file di configurazione simile all'estratto seguente:

    <Task DLL="OSDRefreshWizard.dll" Description="Discovers supported applications for install." Type="Microsoft.OSDRefresh.AppDiscoveryTask" Name="Application Discovery">
       <TaskItem Type="Setter" Name="Status Bitmap">
          <Param Name="BitmapFilename"/>
       </TaskItem>
       <TaskItem Type="Setter" Name="Log File">
          <Param Name="log"/>
       </TaskItem>
       <TaskItem Type="Setter" Name="Write Configuration File">
          <Param Name="writecfg"/>
       </TaskItem>
       <TaskItem Type="Setter" Name="Read Configuration File">
          <Param Name="readcfg"/>
       </TaskItem>
    </Task>
    

    Nota

    Tutti gli elementi Task devono includere il parametro BitmapFilename . Specificare tutti gli altri parametri come richiesto dall'attività. Ad esempio, nell'estratto precedente, il parametro di log viene usato per specificare un parametro per il percorso di un file di log.

  5. Copiare la procedura guidata UDI Designer file di configurazione creato nel passaggio precedente nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui è stato installato MDT).

  6. Copiare la DLL per l'attività personalizzata nella cartella installation_folder\Templates\Distribution\Tools\ platform (dove installation_folder è la cartella in cui è stato installato MDT e la piattaforma è x86 per la versione a 32 bit o x64 è per la versione a 64 bit).

Creazione di Validator UDI personalizzati

I validator UDI sono DLL scritte in C++ che implementano l'interfaccia IValidator . Per registrare la DLL con la procedura guidata UDI Designer libreria di convalida, creare un file di configurazione Designer procedura guidata UDI (.config file) e inserirlo nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui è stato installato MDT).

Per creare validator UDI personalizzati

  1. Scrivere codice che crea una sottoclasse della classe BaseValidator e implementa i metodi seguenti:

    • Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Il controller del modulo chiama il membro Init per inizializzare il validator. Questo metodo deve chiamare il metodo Init per la classe BaseValidator . Legge in genere tutte le proprietà impostate per il validator dal file di configurazione della Procedura guidata UDI. Ad esempio, il validator InvalidCharactersValidator recupera il valore della proprietà InvalidChars usando questo metodo.

    • IsValid. Il controller del modulo chiama questo metodo per verificare se il controllo contiene testo valido. Di seguito è riportato un esempio del metodo IsValid per un validator che convalida che il campo non sia vuoto:

      BOOL IsValid(LPBSTR pMessage)
      {
          __super::IsValid(pMessage);
      
          _bstr_t text;
          m_pText->GetText(text.GetAddress());
          return (text.length() > 0);
      }
      
    • Init(IControl *pControl, messaggio LPCTSTR). Il controller del modulo chiama questo membro per ogni sequenza di tasti e altri eventi in modo che il validator possa convalidare il contenuto del controllo e i messaggi aggiornati nella parte inferiore della pagina della procedura guidata (o cancellarli).

      In genere, questi sono gli unici metodi di cui è necessario eseguire l'override. Tuttavia, a seconda del validator, potrebbe essere necessario eseguire l'override di altri metodi nella sottoclasse della classe BaseValidator creata. Per altre informazioni su questi altri metodi, vedere la classe BaseValidator .

  2. Scrivere codice che registra la classe di attività personalizzata con la factory del Registro di sistema.

  3. Compilare la soluzione per l'attività personalizzata.

    Nota

    Assicurarsi che la versione della DLL creata sia la stessa piattaforma del processore dell'installazione di MDT. Ad esempio, se si installa la versione a 64 bit di MDT, compilare una versione a 64 bit dell'attività UDI personalizzata.

  4. Creare un elemento Validator nell'elemento ValidatorLibrary nella Procedura guidata UDI Designer file di configurazione simile all'estratto seguente:

    <Validator
    <Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name="NamedPattern">
       <Param Description="Enter the message you want displayed when the text in this field doesn't match the pattern:" Name="Message" DisplayName="Message"/>
       <Param Description="The name of a pre-defined regular expression pattern. Must be Username, ComputerName, or Workgroup" Name="NamedPattern" DisplayName="Named Pattern"/>
    </Validator>
    

    Avviso

    Tutti gli elementi Validator devono includere il parametro Message . Specificare tutti gli altri parametri come richiesto dal validator. Ad esempio, nell'estratto precedente, il parametro NamedPattern viene usato per specificare un parametro per il nome di un modello di espressione regolare predefinito.

  5. Copiare la procedura guidata UDI Designer file di configurazione creato nel passaggio precedente nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui è stato installato MDT).

  6. Copiare la DLL per l'attività personalizzata nella cartella installation_folder\Templates\Distribution\Tools\ platform (dove installation_folder è la cartella in cui è stato installato MDT e la piattaforma è x86 per la versione a 32 bit o x64 è per la versione a 64 bit).

Informazioni di riferimento sulla procedura guidata UDI

Componenti della pagina della procedura guidata

È possibile usare uno qualsiasi dei diversi componenti predefiniti per compilare le pagine personalizzate.

Creazione di istanze del componente

La Procedura guidata UDI usa le class factory per creare automaticamente nuove istanze di oggetti. Queste factory vengono registrate con un registro factory, usando una stringa come chiave della factory. Ad esempio, il componente WmiRepository è identificato dalla stringa "Microsoft.Wizard.WmiRepository", disponibile nel file di intestazione IWmiRepository come ID_WmiRepository.

Supponendo di aver scritto la pagina come sottoclasse di WizardPageImpl, è possibile creare una nuova istanza di una wmiRepoistory come segue:

PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);

La funzione CreateInstance è una funzione modello indipendente dai tipi per la creazione di nuove istanze di componenti. PWmiRepository è un puntatore intelligente, quindi gestisce automaticamente il conteggio dei riferimenti.

Componenti creabili

È disponibile un set di componenti che è possibile registrare con il Registro di sistema. Il primo set di componenti viene sempre registrato, perché il file eseguibile principale della Procedura guidata UDI lo fornisce. Gli altri due set di componenti vengono forniti in DLL "facoltative". Affinché questi componenti siano disponibili, la DLL deve essere elencata nella sezione DLL del file XML .config. Il codice non deve conoscere quale eseguibile contiene un componente specifico.

L'elenco degli ID componente per i componenti (il nome del componente è lo stesso dell'ID ma senza il ID_ iniziale) registrato nel Registro di sistema factory (definito in OSDSetupWizard) è illustrato nella tabella 3.

Tabella 3. ID componente

ID Descrizione
ID_ACPowerTask (ITask, IWizardComponent) Un'attività preliminare che garantisce che il computer non sia in esecuzione a batteria da solo
ID_AppDiscoveryTask (ITask, IWizardComponent) Un'attività specializzata per individuare gli elementi software installati nel computer
ID_BackgroundTask (IBackgroundTask, IWizardComponent) Può essere usato per eseguire un'attività in un altro thread
ID_CopyFilesTask (ITask, IWizardComponent) Attività per copiare uno o più file
ID_FormController (IFormController) Non sarà più necessario creare un'istanza manualmente, perché la pagina riceve la propria istanza
ID_InvalidCharactersValidator (IValidator) Garantisce che nessun campo di testo contenga caratteri da un elenco fornito al validator
ID_Logger (ILogger) Non sarà più necessario creare un'istanza manualmente, perché la pagina riceve un puntatore all'istanza condivisa
ID_NonEmptyValidator (IValidator) Un validator che garantisce che nessun campo sia vuoto
ID_PasswordValidator (IValidator) Un validator che garantisce che due campi di testo non abbiano lo stesso contenuto
ID_Regex (IRegEx) Valuta le espressioni regolari, cercando corrispondenze
ID_RegExValidator (IValidator) Validator che viene convalidato in base a un'espressione regolare o a un modello noto
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) Fornisce un modo semplice per inviare proprietà alle attività senza usare XML
ID_ShellExecuteTask (ITask, IWizardComponent) Eseguire un programma esterno
ID_SummaryBag (ISummaryBag) Disponibile indirettamente dalla pagina tramite il metodo Form
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) Gestisce l'esecuzione di un set di attività e l'interfaccia utente
ID_WmiRepository (IWmiRepository, IWizardComponent) Consente di eseguire query di Strumentazione gestione Windows (WMI)
ID_IXmlDocument (IXmlDocument) Fornisce una facciata per la lettura e la scrittura di documenti XML

I OSDRefreshWizard.dll definiti, le pagine condivise e altri componenti di controllo sono visualizzati nella tabella 4 e nella tabella 5.

Tabella 4. Controlli directory

ID Descrizione
ID_Directory (IDirectory) Facciata per ottenere informazioni sulla directory dal file system

Tabella 5. Definito SharedPages.dll

ID Descrizione
ID_ADHelper (IADHelper) Fornisce una facciata per un set limitato di funzionalità in Active Directory® Domain Services (AD DS)
ID_CpuInfo (ICpuInfo) Determina se la CPU è a 32 o 64 bit
ID_DomainJoinValidator (IDomainJoinValidator) Dispone di alcuni metodi per verificare se un set di credenziali è autorizzato a partecipare a un dominio
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Usa WMI per ottenere un elenco di unità nel computer
ID_WiredNetworkTask (ITask) Attività che verifica se si è connessi alla rete con una scheda di rete cablata (anziché wireless)

Componenti di controllo

Si interagisce con i controlli nella pagina tramite la funzione modello GetControlWrapper , che consente l'accesso a uno dei tipi di componenti elencati nella tabella 6.

Tabella 6. Componenti

Tipi di controllo finestra di dialogo Descrizione
CONTROL_CHECK_BOX (ICheckBox) Facciata per l'uso dei controlli casella di controllo
CONTROL_COMBO_BOX (IComboBox) Facciata per i controlli casella combinata
CONTROL_GENERIC (IControl) Consente di usare la maggior parte dei tipi di controlli per controllare l'abilitazione e lo stato visibile
CONTROL_LIST_VIEW (IListView) Facciata che fornisce l'accesso alle funzionalità di un controllo visualizzazione elenco
CONTROL_PROGRESS_BAR (IProgressBar) Facciata per lavorare con la posizione di un controllo barra di stato
CONTROL_RADIO_BUTTON (IRadioButton) Facciata per l'uso dei controlli dei pulsanti di opzione
CONTROL_STATIC_TEXT (IStaticText) Facciata che fornisce l'autorizzazione di lettura/scrittura per il testo di un controllo, ad esempio un'etichetta o una casella di testo
CONTROL_TREE_VIEW (ItreeView) Facciata per l'uso di un controllo visualizzazione albero

Componente elenco immagini

Questo componente è una facciata per un controllo ImageList nella pagina. Si crea un elenco di immagini tramite l'interfaccia IListView o ITreeView .

Componente FormController

La procedura guidata crea automaticamente questo componente e lo passa alla pagina. È possibile accedervi dalla pagina usando il metodo Form , implementato dalla classe di base WizardPageImpl .

Componente InvalidCharacterValidator

Si tratta di un tipo di validator che è possibile includere in una pagina. L'ID è ID_InvalidCharactersValidator (definito in IValidator.h), che ha il valore di testo "Microsoft.Wizard.Validation.InvalidChars".

Questo validator cerca una singola proprietà (un elemento Setter nel file .config) denominata InvalidChars, ovvero un elenco di caratteri non consentiti. Controlla i caratteri in una casella di testo; se il testo contiene caratteri di questo elenco, il componente segnala un errore.

Componente NonEmptyValidator

Si tratta di un tipo di validator che è possibile includere in una pagina. L'ID è ID_NonEmptyValidator (definito in IValidator.h), il cui valore di testo è "Microsoft.Wizard.Validation.NonEmpty".

Questo validator segnala un errore se la casella di testo (o qualsiasi altro controllo che supporta IStaticText) ha un valore stringa vuoto.

Componente PasswordValidator

Si tratta di un tipo di validator che è possibile includere in una pagina. L'ID è ID_PasswordValidator (definito in IValidator.h), il cui valore di testo è "Microsoft.Wizard.Validation.Password".

Questo validator funziona con due controlli di testo diversi (controlli che supportano IStaticText) e segnala un errore se non contengono gli stessi valori. In altre parole, ha esito negativo se le caselle di testo Password e Conferma password non corrispondono.

Poiché questo validator richiede due controlli, è necessaria una maggiore configurazione rispetto ad altri validator. L'installazione potrebbe essere simile alla seguente:

Form()->AddToGroup(IDC_EDIT_PASSWORD, IDC_EDIT_PASSWORD2);
PValidator pValidator;
Form()->AddValidator(IDC_EDIT_PASSWORD, ID_PasswordValidator, pMessage, &pValidator);
PStaticText pPassword2;
GetControlWrapper(View(), IDC_EDIT_PASSWORD2, CONTROL_STATIC_TEXT, &pPassword2);
pValidator->SetProperty(0, pPassword2);

Prima di tutto, si definisce il controllo Conferma password come "figlio" del controllo Password . In questo modo, se il controller del modulo disabilita il controllo Password , disabiliterà anche il controllo Conferma password . Aggiungere quindi un validator della password al modulo. Infine, specificare il validator della password con l'interfaccia per il controllo Conferma password .

A causa del requisito per due controlli, è necessario usare il codice per configurare questo validator anziché il file XML .config.

Componente RegExValidator

Si tratta di un tipo di validator che è possibile includere in una pagina. L'ID è ID_RegExValidator (definito in IValidator.h), il cui valore di testo è "Microsoft.Wizard.Validation.RegEx".

Questo validator confronta il contenuto di un controllo di testo (che supporta IStaticText) con un'espressione regolare e ha esito negativo se il testo non corrisponde all'espressione regolare.

In alternativa, è possibile usare questo validator con un modello denominato predefinito. Per utilizzare un'espressione regolare, il codice XML deve contenere una proprietà setter denominata Pattern. Se invece si vuole usare un modello denominato, usare un setter denominato NamedPattern impostato su uno dei valori della tabella 7.

Tabella 7. Setter pattern denominati

Criterio Descrizione
Username Verifica che il testo sia nel formato dominio\utente o user@domain
Nomecomputer Il nome deve avere una lunghezza compresa tra 1 e 15 caratteri e non può includere un set di caratteri (ad esempio : e ?)
Workgroup Il nome deve avere una lunghezza compresa tra 1 e 15 caratteri e non può contenere un set di caratteri (ad esempio =, +e ?)

Componente FactoryRegistry

Questo componente tiene traccia di tutte le class factory e i servizi. Implementa l'interfaccia IFactoryRegistry ed è disponibile indirettamente tramite il metodo Container della pagina. Inoltre, il Registro di sistema carica le DLL di estensione. Dopo aver caricato una DLL, il Registro di sistema cerca una funzione esportata denominata RegisterFactories. È necessario implementare questa funzione e registrare le class factory per le pagine, le attività e i validator (e per qualsiasi altra class factory da registrare). Di seguito è riportato un esempio del progetto di esempio:

extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)
{
Register<LocationPageFactory>(ID_LocationPage, factories);
}

Componente Logger

Questo componente è disponibile per la pagina tramite il metodo Logger (implementato da WizardPageImpl). Questo metodo consente di scrivere voci nel file di log. Il contenuto del file di log è utile per la diagnosi dei problemi che gli utenti potrebbero avere durante l'esecuzione della Procedura guidata UDI.

Componente PropertyBag

Il contenitore delle proprietà è un contenitore per le variabili di memoria. È disponibile dalla pagina usando Container()->Properties(). Le variabili di memoria sono utili per passare dati temporanei tra pagine diverse.

Componenti TSVariableBag e TSRepository

Il componente TSVariableBag consente di leggere e scrivere variabili della sequenza di attività. Mantiene i valori in memoria fino a quando l'utente non seleziona Fine (per impostazione predefinita). È possibile accedere al contenitore TSVariable tramite il metodo TSVariables della pagina (implementato dalla classe di base WizardPageImpl ). Questi componenti registrano tutte le letture e le scritture delle variabili della sequenza di attività.

Componente WmiRepository

Questo componente fornisce una facciata per l'uso di query WMI. È possibile chiamare la funzione helper CreateInstance con ID_WmiRepository per ottenere un'istanza di questo componente, che supporta l'interfaccia IWmiRepository . Questo componente restituisce i record dei risultati tramite l'interfaccia IWmiIterator .

Classi helper della pagina della procedura guidata

È possibile creare pagine della procedura guidata UDI personalizzate usando le classi helper predefinite fornite con UDI SDK. Nella tabella 8 sono elencate le classi helper che è possibile usare per creare pagine personalizzate della procedura guidata.

Tabella 8. Classi helper

Classe helper Descrizione
Classe ClassFactoryImpl Si tratta di una classe di base utile per la creazione di una class factory che è quindi possibile registrare nel Registro di sistema della factory.
Classe modello di interfaccia Usare questa classe modello quando si vuole compilare un componente che implementa più di un'interfaccia.
Classe helper di percorso Questa classe fornisce operazioni comuni di file/directory.
Classe modello puntatore Questa classe fornisce il conteggio dei riferimenti per la gestione della durata nei componenti COM. È importante rilasciare le interfacce al termine. Questa classe modello gestisce automaticamente la durata.
Classe PUnknown Questa classe è un puntatore intelligente specifico per l'interfaccia IUnknown. Per tutte le altre interfacce, usare la classe modello Pointer.
Classe helper StringUtil Questa classe fornisce metodi helper che semplificano l'uso delle stringhe.
Classe modello SubInterface Questa classe di base semplifica l'implementazione di un componente che supporta un'interfaccia che eredita da un'altra interfaccia.
Classe modello UnknownImpl Questa classe gestisce la maggior parte dei dettagli della creazione di un componente COM.
Classe modello WizardComponent Questa classe di base viene usata per la creazione di componenti che richiedono l'accesso ai servizi della procedura guidata, ad esempio la creazione e la registrazione dei componenti.
Classe modello WizardPageImpl Questa classe di base deve essere usata come classe di base per tutte le pagine della procedura guidata personalizzata

Classe ClassFactoryImpl

Si tratta di una classe di base utile per la creazione di una class factory che è quindi possibile registrare nel Registro di sistema della factory.

Di seguito è riportato un estratto del file LocationPage.h nel progetto di esempio per definire la classe ClassFactoryImpl .

#pragma once

#include "ClassFactoryImpl.h"

class LocationPageFactory :public ClassFactoryImpl
{
protected:
    IUnknown *CreateNewInstance();
};

Di seguito è riportato un estratto del file LocationPage.cpp nella pagina della procedura guidata di esempio usata per definire la class factory per la pagina.

IUnknown *LocationPageFactory::CreateNewInstance()
{
    return static_cast<IWizardPage *>(new LocationPage);
}

Classe modello di interfaccia

Usare questa classe modello quando si vuole compilare un componente che implementa più di un'interfaccia, ad esempio:

classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>

Questo codice crea una catena di classi di base che supporta sia IFieldCalback che le interfacce supportate da WizardPageImpl (che si verifica essere IWizardPage).

Classe helper di percorso

Questa classe fornisce operazioni comuni di file/directory:

static inline std::wstring GetModulePath(HINSTANCE hModule)

Restituisce anche il percorso completo del file .exe o .dll con l'handle di istanza fornito al metodo:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)

La classe restituisce il percorso completo e il nome del file del .exe e .dll file con l'handle di istanza specificato per questo metodo:

static inline std::wstring GetDirectoryName(LPCWSTR fullName)

. . . o solo il percorso durante la rimozione del nome del file:

static inline std::wstring GetFileName(LPCWSTR fullName)

Dato un percorso con un nome file, la classe helper path restituisce solo il nome file:

static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)

Infine, la classe restituisce una nuova stringa che rappresenta il percorso combinato e il nome file (o un altro percorso).

Classe modello puntatore

Questa classe è definita in Pointer.h. Poiché i componenti COM usano il conteggio dei riferimenti per la gestione della durata, è importante rilasciare sempre le interfacce al termine. Microsoft fornisce una classe modello che gestisce automaticamente la durata. Ad esempio, se si desidera un puntatore intelligente per un'interfaccia XML, è possibile scrivere un elemento simile al seguente:

Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);

La prima riga definisce il puntatore intelligente. La seconda riga mostra il recupero di un puntatore intelligente tramite un'altra chiamata. L'operatore & rilascia sempre un'interfaccia esistente se ne contiene una e restituisce l'indirizzo per il puntatore interno. Dopo aver recuperato un puntatore come questo, l'istanza del puntatore chiama Release quando la variabile esce dall'ambito. Microsoft consiglia di usare puntatori intelligenti invece di chiamare manualmente AddRef e Release .

Inoltre, la classe puntatore intelligente Pointer chiama QueryInterface per recuperare automaticamente altre interfacce. Ad esempio, quando il Registro di sistema factory crea una nuova istanza di un componente, ha codice simile al seguente:

PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
    pComp->SetContainer(m_pContainer);

La prima riga chiama QueryInterface dietro le quinte per richiedere l'interfaccia IWizardComponent . Il puntatore intelligente risultante sarà uguale a nullptr se il componente non supporta tale interfaccia.

Classe PUnknown

Questa classe è un puntatore intelligente specifico per l'interfaccia IUnknown . Per tutte le altre interfacce, usare la classe modello Pointer .

Classe helper StringUtil

Questa classe è definita in Utilities.h e fornisce metodi helper che semplificano l'uso delle stringhe:

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)

Questo metodo confronta due stringhe ignorando la distinzione tra maiuscole e minuscole (vedere la tabella 9).

Tabella 9. Classe helper StringUtil

Restituisce Descrizione
0 Le stringhe corrispondono, ignorando il caso
<0 Primo < secondo
>0 Primo > secondo

Ecco un esempio:

static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)

Questi metodi sono un po'simili ai metodi di formato Microsoft .NET, nel senso che i parametri sono sotto forma di {0}. Tuttavia, non eseguono alcuna formattazione dell'input, ma solo la sostituzione:

static inline std::wstring Printf(std::wstring format, I val)
static inline std::wstring Printf(std::wstring format, I val1, J val2)
static inline std::wstring Printf(std::wstring format, I val1, J val2, K val3)
static inline std::wstring Printf(std::wstring format, I val1, J val2, K val3, L val4)

Si tratta di wrapper intorno a StringCchPrintf che restituiscono un wstring in modo da non dover allocare memoria per stringhe o buffer manualmente.

Classe modello SubInterface

Questa classe di base semplifica l'implementazione di un componente che supporta un'interfaccia che eredita da un'altra interfaccia. Ad esempio, l'interfaccia ICheckBox eredita da IControl. Ecco come viene usata questa classe per definire CheckBoxWrapper:

classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >

L'interfaccia di base è il primo parametro, mentre l'interfaccia derivata è il secondo parametro.

Classe modello UnknownImpl

Questa classe è definita in UnknownImpl.h e gestisce la maggior parte dei dettagli relativi alla creazione di un componente COM. Ecco un esempio di come usare questa classe di base:

classDirectory :public UnknownImpl<IDirectory>

Questo codice definisce una classe che supporta l'interfaccia IDirectory .

Classe modello WizardComponent

Questa classe è definita in IWizardComponent.h ed è una classe di base utile per la creazione di componenti che richiedono l'accesso ai servizi della procedura guidata, ad esempio la creazione e la registrazione dei componenti.

Ad esempio, ecco come viene definito il componente CopyFilesTask :

classCopyFilesTask :public WizardComponent<ITask>
{
    ...

Il parametro per questa classe modello è l'interfaccia "main" che si vuole usare per il componente, che nel caso delle attività è ITask. L'uso di WizardComponent significa che il componente supporta sia l'interfaccia fornita dall'utente (ITask in questo esempio) che IWizardComponent.

Ogni volta che si usa il Registro di sistema di class factory per creare un nuovo componente, il Registro di sistema chiama il metodo IWizardComponent-SetContainer> del componente per fornire al componente l'accesso ai servizi della procedura guidata.

Classe modello WizardPageImpl

Usare questa classe come classe di base per le pagine personalizzate, ad esempio:

class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>

Il parametro è l'ID risorsa per il modello di finestra di dialogo.

Interfacce pagina procedura guidata

La Procedura guidata UDI usa le interfacce per accedere ai diversi controlli della pagina. All'interno della pagina si usa la funzione GetControlWrapper per recuperare un wrapper di controllo. Ecco un esempio:

PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);

In questo caso , PStaticText è un puntatore intelligente all'interfaccia IStaticText . I puntatori intelligenti chiamano automaticamente il metodo COM Release() quando escono dall'ambito o si passa l'indirizzo di una variabile (ad esempio&pFormat) a un metodo.

Interfaccia IADHelper

__interfaceIADHelper : IUnknown
{
    HRESULT Init(ILogger *pLogger);
    HRESULT ValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain);
    HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain);
};

HRESULT Init(ILogger *pLogger)

Inizializzare questo componente, passandolo al logger in modo che possa registrare le informazioni.

HRESULTValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain)

Questo metodo verifica se un set di credenziali è valido, come illustrato nella tabella 10.

Tabella 10. HResultValidLogon

Hresult Descrizione
S_OK Le credenziali sono valide
S_FALSE Le credenziali non sono valide
E_FAIL Impossibile individuare il controller di dominio. controllare i log per i dettagli
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain)

Questo metodo verifica se un set di credenziali ha accesso in lettura/scrittura all'oggetto computer in Active Directory Domain Services, come illustrato nella tabella 11.

Tabella 11. HResult HasAccess

HRESULT Descrizione
S_OK L'utente ha accesso
E_FAIL L'utente non ha accesso. Per altre informazioni, controllare il file di log.

Interfaccia IBackgroundTask

__interface IBackgroundTask : IUnknown
{
    HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback);
    void Start(void);
    BOOL Running(void);
    HRESULT Wait(DWORD waitMilliseconds);
    HRESULT Terminate(DWORD exitCode);
    HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult);
    HRESULT Close(void);
};
Panoramica

La pagina Stato usa questa classe per eseguire attività in un thread separato. È anche possibile usare questa classe ogni volta che si desidera eseguire operazioni su un thread separato. Le attività sono qualsiasi classe che supporta l'interfaccia ITask .

Questa interfaccia viene implementata dal componente ID_BackgroundTask ("Microsoft.Wizard.BackgroundTask"), definito nell'interfaccia IBackgroundTask.h.

HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)

Questa interfaccia inizializza il componente, come illustrato nella tabella 12.

Tabella 12. HRESULT Init

Parametro Descrizione
pTask Puntatore alla classe che contiene il codice che si desidera eseguire in un altro thread
Id Numero che è possibile usare nel metodo Finished del callback per indicare quale attività ha completato l'esecuzione; utile se si avviano diverse attività con lo stesso metodo di callback
pCallback Classe che implementa il metodo Finished , che viene chiamato ogni volta che un'attività termina l'esecuzione; la chiamata al metodo Finished si troverà nel thread in background, non nel thread dell'interfaccia utente
void Start(void)

Questo metodo avvia l'attività in un thread in background e restituisce gli elementi visualizzati nella tabella 13.

Tabella 13. Restituire un thread in background

Restituisce Descrizione
E_INVALIDARG L'attività è già in esecuzione, quindi non è possibile avviarla in questo momento.
E_FAIL Si è verificato un problema durante l'avvio del thread.
S_OK Il thread è stato avviato.
BOOL Running()

Questo metodo restituisce TRUE se l'attività in background è attualmente in esecuzione e FALSE se non è in esecuzione.

HRESULT Wait(DWORD waitMilliseconds)

Questo metodo attende fino a quando il thread non viene arrestato o non è trascorso il numero di millisecondi.

HRESULT Terminate(DWORD exitCode)

Questo metodo elimina il thread in esecuzione (vedere tabella 14 e tabella 15). Il completamento di questo processo potrebbe richiedere un breve periodo di tempo dopo il completamento del metodo.

Tabella 14. Codice di uscita di terminazione HRESULT

Parametro Descrizione
exitCode Codice di uscita che verrà inviato al metodo di callback Finished, che sarà disponibile anche dal metodo GetExitCode .

Tabella 15. Codici di terminazione

Restituisce Descrizione
E_FAIL La chiamata a terminate non è riuscita.
S_OK Richiesta di terminazione del thread completata.
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)

Usare questo metodo per ottenere i risultati dell'esecuzione dell'attività nel thread in background (vedere la tabella 16).

Tabella 16. Codici dei risultati

Parametro Descrizione
Pcode Puntatore a un DWORD che verrà impostato su return o nullptr se non è necessario il valore restituito. All'uscita, questo parametro viene impostato su STILL_ACTIVE se il thread è in esecuzione, il codice restituito dal metodo Execute dell'attività o il valore passato al metodo Terminate se è stato chiamato tale metodo.
pHresult Puntatore a un HRESULT che verrà impostato su return o nullptr se non è necessario il valore HRESULT .
HRESULT Close(void)

Questo metodo rilascia il thread in background. Restituisce E_INVALIDARG se il thread è attualmente in esecuzione e S_OK in caso contrario.

Interfaccia ICheckBox

__interface ICheckBox : IControl
{
    void Check(BOOL check);
    BOOL IsButtonChecked();
};
void Check(BOOL check)

Impostare lo stato selezionato della casella di controllo. Quando il metodo è TRUE, la casella di controllo è selezionata; quando il metodo è FALSE, la casella di controllo è deselezionata.

BOOL IsButtonChecked()

Questo metodo segnala lo stato di controllo corrente di una casella di controllo.

Interfaccia IComboBox

__interface IComboBox : IControl
{
    HRESULT Bind([in] IBindableList *pList);
    HRESULT Select(int index);
    int Selected(void);
    void Add([in] LPCTSTR caption);
    HRESULT GetText([out, retval] LPBSTR pText);
    void Clear();
};
Panoramica

Questa interfaccia viene implementata dal componente CheckBoxWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_COMBO_BOX.

Binding HRESULT([in] IBindableList *pList)

Usare questo metodo quando si dispone di un'origine dati che implementa l'interfaccia IBindableList . La casella di riepilogo inizializza il contenuto con le didascalie di questo elenco.

HRESULT Select(int index)

Selezionare l'elemento nella casella combinata in corrispondenza dell'indice.

int Selected(void)

Questo metodo restituisce l'indice dell'elemento selezionato o -1 se non viene selezionato nulla.

void Add([in] LPCTSTR didascalia)

Aggiungere manualmente un elemento alla casella combinata.

HRESULT GetText([out, retval] LPBSTR pText)

Recuperare la stringa dell'elemento attualmente selezionato nella casella combinata.

void Clear()

Rimuovere tutti gli elementi dalla casella combinata.

Interfaccia IControl

__interface IControl : IUnknown
{
    HRESULT SetEnable(BOOL enable);
    BOOL IsEnabled(void);
    HRESULT SetVisible(BOOL visible);
};
Panoramica

Questa interfaccia viene implementata dal componente ControlWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_GENERIC.

HRESULT SetEnable(BOOL enable)

Abilitare o disabilitare il controllo.

BOOL IsEnabled(void)

Restituisce TRUE se il controllo è abilitato, FALSE se non lo è.

HRESULT SetVisible(BOOL visible)

Visualizzare o nascondere il controllo.

Interfaccia ICpuInfo

__interface ICpuInfo : IUnknown
{
    BOOL Is64Bit(void);
};
Panoramica

Per ottenere questa interfaccia, creare un nuovo componente ID_CpuInfo . Il singolo metodo indica se la CPU è a 32 o 64 bit. Si noti che se si dispone di un sistema operativo a 32 bit in un computer a 64 bit, questo metodo restituisce TRUE, perché segnala solo la larghezza della CPU (non il sistema operativo).

Interfaccia IDirectory
__interface IDirectory : IUnknown
{
    BOOL FileExists(LPCWSTR name);
    BOOL FindFirst([in] LPCWSTR name);
    HRESULT FoundName([out, retval] LPBSTR name);
    DWORD FoundAttributes(void);
    BOOL FindNext(void);
    void FinishFind(void);
};
Panoramica

Il componente Directory , creato usando ID_Directory, fornisce una facciata per l'uso delle directory nel file system.

BOOL FileExists(LPCWSTR name)

Questo metodo restituisce TRUE se esiste un file con il nome specificato.

BOOL FindFirst([in] Nome LPCWSTR)

Questo metodo trova una prima corrispondenza per il nome specificato. Supporta caratteri jolly e restituisce nomi di file e directory. Il metodo restituisce TRUE se è stata trovata una corrispondenza, in caso contrario FALSE.

HRESULT FoundName([out, retval] LPBSTR name)

Questo metodo recupera il nome del file trovato con una chiamata a FindFirst o FindNext.

DWORD FoundAttributes(void)

Questo metodo restituisce l'attributo per il file o la directory più recente trovato. È possibile usare il codice come indicato di seguito per verificare se si tratta di una directory:

pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext(void)

Trovare il successivo. Questo metodo restituisce TRUE se è stata trovata un'altra corrispondenza, in caso contrario FALSE.

void FinishFind(void)

Questo metodo rilascia le risorse usate per l'operazione Find.

Interfaccia IDomainJoinValidator

__interface IDomainJoinValidator : IUnknown
{
    HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);
    HRESULT IsUsernameValid(LPCWSTR domainName);
    BOOL CanModifyComputerAdEntry(LPCWSTR domainName);
};
Panoramica

Si ottiene un'istanza di questa interfaccia usando il valore ID_DomainJoinValidator per la funzione modello CreateInstance .

HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)

Inizializzare l'istanza di , come illustrato nella tabella 17.

Tabella 17. HRESULT Init - Inizializzazione dell'istanza

Parametro Descrizione
pLogger Istanza del logger, disponibile per la pagina tramite il metodo Logger della pagina
pContainer Passa i risultati dal metodo Container della pagina
pUsername Casella di testo che contiene il nome utente da convalidare
pPassword Casella di testo che contiene la password da convalidare
PComputerName Casella di testo che contiene il nome del computer che verrà aggiunto al dominio
HRESULT IsUsernameValid(LPCWSTR domainName)

Questo metodo usa il metodo IADHelper-ValidLogon> per eseguire il lavoro. Per informazioni dettagliate, vedere questo metodo.

BOOL CanModifyComputerAdEntry(LPCWSTR domainName)

Verificare se l'utente dispone dei diritti per modificare la voce del computer. La maggior parte del lavoro viene eseguita da IADHelper-HasAccess>. Se questo metodo restituisce FALSE, controllare il file di log per informazioni dettagliate.

Interfaccia IDriveList

__interface IDriveList : IUnknown
{
    HRESULT Init(IWmiRepository *pWmi);
    HRESULT SetWhereClause(LPCTSTR whereClause);
    HRESULT SetMinimumDriveSize(__int64 size);
    HRESULT Update(void);
    HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned);

    size_t Count(void);
    HRESULT GetProperty(size_t index, LPCTSTR propName,  LPVARIANT value);
    HRESULT GetCaption(size_t index,  LPBSTR pCaption);
}
HRESULT Init(IWmiRepository *pWmi)

Chiamare questo metodo prima di chiamare qualsiasi altro componente. Prima di chiamare questo metodo, sarà necessario creare un nuovo wmiRepository .

HRESULT SetWhereClause(LPCTSTR whereClause)

Questo metodo consente di aggiungere testo che verrà visualizzato come clausola "where" nella query. Ad esempio, la riga seguente restituisce solo le unità USB:

pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(__int64 size)

Impostare la dimensione dell'unità ridotta a icona, in byte, per le unità che verranno restituite dalla query.

Aggiornamento HRESULT(void)

Eseguire la query. L'elenco di unità disponibile dopo la chiamata a questo metodo viene ordinato in base alla lettera di unità.

HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned)

Questo metodo aggiunge i nomi delle proprietà aggiuntive che si desidera rendere disponibili nei risultati della query. Chiamare questo metodo prima di chiamare Update. La tabella 18 mostra tre delle proprietà utili.

Tabella 18. HRESULT AddProperty: proprietà utili

Sezione Proprietà Descrizione
DISKQUERY_LOGICALDISK Dimensioni Dimensione, in byte, rappresentata come stringa
DISKQUERY_DISKPARTITION DiskIndex Numero di disco come numero intero, a partire da 0
DISKQUERY_LOGICALDISK VolumeName Etichetta del volume
size_t Count(void)

Numero di record restituiti dalla query. Chiamare Update prima di chiamare questo metodo.

HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT value)

Questo metodo recupera il valore di una proprietà dai risultati della query, come illustrato nella tabella 19.

Tabella 19. HRESULT GetProperty

Parametro Descrizione
Indice Indice in base zero per il record dei risultati
propName Nome della proprietà, ad esempio "Size"
Valore In caso di restituzione, questo parametro contiene un valore variant della proprietà
HRESULT GetCaption(size_t index, LPBSTR pCaption)

Questo metodo recupera l'didascalia per un record che corrisponde alla proprietà Caption.

Interfaccia IImageList

__interface IImageList
{
    HRESULT CreateImageList(int width, int height, UINT flags);
    HImageList GetImageList(void);
    int AddImage(HInstance hInstance, int resourceId);
};
Panoramica

Questa interfaccia viene implementata dal componente ImageList . Si recupera un'istanza di questo componente dall'interfaccia IListView .

HRESULT CreateImageList(int width, int height, UINT flags)

Creare un nuovo elenco di immagini, gestito da questo componente. Chiamare questo metodo una sola volta.

HImageList GetImageList(void)

Questo metodo restituisce l'handle per l'elenco di immagini nel caso in cui sia necessario eseguire altre operazioni nell'elenco di immagini.

int AddImage(HInstance hInstance, int resourceId)

Aggiungere una nuova immagine all'elenco di immagini da una risorsa, come illustrato nella tabella 20.

Tabella 20. Interfaccia HRESULT IImageList

Parametro Descrizione
Hinstance Handle dell'istanza del modulo che contiene la risorsa bitmap
ID risorsa ID della risorsa da caricare nell'elenco di immagini

Interfaccia IListView

__interface IListView : IControl
{
    int AddItem([in] LPCTSTR text);
    int AddColumn(int width, [in] LPCTSTR text);
    HRESULT SetSubItem(int index, int column, [in] LPCTSTR text);
    int GetWidth(void);
    void SetExtendedStyle(DWORD style);
    int GetSelectedItem(void);
    HRESULT SelectItem(int index);
    BOOL IsItemChecked(int index);
    int GetItemCount(void);
    HRESULT CreateImageList(int width, int height, UINT flags);
    int AddImage(HINSTANCE hInstance, int resourceId);
    HRESULT SetImage(int index, int imageIndex);
    HRESULT Clear(void);
};
Panoramica

Questa interfaccia viene implementata dal componente ControlWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_LIST_VIEW.

int AddItem([in] LPCTSTR text)

Aggiungere una nuova riga alla casella di riepilogo. Il metodo restituisce l'indice dell'elemento appena aggiunto.

int AddColumn(int width, [in] LPCTSTR text)

Aggiungere una nuova colonna alla visualizzazione elenco.

HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)

Impostare il testo in una colonna diversa dalla prima colonna della casella di riepilogo, come illustrato nella tabella 21.

Tabella 21. HRESULT SetSubItem

Parametro Descrizione
Indice Indice dell'elemento elenco da modificare
Colonna Indice della colonna da aggiornare; la prima colonna viene impostata con AddItem, le colonne due e seguenti vengono impostate con questo metodo
testo Stringa da visualizzare nella colonna
int GetWidth(void)

Questo metodo restituisce la larghezza dell'intera casella di testo.

void SetExtendedStyle(stile DWORD)

Questo metodo consente di impostare gli stili estesi nella casella di riepilogo, ad esempio:

m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)

Questo metodo restituisce l'indice dell'elemento della visualizzazione elenco attualmente selezionato.

HRESULT SelectItem(int index)

Impostare l'elemento selezionato nell'elenco su questo indice.

BOOL IsItemChecked(int index)

Questo metodo restituisce TRUE se è selezionato un elemento nell'elenco. Questo metodo richiede la chiamata di SetExtendedStyle per impostare lo stile della casella di controllo.

int GetItemCount(void)

Questo metodo restituisce il numero di elementi nella visualizzazione elenco.

HRESULT CreateImageList(int width, int height, UINT flags)

Creare un nuovo elenco di immagini e collegarlo alla visualizzazione elenco.

int AddImage(HINSTANCE hInstance, int resourceId)

Aggiungere un'immagine all'elenco immagini della visualizzazione elenco. Per prima cosa, devi chiamare CreateImageList.

HRESULT SetImage(int index, int imageIndex)

Impostare l'immagine che verrà visualizzata sul lato sinistro per una voce di visualizzazione elenco specifica.

HRESULT Clear(void)

Rimuovere tutti gli elementi dalla visualizzazione elenco.

Interfaccia IProgressBar

__interface IProgressBar : IControl
{
    HRESULT SetPercentage(int position);
    int GetPercentage(void);
};
Panoramica

Questa interfaccia viene implementata dal componente ProgressBarWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_PROGRESS_BAR.

HRESULT SetPercentage(int position)

Impostare la posizione dell'indicatore di stato usando un numero compreso tra 0 e 100. Per impostazione predefinita, le nuove barre di stato Win32® hanno un intervallo massimo di 100.

int GetPercentage(void)

Questo metodo restituisce la posizione corrente dell'indicatore di stato.

Interfaccia IRadioButton

__interface IRadioButton : IControl
{
public:
    void SetGroup(int firstId, int lastId);
    void CheckRadio(int id);
    BOOL IsButtonChecked(int id);
    void EnableRadio(int id, BOOL enable);
};
Panoramica

Questa interfaccia viene implementata dal componente RadioButtonWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_RADIO_BUTTON.

void SetGroup(int firstId, int lastId)

Fornire al wrapper l'intervallo di pulsanti di opzione che devono essere considerati come un gruppo. Chiamare questo metodo prima di chiamare CheckRadio.

void CheckRadio(int id)

Impostare il pulsante di opzione specifico come singolo pulsante nel gruppo di pulsanti di opzione selezionato. Chiamare SetGroup prima di chiamare questo metodo.

BOOL IsButtonChecked(int id)

Questo metodo restituisce TRUE se il pulsante di opzione è attualmente selezionato, FALSE in caso contrario.

void EnableRadio(int id, BOOL enable)

Questo metodo abilita o disabilita un pulsante di opzione.

Interfaccia IStaticText

__interface IStaticText : IControl
{
    HRESULT SetText([in] LPCTSTR pText);
    HRESULT GetText([out, retval] LPBSTR pText);
};
Panoramica

Questa interfaccia viene implementata dal componente StaticTextWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_STATIC_TEXT.

HRESULT SetText([in] LPCTSTR pText)

Impostare il testo per il controllo.

HRESULT GetText([out, retval] LPBSTR pText)

Questo metodo restituisce il valore corrente del testo per il controllo.

Interfaccia ITask

__interface IControl : IUnknown
{
    HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
    HRESULT Execute(LPDWORD pReturnCode);
};

Implementare questa interfaccia se si vuole che il componente sia disponibile come attività nella pagina preliminare o se si vuole usare il componente BackgroundTask per eseguire operazioni su un thread in background.

Di seguito sono riportati i componenti che implementano l'interfaccia ITask :

  • ID_ShellExecuteTask, L"Microsoft.Wizard.ShellExecuteTask"

  • ID_CopyFilesTask, L"Microsoft.Wizard.CopyFilesTask"

  • ID_ACPowerTask, L"Microsoft.OSDRefresh.ACPowerTask"

  • ID_WiredNetworkTask, L"Microsoft.SharedPages.WiredNetworkTask"

Init
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings)

Se si scrive un'attività per la pagina preliminare, chiamare questo metodo per inizializzare l'attività. Il file .config contiene codice XML simile al seguente:

<Task DisplayName="Check Windows Scripting Host" Type="Microsoft.Wizard.ShellExecuteTask">
  <Setter Property="filename">%windir%\system32\cscript.exe</Setter>
  <Setter Property="parameters">Preflight\OSDCheckWSH.vbs</Setter>
  <Setter Property="BitmapFilename">images\WinScriptHost.bmp</Setter>
  <ExitCodes>
    <ExitCode State="Success" Type="0" Value="0" Text="" />
    <ExitCode State="Error" Type="-1" Value="*" Text="Windows Scripting Host not installed." />
  </ExitCodes>
</Task>

Il parametro pProperties consente l'accesso ai tre valori setter, mentre il parametro pTaskSettings fornisce l'accesso all'elemento Task e agli elementi figlio. La maggior parte delle attività deve solo leggere i dati dal parametro pProperties .

Esecuzione
HRESULT Execute(LPDWORD pReturnCode)

Qui è possibile scrivere il codice che esegue l'attività. Questo metodo deve restituire S_OK se non si sono verificati errori e può restituire un altro HRESULT se si è verificato un errore durante l'esecuzione dell'attività. I valori diversi da S_OK restituiti da questo metodo vengono confrontati con <gli elementi Error> nella <sezione ExitCodes> se si usa la pagina preliminare.

Il parametro pReturnCode deve essere aggiornato con un numero che segnala lo stato dell'attività. Questi valori vengono confrontati dalla pagina preliminare agli <elementi ExitCode> .

Interfaccia ITreeView

__interface ITreeView : IControl
{
    void EnableCheckboxes(void);
    HRESULT CreateImageList(int width, int height, UINT flags);
    int AddImage(HINSTANCE hInstance, int resourceId);

    HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL);
    void SetImage(HTREEITEM item, int image, int expandImage);

    void Clear(void);
    BOOL SetFirstVisible(HTREEITEM item);
    BOOL SelectItem(HTREEITEM item);
    void CheckItem(HTREEITEM item, UINT checkState);
    HTREEITEM SelectedItem(void);
    int SetItemHeight(SHORT height);
    HRESULT EnableItem(HTREEITEM item, BOOL enable);
    void Expand(HTREEITEM hItem, BOOL expand);

    HTREEITEM GetChild(HTREEITEM hParent);
    HTREEITEM GetParent(HTREEITEM hNode);
    HTREEITEM GetNextItem(HTREEITEM hPrevious);

    UINT IsChecked(HTREEITEM item);
    BOOL IsEnabled(HTREEITEM item);

    INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel);
    HRESULT SetEventHandler(ITreeViewEvent *pEventHandler);

    void SetSelectedBackColor(COLORREF color);
};
Panoramica

Questa interfaccia viene implementata dal componente TreeViewWrapper . È possibile recuperare un'istanza di questo componente usando la funzione helper GetControlWrapper con il tipo CONTROL_TREE_VIEW.

void EnableCheckboxes(void)

Questo metodo attiva le caselle di controllo nel controllo visualizzazione struttura ad albero impostando lo stile TVS_CHECKBOXES .

HRESULT CreateImageList(int width, int height, UINT flags)

Aggiungere un nuovo elenco di immagini al controllo visualizzazione struttura ad albero. Il parametro flags viene passato nella chiamata alla funzione ImageList_Create Win32.

int AddImage(HINSTANCE hInstance, int resourceId)

Aggiungere un'immagine all'elenco di immagini da una risorsa (resourceId) nel modulo con l'handle di istanza hInstance.

HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)

Aggiungere un nodo alla visualizzazione albero. Il nuovo nodo verrà aggiunto al livello superiore se hParent è NULL. In caso contrario, specificare l'handle per l'elemento padre in cui si vuole aggiungere il nuovo elemento. Questo metodo restituisce l'handle al nuovo elemento.

void SetImage(HTREEITEM item, int image, int expandImage)

Impostare l'immagine da usare per un elemento della visualizzazione albero. È possibile impostare sia l'immagine normale che l'immagine espansa.

void Clear(void)

Rimuovere tutti gli elementi dalla visualizzazione albero.

BOOL SetFirstVisible(HTREEITEM item)

Assicurarsi che l'elemento della visualizzazione albero sia visibile. Se necessario, la visualizzazione albero scorrerà per rendere visibile l'elemento.

BOOL SelectItem(HTREEITEM item)

Impostare l'elemento attualmente selezionato sull'elemento specificato. È possibile chiamare SetFirstVisible dopo questa operazione per assicurarsi che l'elemento appena selezionato sia visibile.

void CheckItem(HTREEITEM item, UINT checkState)

Il metodo imposta fondamentalmente l'immagine che verrà visualizzata per la casella di controllo nella visualizzazione albero. Queste immagini si trovano in un controllo ImageList separato gestito dalla visualizzazione albero. Per impostazione predefinita, questo elenco di immagini contiene tre immagini, visualizzate nella tabella 22.

Table 22.void CheckItem Image List Default

Checkstate Descrizione
0 Zero
1 Cancellato
2 Selezionato
HTREEITEM SelectedItem(void)

Questo metodo restituisce l'handle dell'elemento della visualizzazione struttura ad albero attualmente selezionato.

int SetItemHeight(SHORT height)

Questo metodo imposta in pixel l'altezza di tutti gli elementi del controllo visualizzazione albero. Restituisce l'altezza precedente in pixel.

HRESULT EnableItem(HTREEITEM item, BOOL enable)

Questo metodo abilita o disabilita un singolo elemento nell'albero. La disabilitazione di un elemento con elementi figlio non disabiliterà gli elementi figlio.

void Expand(HTREEITEM hItem, BOOL expand)

Questo metodo espande o comprime un nodo nell'albero.

HTREEITEM GetChild(HTREEITEM hParent)

Questo metodo restituisce il primo elemento figlio di un elemento della visualizzazione struttura ad albero o NULL se non sono presenti elementi figlio.

HTREEITEM GetParent(HTREEITEM hNode)

Questo metodo restituisce l'handle dell'elemento padre per un nodo nella visualizzazione albero o NULL se il nodo si trova al livello superiore.

HTREEITEM GetNextItem(HTREEITEM hPrevious)

È possibile chiamare questo metodo con un handle restituito da GetChild per scorrere tutti gli elementi figlio di un nodo. Questo metodo restituisce l'elemento di pari livello successivo nell'albero che condivide lo stesso elemento padre.

UINT IsChecked(elemento HTREEITEM)

Questo metodo restituisce 0 se il nodo della visualizzazione albero non è selezionato e 1 se lo è.

BOOL IsEnabled(HTREEITEM item)

Questo metodo restituisce TRUE se il nodo della visualizzazione struttura ad albero è abilitato, in caso contrario FALSE.

INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)

Questo metodo è solo per uso interno.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

Chiamare questo metodo se si desidera ricevere una notifica quando l'elemento selezionato cambia o l'utente modifica lo stato di controllo di un elemento della visualizzazione struttura ad albero. È necessario implementare ITreeViewEvent nel componente per ricevere questi callback.

void SetSelectedBackColor(color COLORREF)

Impostare il colore di sfondo utilizzato per l'elemento selezionato.

Interfaccia IWmiIteration

__interface IWmiIterator : IUnknown
{
    HRESULT Next(void);
    HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Panoramica

In genere si usa questa interfaccia, insieme a IWmiRepository, quando si usano chiamate WMI. L'interfaccia IWmiIteration consente di scorrere i valori restituiti da una query.

HRESULT Next(void)

Passare all'elemento successivo nei risultati della query, come illustrato nella tabella 23.

Tabella 23. HRESULT Next(void) Query Returns

HRRESULT Descrizione
S_OK Spostato al risultato successivo; è possibile usare GetProperty per recuperare le proprietà di tale risultato.
S_FALSE Non ci sono più elementi nell'elenco.
E_NOT_SET Non sono presenti risultati di query
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)

Questo metodo recupera il valore di una proprietà dal record del risultato corrente, come illustrato nella tabella 24 e nella tabella 25.

Tabella 24. HRESULT GetProperty

Parametro Descrizione
propertyName Nome della proprietà da recuperare
pValue Punta a una struttura VARIANT che in caso di restituzione contiene il valore della proprietà

Tabella 25. HRESULT GetProperty Result

HRESULT Descrizione
S_OK Il valore della proprietà è stato recuperato.
WBEM_E_NOT_FOUND Non è presente alcuna proprietà con il nome.
E_NOT_VALID_STATE Non è presente alcun record corrente.

Nota

Il metodo GetProperty può restituire altri codici di errore WMI diversi da quelli elencati nella tabella 25. I valori elencati sono i risultati comuni restituiti.

Interfaccia IWmiRepository

__interface IWmiRepository : IUnknown
{
    HRESULT SetNamespace(LPCWSTR namespaceName);
    HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Panoramica

Questa interfaccia viene implementata dal componente WmiRepository (ID_WmiRepository).

HRESULT SetNamespace(LPCWSTR namespaceName)

Questo metodo imposta lo spazio dei nomi WMI che verrà utilizzato per la query. Chiamare questo metodo prima di chiamare ExecQuery. Se non si chiama questo metodo, lo spazio dei nomi sarà root\cimv2. Questo metodo restituisce sempre S_OK.

HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator)

Eseguire una query sullo spazio dei nomi WMI impostato con una chiamata a SetNamespace, come illustrato nella tabella 26 e nella tabella 27.

Tabella 26. HRESULT ExecQuery

Parametro Descrizione
Query Stringa per la query WMI da eseguire
ppIterator Passare un puntatore a un puntatore di interfaccia, che in caso di restituzione verrà compilato con un'interfaccia che consente di accedere ai risultati della query

Tabella 27. Risultato della query HRESULT

HRESULT Descrizione
S_OK Query completata
Altro Se la query non ha avuto esito positivo, restituisce un HRESULT WMI

Interfaccia IFormController

__interface IFormController : IUnknown
{
    Init(IWizardPageView *pView, IWizardPageContainer *pContainer);
    SetPageInfo(ISettingsProperties *pPageInfo);

    Validate(void);

    AddToGroup(int groupControlId, int controlId);
    UpdateCheckGroup(int groupControlId);
    AddValidator(int controlId, IValidator *pValidator, IControl *pCOntrol = 0);

    AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr);
    DisableValidation(int controlId, BOOL disable);

    AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type);
    AddRadioGroup(LPCWSTR groupName, int radioControlId);
    EnableRadioGroup(LPCWSTR groupName, BOOL enable);
    InitFields(IFieldCallback *pFieldCallback = nullptr);
    SaveFields(IFieldCallback *pFieldCallback = nullptr);
    BOOL IsFieldDisabled(int controlId);

    InitSection(LPCWSTR key, LPCWSTR sectionCaption);
    AddSummaryItem(LPCWSTR first, LPCWSTR second);
    SuppressLogValue(LPCWSTR tsVariableName);
    SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption);
    LoadText(int controlId, LPCWSTR tsVariableName);

    void ControlEvent(WORD eventId, WORD controlId);
    BOOL IsValid(void);
 };
Panoramica

Ogni pagina della Procedura guidata UDI ha un proprio controller di modulo che implementa questa interfaccia. Usare questo controller per connettere i dati del campo nel file XML .config ai controlli nella pagina. Il controller del modulo gestisce quindi automaticamente molti dei dettagli.

Configurazione del modulo

In genere, configurare il controller del modulo nel metodo OnWindowCreated della pagina. Questa operazione comporta in genere la chiamata ai metodi illustrati nella tabella 28.

Tabella 28. OnWindowCreated, metodo

Metodo Descrizione
Init Inizializza il controller del modulo
AddField Fornisce una connessione tra un campo nel file XML .config che è un nome di stringa e un controllo nella finestra di dialogo della pagina che è un ID
AddRadioGroup Usato per connettere un pulsante di opzione sia a un gruppo che a un controllo nella finestra di dialogo
AddToGroup Consente i controlli "figlio" abilitati o disabilitati insieme al relativo elemento padre o in base al pulsante di opzione selezionato
InitFields Chiamare dopo aver chiamato tutti i metodi Add per configurare il modulo
Convalida Esegue la convalida iniziale
Elaborazione degli eventi del modulo

Aggiungere la chiamata seguente al metodo OnControlEvent :

Form()->ControlEvent(eventId, controlId);

Questa chiamata passa gli eventi al controller del modulo in modo che possa elaborare gli eventi correlati al modulo.

Salvare i dati del modulo

Nel metodo OnNextSelected chiamare i metodi del modulo illustrati nella tabella 29.

Tabella 29. OnNextSelected, metodo

Metodo Descrizione
InitSection Specifica il nome della sezione che verrà visualizzata nella pagina Riepilogo per questa pagina
SaveFields Salvare i valori dei campi nelle variabili della sequenza di attività e nella pagina Riepilogo
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)

Questo metodo viene in genere chiamato all'inizio del metodo OnWindowCreated della pagina. Il comando dovrebbe essere simile al seguente:

Form()->Init(View(), Container());
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)

Questo metodo viene chiamato internamente e non è consigliabile chiamarlo manualmente. Fornisce il codice XML della pagina al controller del modulo.

Convalida
HRESULT Validate(void)

Questo metodo esegue tutti i validator associati ai controlli. Se un validator non viene superato, il controller del modulo visualizza un messaggio di avviso e disabilita il pulsante Avanti , quindi interrompe l'elaborazione dei validator. In genere, è necessario chiamare questo metodo solo alla fine del metodo OnWindowCreated ; restituisce sempre S_OK.

AddToGroup
AddToGroup(int groupControlId, int controlId)

Questo metodo aggiunge un controllo come "figlio" di una casella di controllo o di un pulsante di opzione, come illustrato nella tabella 30. Tutti questi controlli figlio verranno disabilitati quando il controllo padre non è selezionato. Il metodo restituisce sempre S_OK.

Tabella 30. AddToGroup

Parametro Descrizione
groupControlId ID della casella di controllo o del pulsante di opzione che controllerà lo stato di abilitazione del controllo figlio
Controlld ID del controllo da aggiungere come figlio
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)

Questo metodo aggiorna lo stato di abilitazione o disabilitazione dei controlli figlio di un gruppo in base allo stato del controllo padre. In genere, non è necessario chiamare questo metodo manualmente, perché il controller del modulo lo chiama automaticamente.

AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)

Chiamare questo metodo solo se si dispone di un validator che si vuole creare nel codice anziché con il codice XML. Questo metodo restituisce sempre S_OK.

AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)

Chiamare questo metodo solo se si dispone di un validator che si vuole creare nel codice anziché con il codice XML.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)

Chiamare questo metodo per disabilitare in modo esplicito il validator per un controllo o ripristinare la convalida normale, come illustrato nella tabella 31. Questo metodo è utile, ad esempio, quando si dispone di regole di abilitazione/disabilitazione per i controlli non coperti dalla convalida del modulo ed è necessario disabilitare la convalida per un controllo. In altre parole, in genere non si chiama questo metodo. Questo metodo restituisce sempre S_OK.

Tabella 31. HRESULT DisableValidation

Parametro Descrizione
Controlid Controllo per il quale si desidera abilitare o disabilitare la convalida
Disable Impostare su TRUE per disabilitare la convalida e su FALSE per ripristinare la convalida normale
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)

Aggiungere un mapping di controllo tra il nome in un elemento Field del file XML .config e l'ID controllo nella finestra di dialogo della pagina, come illustrato nella tabella 32. È necessario chiamare questo metodo prima della chiamata a InitFields, perché InitFields usa queste informazioni. Questo metodo restituisce sempre S_OK.

Tabella 32. HRESULT AddField

Parametro Descrizione
Fieldname Nome del campo visualizzato nel codice XML della pagina
Controlid ID del controllo nel modello di finestra di dialogo della pagina
suppressLog Impostare su TRUE se non si desidera che i valori di questo campo vengano scritti nel file di log; impostare sempre questo parametro su TRUE per i campi password o PIN
Tipo Tipo di controllo, che è uno dei seguenti:

- CONTROL_STATIC_TEXT
- CONTROL_COMBO_BOX
- CONTROL_LIST_VIEW
- CONTROL_PROGRESS_BAR
- CONTROL_GENERIC
- CONTROL_RADIO_BUTTON
- CONTROL_CHECK_BOX
- CONTROL_TREE_VIEW
AddRadioGroup
HRESULT AddRadioGroup(LPCWSTR groupName, int radioControlId)

Questo metodo aggiunge un controllo a un gruppo di pulsanti di opzione denominato, come illustrato nella tabella 33. È necessario chiamare questo metodo prima del metodo InitFields , perché questo metodo usa gli attributi dell'elemento RadioGroup per controllare le impostazioni per tutti i controlli pulsante di opzione nel gruppo. I gruppi di opzioni possono essere bloccati, ad esempio, in modo che tutti i pulsanti di opzione siano disabilitati, ma i controlli figlio vengono abilitati o disabilitati solo in base al pulsante di opzione selezionato. Questo metodo restituisce sempre S_OK.

Tabella 33. HRESULT AddRadioGroup

Parametro Descrizione
Groupname Stringa che definisce un gruppo di pulsanti di opzione in questa pagina
radioControlId ID di un singolo pulsante di opzione da aggiungere a questo gruppo
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)

Questo metodo consente di abilitare o disabilitare un intero gruppo di pulsanti di opzione. La disabilitazione di un gruppo di opzioni disabilita tutti i controlli pulsante di opzione nel gruppo e tutti gli elementi figlio di tali pulsanti di opzione aggiunti con AddToGroup. Vedere la tabella 34 e la tabella 35.

Tabella 34. EnableRadioGroup

Parametro Descrizione
Groupname Nome di un gruppo di pulsanti di opzione già definito con una chiamata ad AddRadioGroup
Attivazione Impostare su TRUE per abilitare il gruppo di pulsanti di opzione e FALSE per disabilitare il gruppo

Tabella 35. HRESULT EnableRadioGroup

HRESULT Descrizione
S_OK Gruppo abilitato o disabilitato
E_INVALIDARG Nessun gruppo di pulsanti di opzione con il nome specificato
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)

Prima di chiamare questo metodo, chiamare AddField per ogni campo che il codice XML può controllare. Questo metodo restituisce sempre S_OK.

Il parametro pFieldCallback è facoltativo. Se lo si specifica, il controller di modulo chiama SetFieldDefault per i controlli che non sono CONTROL_STATIC_TEXT o CONTROL_CHECK_BOX. Questo comportamento consente di recuperare un valore predefinito dal codice XML e impostarlo manualmente nel controllo .

SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)

Questo metodo salva i valori dei campi nelle variabili della sequenza di attività e nei dati di riepilogo che verranno visualizzati nella pagina Riepilogo . La fornitura di un puntatore in pFieldCallback consente di gestire i valori di salvataggio per i controlli che non supportano CONTROL_STATIC_TEXT.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)

Questo metodo consente di determinare se un campo è stato disabilitato nel codice XML.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)

Questo metodo inizializza i dati di riepilogo che verranno visualizzati nella pagina Riepilogo , come illustrato nella tabella 36. Chiamare questo metodo nel metodo OnNextSelected prima di chiamare SaveFields. Questo metodo restituisce sempre S_OK.

Tabella 36. HRESULT InitSection

Parametro Descrizione
Chiave Questo parametro deve essere univoco per la pagina. Viene usato per garantire che ogni pagina abbia le proprie informazioni di riepilogo.
sectionCaption Intestazione che verrà visualizzata nella pagina Riepilogo per le informazioni di riepilogo di questa pagina. In genere, si usa DisplayName() come valore per questo parametro.
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)

Questo metodo consente di aggiungere elementi di riepilogo alla pagina Riepilogo sopra e oltre gli elementi impostati con il codice XML. Vedere la tabella 37.

Tabella 37. HRESULT AddSummaryItem

Parametro Descrizione
Nome Il didascalia per l'elemento di riepilogo, visualizzato sul lato sinistro
Secondo Valore che verrà visualizzato sul lato destro
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)

Chiamare questo metodo per le variabili della sequenza di attività per le quali non si desidera che i valori vengano scritti nel file di log. Chiamare questo metodo per le variabili della sequenza di attività che archivia password, PIN o altri valori sensibili che un utente potrebbe immettere.

SaveText
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)

Questo metodo salva il valore di un controllo di testo sia in una variabile della sequenza di attività che nella sezione di riepilogo. In genere, non sarà necessario chiamare questo metodo manualmente, perché il controller del modulo esegue questa operazione per tutti i campi. Vedere la tabella 38.

Tabella 38. HRESULT SaveText

Parametro Descrizione
Controlid ID della casella di testo che contiene il valore da salvare (o qualsiasi altro controllo che possa restituire testo)
tsVariableName Nome della variabile della sequenza di attività da modificare
summaryCaption Il didascalia nella pagina Riepilogo per questo valore
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)

Questo metodo legge il valore di una variabile della sequenza di attività e imposta la casella di testo su questo valore.

ControlEvent
void ControlEvent(WORD eventId, WORD controlId)

Chiamare questo metodo sul metodo OnControlEvent per assicurarsi che il controller del modulo possa elaborare gli eventi di controllo, operazione che deve eseguire per funzionare correttamente. I valori passati a questo metodo sono gli stessi valori passati al metodo OnControlEvent .

IsValid
BOOL IsValid(void)

Questo metodo restituisce lo stato della convalida più recente del modulo. Se uno dei validator di controllo ha segnalato un errore, questo metodo restituisce FALSE. In altre parole, restituisce TRUE solo se tutti i controlli nella pagina sono validi.

Interfaccia IValidator

__interface IValidator : IUnknown
{
    HRESULT Init(IControl *pControl, LPCTSTR message);
    HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties);
    BOOL, IsValid(LPBSTR pMessage);
    HRESULT SetProperty(int propertyId, LPVARIANT pValue);
    HRESULT SetProperty(int propertyId, IUnknown *pUnknown);
    HRESULT SetProperty)(int propertyId, LPCTSTR pValue);
};
Panoramica

I validator sono componenti in grado di convalidare un singolo controllo nella pagina. Il modo più semplice per implementare un validator consiste nel renderlo una sottoclasse della classe BaseValidator , definita nel file di intestazione BaseValidator.h.

HRESULT Init(IControl *pControl, messaggio LPCTSTR)

Se si crea un validator nel codice, è possibile chiamare questo metodo per inizializzare il validator. Vedere la tabella 39.

Tabella 39. HRESULT Init

Parametro Descrizione
pControl Controllo che il validator deve convalidare
Messaggio Messaggio da visualizzare nella pagina se il controllo non è valido
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)

Il controller del modulo chiama questo metodo per inizializzare i validator creati in base al codice XML della pagina. Vedere la tabella 40.

Tabella 40. HRESULT Init, metodo

Parametro Descrizione
pControl Controllo che il validator deve convalidare
pContainer Nel caso in cui il validator debba accedere al logger o debba creare altri componenti
pProperties Fornisce l'accesso alle proprietà (elementi setter) per il validator
BOOL, IsValid(LPBSTR pMessage)

Questo metodo restituisce TRUE se il controllo è valido o FALSE se il controllo non è valido. Al momento della restituzione, pMessage deve essere compilato con un nuovo BSTR che contiene il messaggio da visualizzare quando il controllo non è valido.

HRESULT SetProperty(int propertyId, LPVARIANT pValue)

È possibile implementare questo metodo se sono necessari valori aggiuntivi non forniti nel codice XML.

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

È possibile implementare questo metodo se sono necessari valori aggiuntivi non forniti nel codice XML.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

È possibile implementare questo metodo se sono necessari valori aggiuntivi non forniti nel codice XML.

Interfaccia IRegEx

__interface IRegEx : IUnknown
{
    BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);
    HRESULT GetMatch(size_t index, LPBSTR pValue);
};

Questo metodo viene implementato dal componente ID_Regex (IRegex.h) e fornisce il supporto per l'elaborazione di espressioni regolari.

BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)

Questo metodo esegue l'espressione regolare sul testo di input. Usa la funzione regex_match della libreria standard C++ per eseguire il lavoro effettivo. Il metodo restituisce TRUE se sono presenti corrispondenze, in caso contrario FALSE.

HRESULT GetMatch(size_t index, LPBSTR pValue)

Questo metodo consente di recuperare le corrispondenze dalla chiamata MatchesRegex più recente. Si noti che non è presente alcun errore di elaborazione in questo metodo e restituisce S_OK o genera un'eccezione.

Interfaccia ISummaryInfo

__interface ISummaryInfo : IUnknown
{
    size_t Count(void);
    HRESULT Clear(void);
    HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);
    HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);
    HRESULT GetCaption(LPBSTR pCaption);
    HRESULT SetCaption(LPCTSTR caption);
};

Non è necessario usare questa interfaccia direttamente. Usare invece IFormController.

ISummaryBag

__interface ISummaryBag : IUnknown
{
    size_t Count(void);
    HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);
    HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);
};

Non è necessario usare questa interfaccia direttamente. Usare invece IFormController.

Interfaccia ITSVariableBag

__interface ITSVariableBag : IUnknown
{
    void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue);
    void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue);
    void Clear(void);
    HRESULT Remove([in] LPCTSTR variableName);
    HRESULT SuppressLogValue([in] LPCTSTR variableName);
    void Save(void);
};

Questa interfaccia consente l'accesso alle variabili della sequenza di attività. È possibile accedere a questa interfaccia usando il metodo TSVariables() della pagina.

void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)

Questo metodo legge il valore di una variabile della sequenza di attività.

Nota

I valori vengono memorizzati nella cache dopo la prima lettura.

void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)

Questo metodo imposta il valore di una variabile della sequenza di attività. Questo valore viene salvato in memoria. I valori della sequenza di attività vengono scritti dopo aver selezionato Fine nella Procedura guidata UDI.

void Clear(void)

Questo metodo rimuove tutti i valori della sequenza di attività salvati in memoria.

HRESULT Remove([in] LPCTSTR variableName)

Questo metodo rimuove dalla memoria un valore specifico della sequenza di attività. La volta successiva che chiami GetValue con lo stesso nome della sequenza di attività, il metodo tenta di recuperarlo dalla sequenza di attività.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Ogni volta che vengono scritte variabili della sequenza di attività, ad esempio quando si seleziona Fine nella Procedura guidata UDI, i nomi e i valori vengono scritti nel file di log. Chiamare questo metodo per eliminare la registrazione di valori sensibili, ad esempio password o PIN, per una variabile della sequenza di attività specifica.

void Save(void)

Questo metodo salva tutti i valori della sequenza di attività impostati con chiamate a SetValue.

Interfaccia ITSVariableRepository

__interface ITSVariableRepository : IUnknown
{
    void GetValue([in] LPCTSTR variableName, BOOL logValue, [out] LPBSTR pValue);
    void SetValue([in] LPCTSTR variableName, BOOL logValue, [in] LPCTSTR value);
};

Questa interfaccia è destinata all'uso interno di TSVariableBag per la lettura e la scrittura di variabili della sequenza di attività.

Interfaccia IWizardFinish

__interface IWizardFinish : IUnknown
{
    HRESULT Canceled(void);
    HRESULT Finished(void);
};

Questa interfaccia è utile negli scenari avanzati in cui si vuole eseguire un'elaborazione aggiuntiva quando si seleziona Fine o Annulla nella Procedura guidata UDI. La Procedura guidata UDI contiene un'attività Fine che salva le variabili della sequenza di attività quando si seleziona Fine. Se si annulla la procedura guidata, l'attività imposta solo la variabile della sequenza di attività OSDSetupWizCancelled su TRUE e non salva le modifiche apportate ad altre variabili della sequenza di attività.

Se si crea un componente di fine personalizzato, è necessario registrarlo con codice simile al seguente:

Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);

PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);

PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);

pService->Register(pFinish);

Interfaccia IBindableList

__interface IBindableList : IUnknown
{
    size_t Count(void);
    HRESULT GetCaption(size_t index, LPBSTR pCaption);
};

Implementare questa interfaccia se si dispone di un componente di origine dati da associare a una casella combinata chiamando il relativo metodo Bind .

size_t Count(void)

Questo metodo restituisce il numero di elementi nell'elenco.

HRESULT GetCaption(size_t index, LPBSTR pCaption)

Questo metodo restituisce il didascalia dell'elemento in corrispondenza di un indice specifico.

Interfaccia IDataNodes

__interface IDataNodes : IUnknown
{
    size_t Count();
    HRESULT SetCaptionProperty(LPCTSTR captionProperty);
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue);
    HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode);
};

Questa interfaccia consente l'accesso ai dati gerarchici che possono essere salvati in una pagina. È possibile ottenere questa interfaccia tramite metodi nell'interfaccia ISettingsProperties , disponibile per la pagina tramite il metodo Settings .

I dati nel codice XML di una pagina possono essere simili al seguente

      <Data Name="Network">
        <DataItem>
          <Setter Property="DisplayName">Public</Setter>
          <Setter Property="Share">\\servername\Share</Setter>
        </DataItem>
        <DataItem>
          <Setter Property="DisplayName">Dev Team</Setter>
          <Setter Property="Share">\\servername\DevShare</Setter>
        </DataItem>
      </Data>

La chiamata di Settings()->GetDataNode(L"Network", &pData) offre un'istanza di IDataNodes con due elementi di dati (ognuno dei quali a sua volta ha due proprietà).

size_t Count()

Questo metodo restituisce il numero di elementi DataItem .

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

Il componente che supporta questa interfaccia supporta anche IBindableList, che semplifica la compilazione di una casella combinata con i dati dal codice XML della pagina. Questo metodo controlla quale proprietà (setter) in ogni elemento DataItem verrà usata per l'associazione. Ad esempio, è possibile chiamare questo metodo con DisplayName e usare la proprietà setter per il data binding. La casella combinata conterrà quindi Public e Dev Team come elementi.

HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)

Questo metodo ottiene una proprietà da uno degli elementi DataItem . Vedere la tabella 41 e la tabella 42.

Tabella 41. DataItem GetProperty

Parametro Descrizione
Indice Valore di indice (a partire da 0) dell'oggetto DataItem per cui si vuole recuperare un valore di proprietà
propertyName Nome della proprietà setter per cui si desidera recuperare un valore
Propertyvalue In caso di restituzione, contiene il valore stringa di una proprietà

Tabella 42. HRESULT GetProperty

HRESULT Descrizione
S_OK La proprietà è stata recuperata.
E_INVALIDARG L'indice è oltre la fine della matrice.
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)

Questo metodo è simile a GetProperty, ma invece di restituire un valore da un oggetto DataItem, restituisce l'intero oggetto DataItem di cui è stato eseguito il wrapping in un'interfaccia ISettingsProperties . Vedere la tabella 43 e la tabella 44.

Tabella 43. HRESULT GetNode

Parametro Descrizione
Indice Valore di indice (a partire da 0) dell'oggetto DataItem per cui si vuole recuperare un valore di proprietà
ppNode All'uscita, l'interfaccia ISettingsProperties che esegue il wrapping del nodo DataItem

Tabella 44. Risultati di HRESULT GetNode

HRESULT Descrizione
S_OK Il nodo è stato recuperato.
E_INVALIDARG L'indice è oltre la fine della matrice.

Interfaccia IFactoryRegistry

__interface IFactoryRegistry : IUnknown
{
    void Register(LPCTSTR type,  IClassFactory *pFactory);
    HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);
    BOOL Contains(LPCTSTR type);
    HRESULT GetFactory(LPCTSTR type,  IClassFactory **ppFactory);
    HRESULT CreateInstance(LPCTSTR type,  IUnknown **ppInstance);
    HRESULT SetContainer(IWizardPageContainer *pContainer);
    HRESULT RegisterService(REFGUID iid, IUnknown *pService);
    HRESULT GetService(REFGUID iid,  IUnknown **ppService);
};
Panoramica

Quando si crea una nuova pagina personalizzata, è necessario creare almeno una factory di pagine, ovvero una classe che implementa IClassFactory. È possibile usare ClassFactoryImpl come classe di base per la factory.

void Register(LPCTSTR type, IClassFactory *pFactory)

Questo metodo registra una class factory nel Registro di sistema. Vedere la tabella 45.

Tabella 45. IClassFactory void Register

Parametro Descrizione
Tipo Stringa che identifica la factory che si sta registrando; in genere, questo parametro deve avere il nome della società nella stringa per assicurarsi che sia univoco
pFactory Puntatore all'istanza di class factory
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)

Questo metodo è solo per uso interno.

BOOL Contains(tipo LPCTSTR)

Questo metodo è in genere per uso interno. Verifica se una class factory è stata registrata per un tipo.

HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory)

Questo metodo consente di recuperare la class factory. In genere, si chiama CreateInstance. Tuttavia, se si intende creare un numero elevato dello stesso componente, è più efficiente recuperare la factory e quindi chiedere di creare automaticamente le istanze.

HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance)

Questo metodo crea una nuova istanza di un componente, in base al relativo tipo. Usare invece il metodo modello CreateInstance , che consente la creazione di oggetti indipendenti dai tipi.

HRESULT SetContainer(IWizardPageContainer *pContainer)

Questo metodo è solo per uso interno.

HRESULT RegisterService(REFGUID iid, IUnknown *pService)

I servizi sono singole istanze di un componente che possono essere usate in più posizioni. È possibile utilizzare questo metodo per registrare un servizio in una pagina e quindi recuperare la stessa istanza da un'altra pagina.

HRESULT GetService(REFGUID iid, IUnknown **ppService)

Questo metodo recupera un servizio registrato in precedenza con una chiamata a RegisterService.

HRESULT SetLanguage(LANGID languageId)

Questo metodo imposta la lingua della Procedura guidata UDI sull'identificatore di lingua specificato nel parametro languageId .

LANGID GetLanguage()

Questo metodo restituisce il valore dell'identificatore di lingua specificato con il parametro della riga di comando /locale per la Procedura guidata UDI. Il metodo restituisce uno dei valori seguenti:

  • Valore dell'identificatore di lingua fornito con il parametro della riga di comando /locale

  • 0, se non è stato specificato il parametro della riga di comando /locale

Interfaccia ILogger

__interface ILogger : IUnknown
{
    HRESULT Init(LPCWSTR logFilename);
    HRESULT MoveLog(LPCWSTR logFilename);
    HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message);
    HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message);
    HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message);
    HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2);
    HRESULT Normal(LPCTSTR component, LPCTSTR message);
    HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);
    HRESULT Verbose(LPCTSTR component, LPCTSTR message);
    HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);
    HRESULT Debug(LPCWSTR component, LPCWSTR message);
    HRESULT EnableDebug(BOOL debug);
    HRESULT Close(void);
    HRESULT GetLogFilename(LPBSTR pFilename);
};
Panoramica

La Procedura guidata UDI registra le informazioni in un file di log, che consente di risolvere i problemi rilevati nel campo. È consigliabile che le pagine registrino le informazioni. È possibile ottenere un puntatore a questa interfaccia dall'interno della pagina usando il metodo Logger() della pagina. Le righe nel file di log contengono un numero di "livello" che rappresenta messaggi di errore, normali, dettagliati o di debug.

Nota

I messaggi di debug non vengono salvati nel file di log a meno che il supporto per il debug non sia attivato. È possibile attivare il supporto per il debug aggiungendo la riga seguente all'elemento Style nel file .config:

<Setter Property="debug">true</Setter>
Init
HRESULT Init(LPCWSTR logFilename)

Questo metodo è solo per uso interno.

MoveLog
HRESULT MoveLog(LPCWSTR logFilename)

Questo metodo è solo per uso interno.

LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)

Questo metodo è solo per uso interno.

Log
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)

Questo metodo è solo per uso interno.

Error
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)

Chiamare questo metodo per registrare informazioni su un errore. Vedere la tabella 46.

Tabella 46. Errore HRESULT

Parametro Descrizione
Errore Codice di errore restituito da una chiamata (questo codice verrà visualizzato nella voce di log come numero).
Componente Stringa che identifica l'origine dell'errore, che è in genere la pagina o il componente scritto
Messaggio Messaggio che spiega cosa ha causato l'errore
Errore2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)

Questo metodo è simile al metodo Error , ma consente di fornire un messaggio in due parti. Il messaggio finale avrà "message" e quindi "message2" nel file di output. Si tratta semplicemente di un metodo pratico.

Normale
HRESULT Normal(LPCTSTR component, LPCTSTR message)

Questo metodo registra un messaggio normale. Vedere la descrizione del metodo Error per i parametri.

Normale2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)

Questo metodo registra un messaggio normale. Vedere la descrizione del metodo Error2 per i parametri.

Dettagliato
HRESULT Verbose(LPCTSTR component, LPCTSTR message)

Questo metodo registra un messaggio dettagliato. Vedere la descrizione del metodo Error per i parametri.

Dettagliato 2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)

Questo metodo registra un messaggio dettagliato. Vedere la descrizione del metodo Error2 per i parametri.

Debug
HRESULT Debug(LPCWSTR component, LPCWSTR message)

Questo metodo registra un messaggio di debug. Vedere la descrizione del metodo Error per i parametri. I messaggi di debug non vengono salvati nel file a meno che non siano abilitati. Per informazioni dettagliate, vedere la sezione Panoramica.

EnableDebug
HRESULT EnableDebug(BOOL debug)

Questo metodo è solo per uso interno.

Chiusura
HRESULT Close(void)

Questo metodo è solo per uso interno.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)

Questo metodo recupera il nome del file di log.

Interfaccia IOrientation

__interface IOrientation : IUnknown
{
    void SetController(IWizardDialogController *pController);
    int AddPage(LPCTSTR name);
    void SelectPage(int index);
};

Questa interfaccia è solo per uso interno.

Interfaccia ISettings

__interface ISettings : IUnknown
{
    int NumDlls();
    int NumPages();

    HRESULT SetStage(LPCWSTR stageName);
    HRESULT GetDllName(long index, __out LPBSTR pDllName);
    HRESULT GetPageInfo(long index, __out ISettingsProperties **ppPageInfo);
    HRESULT GetStyle(__out ISettingsProperties **ppStyleInfo);
};

Questa interfaccia è solo per uso interno.

Interfaccia ISettingsProperties

__interface ISettingsProperties : IUnknown
{
    HRESULT GetAttribute(LPCTSTR attributeName, __out LPBSTR attributeValue);
    IStringProperties * Properties();
    HRESULT SelectNodes(LPCTSTR xPath, __out IXMLDOMNodeList **ppList);
    HRESULT SelectSingleNode(LPCTSTR xPath, __out IXMLDOMNode **ppNode);
    HRESULT GetDataNode(LPCTSTR name, __out ISettingsProperties **ppNode);
    HRESULT GetDataNodes(__out IDataNodes **ppNodes);
    HRESULT GetChildDataNodes(LPCTSTR childeName, __out IDataNodes **ppNodes);
};
Panoramica

Questa interfaccia consente l'accesso ai dati della pagina. Per ottenere il livello superiore dei dati della pagina, usare il metodo Settings() della pagina.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

Questo metodo consente di recuperare i valori degli attributi nel nodo principale, ovvero il nodo Page quando si usa il metodo Settings() della pagina.

IStringProperties * Properties()

Questo metodo consente di accedere ai valori della proprietà setter nel nodo principale. Per una pagina, queste sono le proprietà di primo livello.

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

Chiamare questo metodo se si vuole ottenere direttamente un elenco di nodi XML usando un'espressione XPath. È preferibile usare uno degli altri metodi, se possibile. Usare questo metodo solo se non è possibile accedere ai nodi in altro modo.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

Chiamare questo metodo se si vuole ottenere direttamente un singolo nodo XML usando un'espressione XPath. È preferibile usare uno degli altri metodi, se possibile. Usare questo metodo solo se non è possibile accedere a un nodo in altro modo.

HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)

Recuperare un elemento Data basato sull'attributo Name di tale elemento.

HRESULT GetDataNodes(IDataNodes **ppNodes)

Questo metodo recupera un elenco di elementi DataItem nel nodo corrente. Dal livello di pagina chiamare GetDataNode per recuperare un'interfaccia ISettingsProperty per i dati. Quindi, in tale istanza, chiamare GetDataNodes per recuperare l'elenco di record. Ad esempio, dato il codice XML seguente:

    <Page ...>
      <Data Name="Network">
        <DataItem>
          <Setter Property="DisplayName">Public</Setter>
          <Setter Property="Share">\\servername\Share</Setter>
        </DataItem>
        <DataItem>
          <Setter Property="DisplayName">Dev Team</Setter>
          <Setter Property="Share">\\servername\DevShare</Setter>
        </DataItem>
      </Data>
PSettingsProperties pData;
Settings()->GetDataNode(L"Network", &pData);
PDataNodes pNodes;
pData->GetDataNodes(&pNodes);
HRESULT GetChildDataNodes(LPCTSTR childeName, IDataNodes **ppNodes)

Questo metodo consente di accedere rapidamente al set di nodi DataItem in un nodo Dati specifico. Usando il codice XML dell'esempio GetDataNodes , il codice seguente esegue esattamente la stessa operazione delle quattro righe di codice nell'esempio in GetDataNodes , ma con il controllo degli errori:

ISimpleStringProperties Interface

Interfaccia ISimpleStringProperties

__interface ISimpleStringProperties : IStringProperties
{
void Add(LPCTSTR propertyName, LPCTSTR value);
};

Di per sé, questa interfaccia potrebbe non essere utile. Tuttavia, viene implementato dal componente ID_SimpleStringProperties , che implementa anche l'interfaccia IStringProperties . È possibile usare questo componente nei casi in cui è necessario passare un set di proprietà a un altro componente, ad esempio un'attività, ma si desidera aggiungere valori a livello di codice anziché usare valori da XML. Ecco un esempio di come usare questa interfaccia:

PSimpleStringProperties *pProperties;
CreateInstance(Container(), ID_SimpleStringProperties, &pProperties);
pProperties->Add(L"filename", L"%windir%\\system32\\cscript.exe");
pTask->Init(pProperties, nullptr);
IStringProperties
__interface IStringProperties : IUnknown
{
    HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue);
};

Questa interfaccia fornisce un accesso semplice a un set di elementi setter provenienti da XML. Questa interfaccia è disponibile per le proprietà di una pagina usando Settings()->Properties().

HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)

Questo metodo recupera un singolo valore della proprietà. Vedere la tabella 47 e la tabella 48.

Tabella 47. Valore della proprietà Get IHRESULT

Parametro Descrizione
propertyName Nome della proprietà da leggere
pPropValue All'uscita, contiene il valore della proprietà come stringa .This value will be nullptr if there is no such property.)

Tabella 48. Risultati del valore della proprietà IHRESULT Get

HRESULT Descrizione
S_OK Il valore della proprietà viene recuperato.
E_INVALIDARG Non esiste alcuna proprietà con il nome specificato.

Interfaccia ITaskManager

__interface ITaskManager : IUnknown
{
    HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback);
    HRESULT SetFailMessage(LPCWSTR message);

    HRESULT Start(void);

    HRESULT GetTaskMessage(size_t index, LPBSTR message);
    HRESULT GetResultType)(size_t index, LPBSTR type);
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value);
    int GetSelectedIndex(void);
    HRESULT Wait(DWORD waitMilliseconds);
    size_t FailedCount(void);
    size_t WarningCount(void);
    size_t SucceedCount(void);
    size_t RunningCount(void);

    void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo);
    void OnControlEvent(WORD eventId, WORD controlId);
    void EnableButtons(BOOL enable);
}

Questa interfaccia viene implementata dal componente TaskManager (ID_TaskManager in ITaskManager.h), ovvero il componente che esegue le attività nella pagina preliminare. È possibile usare direttamente la pagina di verifica preliminare, che è la procedura più frequente, oppure creare una pagina personalizzata, consentendo a questo componente di eseguire la maggior parte del lavoro.

HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)

È necessario chiamare questo metodo prima di chiamare qualsiasi altro metodo. Inizializza il componente TaskManager . Vedere la tabella 49.

Tabella 49. HRESULT Init

Parametro Descrizione
pPageView Fornisce l'accesso alla pagina che eseguirà le attività (questa pagina deve avere un set specifico di controlli, descritti nei parametri successivi).
idListView ID di controllo di un controllo ListView che visualizzerà l'elenco delle attività e lo stato di tali attività
idMessage ID di controllo di una casella di testo che verrà usato per visualizzare un messaggio per l'attività selezionata
idRetryButton ID di controllo di un pulsante che è possibile selezionare per eseguire di nuovo le attività
pPageInfo Wrapper intorno all'XML della pagina (TaskManager carica il set di attività da eseguire da questo XML).
pCallback Può essere null (se questo parametro non è Null, TaskManager chiama il metodo Started quando avvia un'attività e il metodo Finished per ogni attività che termina l'esecuzione.
HRESULT SetFailMessage(messaggio LPCWSTR)

Questo metodo imposta il messaggio che verrà visualizzato se una o più attività hanno esito negativo.

HRESULT Start(void)

Questo metodo avvia tutte le attività. Ogni attività viene avviata in un thread separato.

HRESULT GetTaskMessage(indice size_t, messaggio LPBSTR)

Questo metodo è solo per uso interno. Recupera il messaggio corrente per un'attività in base al relativo indice nell'elenco delle attività.

HRESULT GetResultType)(indice size_t, tipo LPBSTR)

Questo metodo recupera il "tipo" corrente per un'attività. La tabella 50 mostra i tipi disponibili.

Tabella 50. HRESULT GetResultType

Tipo Descrizione
0 Rappresenta un'attività completata
1 Rappresenta un'attività che ha restituito un avviso
-1 Rappresenta un'attività non riuscita

Il tipo viene recuperato esaminando il codice di uscita o di errore dell'attività e individuando una corrispondenza nell'elemento XML ExitCodes> dell'attività<.

HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value)

Questo metodo viene usato dalle pagine di avanzamento e verifica preliminare per recuperare la proprietà setter BitmapFilename in modo che possa visualizzare un'immagine accanto al messaggio per l'attività evidenziata. In altre parole, è possibile aggiungere un setter personalizzato al codice XML dell'attività e quindi recuperarlo con questo metodo.

int GetSelectedIndex(void)

Questo metodo recupera l'indice dell'attività attualmente selezionata, utile se si desidera recuperare informazioni aggiuntive sull'attività (vedere metodo GetProperty ) da visualizzare per l'attività selezionata. Le pagine di avanzamento e verifica preliminare usano questo metodo per visualizzare un'immagine per l'attività selezionata.

HRESULT Wait(DWORD waitMilliseconds)

Questo metodo consente principalmente di usare unit test in modo che il test possa garantire che le attività vengano completate prima dell'uscita dallo unit test. In genere non si chiama questo metodo. Restituisce quando tutte le attività terminano l'esecuzione o il tempo di attesa è trascorso.

size_t FailedCount(void)

Questo metodo restituisce il numero di attività attualmente contrassegnate come non riuscite.

size_t WarningCount(void)

Questo metodo restituisce il numero di attività attualmente contrassegnate come avviso.

size_t SucceedCount(void)

Questo metodo restituisce il numero di attività attualmente contrassegnate come completate.

size_t RunningCount(void)

Questo metodo restituisce il numero di attività attualmente in esecuzione.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

Chiamare questo metodo da OnCommonControlEvent della pagina in modo che TaskManager possa elaborare gli eventi necessari.

void OnControlEvent(WORD eventId, WORD controlId)

Chiamare questo metodo da OnControlEvent della pagina in modo che TaskManager possa elaborare gli eventi necessari.

void EnableButtons(BOOL enable)

Questo metodo è solo per uso interno.

Interfaccia IWizardComponent

__interface IWizardComponent : IUnknown
{
    HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Panoramica

In genere, questa interfaccia non verrà implementata direttamente, ma tramite la classe modello WizardComponent . Se il componente implementa questa interfaccia ed è stata registrata una class factory con il Registro di sistema, il componente riceve un puntatore all'istanza di IWizardPageContainer al momento della creazione. Ciò consente, ad esempio, di accedere al Logger o al Registro di sistema per la creazione di altri componenti che potrebbero essere necessari al componente.

Interfaccia IWizardDialogController

__interface IWizardDialogController : IUnknown
{
    void Initialize(ISettings *pSettings);
    void InitPages(void);
    void Start();
    void Next();
    void Finish();
    void Previous();
    int NumPages();
    void Cancel();

    HRESULT Focus(WizardButtons button);
    HRESULT SetEnable(WizardButtons button, BOOL enable);
    void ShowWarningMessage(LPCTSTR message);
    void HideWarningMessage();

    void ChangePage(size_t newIndex);
    IUnknown *CurrentPage(void);
    HRESULT GetCurrentTitle([out, retval] LPBSTR pDisplayName);
};

Questa interfaccia è solo per uso interno.

Interfaccia IWizardDialogView

__interface IWizardDialogView : IUnknown
{
    HRESULT LoadBannerImage(LPCTSTR bannerFilename);
    HRESULT LoadPage(LPCTSTR pageType, ISettingsProperties *pPageSettings, IWizardPageView **view);
    HRESULT SetEnable(WizardButtons button, BOOL enable);
    HRESULT Focus(WizardButtons button);
    void EnableFinish(BOOL isFinish);
    void Exit(int exitCode);
    void ShowWarningMessage(LPCTSTR message);
    void HideWarningMessage(void);
    void SetTitle(LPCTSTR title);
    void SetPageTitle(LPCTSTR title);
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);
    HWND GetHwnd(void);
    void UpdateFocus(void);
};

Questa interfaccia è solo per uso interno.

Interfaccia IWizardPage

__interface IWizardPage : IUnknown
{
    HRESULT SetPageSettings(ISettingsProperties *pPageSettings);
    HINSTANCE GetInstanceHandle(void);
    int GetDialogResourceId(void);
    void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);
    void WindowShown(void);
    void WindowHidden(void);

    HRESULT NextSelected(void);
    void ControlEvent(WORD eventId, WORD controlId);
    void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);
    void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
};
Panoramica

Questa interfaccia viene implementata da WizardPageImpl, quindi in genere non è necessario implementarla manualmente. La procedura guidata chiama tutti questi metodi quando interagisce con le pagine personalizzate.

Interfaccia IWizardPageContainer

__interface IWizardPageContainer : IUnknown
{
    ILogger * Logger(void);
    IPropertyBag * Properties(void);
    HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance);
    HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance);
    HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest);
    HRESULT GotoPage(LPCTSTR pageName);
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);
    BOOL InPreview(void);
    HWND GetHwnd(void);
};
Panoramica

Questa interfaccia è disponibile per la pagina tramite il metodo Container (implementato da WizardPageImpl) e consente di accedere a vari servizi della procedura guidata.

ILogger * Logger(void)

Utilizzare questo metodo per scrivere messaggi nel file di log, ad esempio:

Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * Properties(void)

Questo metodo consente l'accesso alle variabili "memory", ovvero proprietà in memoria solo durante l'esecuzione della Procedura guidata UDI. Queste proprietà sono disponibili per altre pagine nel codice o nel codice XML usando la sintassi $memoryVarName$ .

HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance)

Questo metodo consente di creare una nuova istanza di qualsiasi componente registrato. È tuttavia preferibile usare la funzione modello CreateInstance, perché è fortemente tipizzata.

HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance)

Questo metodo consente di recuperare un servizio registrato. Tuttavia, è preferibile chiamare la funzione modello GetService , fortemente tipizzata (invece di usare IUnknown).

HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)

Questo metodo gestisce l'uso di variabili all'interno di valori stringa. Supporta i formati illustrati nella tabella 51 e nella tabella 52.

Tabella 51. HRESULT ReplaceVariables

Formato Descrizione
$Name$ Sostituisce il valore di una variabile di memoria con questo nome (se non è presente alcuna variabile di memoria con il nome, il "token" verrà rimosso.
%Name% Una variabile della sequenza di attività o una variabile di ambiente. L'ordine è il seguente:

1. Utilizzare il valore di una variabile della sequenza di attività, se presente.
2. Utilizzare il valore di una variabile di ambiente, se presente.
3. In caso contrario, rimuovere il testo dalla stringa.

Tabella 52. Parametro HRESULT

Parametro Descrizione
Source Stringa di input, che può contenere qualsiasi combinazione di $ variabili e % o nessuna
pDest In caso di restituzione, contiene una nuova stringa con tutti i token sostituiti in base alla tabella 51
HRESULT GotoPage(LPCTSTR pageName)

Questo metodo non è stato completamente testato. L'idea è che sia possibile passare direttamente a una pagina specifica in base al nome della pagina, come definito nel file XML .config. La chiamata a questo metodo ignora OnNextSelected nella pagina. Inoltre, il comportamento di questo metodo è soggetto a modifiche, quindi usarlo a proprio rischio.

int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)

Questo metodo visualizza una finestra di messaggio con il testo e didascalia forniti. Il parametro uType è qualsiasi valore che è possibile fornire alla funzione MessageBox Win32.

BOOL InPreview(void)

Questo metodo restituisce TRUE se la procedura guidata è stata avviata in modalità "anteprima" specificando l'opzione /preview . In modalità anteprima il pulsante Avanti non è mai disabilitato. Questo metodo consente di ignorare il codice in modalità anteprima, ad esempio, che potrebbe causare problemi quando non si dispone di dati validi nella pagina.

HWND GetHwnd(void)

Questo metodo restituisce il valore HWND per la finestra di dialogo principale. Usare questo metodo con attenzione. In genere, l'interfaccia di programmazione dell'applicazione UDI Wizard è progettata in modo che non si lavori mai direttamente con gli handle di finestra.

Interfaccia IWizardPageView

__interface IWizardPageView : IUnknown
{
    HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown **ppControl);
    HWND GetHwnd(void);
    HWND GetControl(int itemId);
    HRESULT Show (void);
    HRESULT Hide(void);
    HRESULT Focus(int itemId);
    IWizardPage * Page(void);
    IFormController * Form(void);

    HRESULT FocusWizardButton(WizardButtons button);
    HRESULT SetEnable(WizardButtons button, BOOL enable);
    void ShowWarningMessage(LPCTSTR message);
    void HideWarningMessage(void);
};

Questa interfaccia è disponibile per il codice nella pagina tramite il metodo View (implementato da WizardPageImpl).

HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown *ppControl)

La Procedura guidata UDI usa wrapper, che sono in realtà facciate per interagire con i controlli nella pagina. L'uso di queste facciate anziché dei controlli effettivi rende molto più semplice scrivere test per la pagina, perché è possibile fornire finte facciate dai test.

Invece di usare questo metodo direttamente, è preferibile usare il metodo modello GetControlWrapper , fortemente tipizzato, ad esempio:

PComboBox m_pLanguagePackCombo;
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);
HWND GetHwnd(void)

Questo metodo restituisce l'handle della finestra per la pagina. In genere, non è necessario accedere a questo handle di finestra.

HWND GetControl(int itemId)

Se necessario, è possibile chiamare questo metodo per ottenere l'handle della finestra per un controllo nella pagina. È preferibile chiamare la funzione modello GetControlWrapper .

HRESULT Show (void)

Questo metodo è solo per uso interno.

HRESULT Hide(void)

Questo metodo è solo per uso interno.

HRESULT Focus(int itemId)

Impostare lo stato attivo di input su un controllo specifico.

IWizardPage * Page(void)

Questo metodo è solo per uso interno.

IFormController * Form(void)

Questo metodo è solo per uso interno.

HRESULT FocusWizardButton(pulsante WizardButtons)

Imposta lo stato attivo su uno dei pulsanti della procedura guidata. WizardButtons ha due valori: BackButton e NextButton.

HRESULT SetEnable(pulsante WizardButtons, BOOL enable)

Richiedere che uno dei pulsanti della procedura guidata sia abilitato o disabilitato. Il pulsante potrebbe non corrispondere allo stato richiesto. Ad esempio, se si esegue la Procedura guidata UDI con l'opzione /preview , i pulsanti saranno sempre abilitati. WizardButtons ha due valori: BackButton e NextButton.

void ShowWarningMessage(LPCTSTR message)

Questo metodo visualizza un messaggio di avviso nella parte inferiore dell'area del contenuto della pagina. Questo messaggio può essere qualsiasi testo desiderato.

void HideWarningMessage(void)

Nascondere un messaggio di avviso visualizzato con una chiamata a ShowWarningMessage.

Interfaccia IXmlDocument

__interface IXmlDocument : IUnknown
    HRESULT Load(LPCTSTR filename);
    HRESULT LoadXml(LPCTSTR xml);
    HRESULT Save(LPCWSTR filename);
    HRESULT GetParseErrorMessage(LPBSTR pMessage);
    HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes);
    HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode);
    HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns);
    HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value);
    HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode);
};
Panoramica

Questa interfaccia viene implementata dal componente ID_IXmlDocument , che è una facciata progettata per semplificare l'uso dei documenti XML in C++.

Caricamento HRESULT(LPCTSTR nome file)

Questo metodo carica un documento XML da un file esterno. Restituisce S_OK se il file è stato caricato senza errori o S_FALSE se si è verificato un errore. Quando si verifica un errore, è possibile ottenere il messaggio di errore chiamando GetParseErrorMessage.

HRESULT LoadXml(LPCTSTR xml)

Questo metodo carica un documento XML da una stringa anziché da un file esterno. Oltre all'origine per la lettura del codice XML, il comportamento è lo stesso del metodo Load .

HRESULT Save(LPCWSTR filename)

Questo metodo salva il documento XML in memoria in un file esterno.

HRESULT GetParseErrorMessage(LPBSTR pMessage)

Questo metodo restituisce una nuova stringa con il messaggio di errore dal caricamento del documento XML, se presente. Restituisce sempre S_OK.

HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)

Questo metodo consente di usare un'espressione XPath per recuperare una raccolta di nodi dal documento. Restituisce sempre S_OK.

HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)

Questo metodo consente di usare un'espressione XPath per recuperare un nodo dal documento. Restituisce sempre S_OK.

HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns)

Questo metodo aggiunge il nome di un file di schema esterno che verrà usato per convalidare lo schema del documento XML al momento del caricamento. Lo spazio dei nomi specificato è la stringa che è possibile usare nelle query XPath, anche se non è stato testato.

HRESULT AddAttribute(IXMLDOMNode *pNode, nome LPCWSTR, valore LPCWSTR)

Questo metodo aggiunge un nuovo attributo a un nodo esistente nel documento XML. Vedere la tabella 53.

Tabella 53. HRESULT AddAttribute

Parametro Descrizione
Pnode Nodo a cui si vuole aggiungere un attributo
Nome Nome del nuovo attributo
Valore Valore per il nuovo attributo
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode)

Chiamare questo metodo per creare un nuovo nodo:

Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);

Dopo aver creato un nuovo nodo, è possibile aggiungerlo come figlio a un altro nodo chiamando il metodo appendChild dell'elemento padre.

Funzioni helper

Funzione modello CreateInstance

HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)

Questa funzione è definita in IWizardPageContainer.h e fornisce un wrapper indipendente dai tipi tramite il metodo IWizardPageContainer-CreateInstance>, ad esempio:

CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);

Questo codice crea un nuovo componente ID_Directory per recuperare l'interfaccia IDirectory di tale componente.

Funzione modello GetService

void GetService(IWizardPageContainer *pContainer, I **ppService)

Questa funzione è definita in IWizardPageContainer.h e fornisce un wrapper indipendente dai tipi tramite il metodo IWizardPageContainer-GetService>, ad esempio:

GetService<ITSVariableBag>(Container(), &pTsBag);

Questa funzione recupera il componente della sequenza di attività, che supporta l'interfaccia ITSVariableBag . Per ITSVariableBag, è invece possibile usare il metodo TSVariables della classe WizardPageImpl .

Informazioni di riferimento sullo schema del file di configurazione Designer creazione guidata UDI

Questo file viene utilizzato dalla procedura guidata UDI Designer. Viene creato un file separato per ogni file di .dll personalizzato, che può contenere editor di pagine personalizzate della procedura guidata, attività personalizzate o convalidatori personalizzati. Il file deve terminare con .config e risiedere nella cartella installation_folder\Bin\Config (dove installation_folder è la cartella in cui È stato installato MDT).

Nella tabella 54 sono elencati gli elementi della Procedura guidata UDI Designer file di configurazione e le relative descrizioni. L'elemento DesignerConfig è il nodo radice per questo riferimento.

Tabella 54. Elementi della procedura guidata UDI Designer file di configurazione e relative descrizioni

Nome elemento Descrizione
DesignerConfig Specifica la radice per tutti gli altri elementi
DesignerMappings Raggruppa un set di elementi Page
Pagina Specifica un editor di pagine della procedura guidata da caricare nella Designer della Procedura guidata UDI, utilizzata per modificare le impostazioni di configurazione per una pagina della procedura guidata
Param Specifica un parametro passato all'elemento padre Task o Validator e corrisponde a un elemento Setter nel file di configurazione della Procedura guidata UDI Nota: gli attributi per questo elemento sono diversi se l'elemento padre è l'elemento Task o Validator .
Attività Specifica un'attività all'interno della raccolta attività
Taskitem Specifica un gruppo di parametri passati all'attività
TaskLibrary Raggruppa un set di elementi Task
Validator Specifica un validator all'interno della libreria di convalida
ValidatorLibrary Raggruppa un set di elementi Validator

DesignerConfig

Questo elemento specifica la radice per tutti gli altri elementi.

Informazioni sull'elemento

La tabella 55 fornisce informazioni sull'elemento DesignerConfig .

Tabella 55. Informazioni sull'elemento DesignerConfig

Attributo Valore
Numero di occorrenze Uno: questo elemento è obbligatorio.
Elementi padre Nessuno
Sommario DesignerMappings, TaskLibrary, ValidatorLibrary
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<DesignerConfig>
   + <TaskLibrary>
   + <ValidatorLibrary>
   + <DesignerMappings>
</DesignerConfig>

DesignerMappings

Questo elemento raggruppa un set di elementi Page .

Informazioni sull'elemento

La tabella 56 fornisce informazioni sull'elemento DesignerMappings .

Tabella 56. Informazioni sull'elemento DesignerMappings

Attributo Valore
Numero di occorrenze Zero o uno all'interno dell'elemento DesignerConfig (questo elemento è facoltativo se nella DLL non sono presenti pagine della procedura guidata personalizzate che corrispondono a questo file di configurazione Designer UDI Wizard).
Elementi padre DesignerConfig
Sommario Pagina
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<DesignerConfig>
   + <TaskLibrary>
   + <ValidatorLibrary>
   - <DesignerMappings>
        <Page DLL="SharedPages.dll"
           Description="Used to display text that describes the current stagegroup"
           Type="Microsoft.SharedPages.WelcomePage"
           DisplayName="Welcome"
           Image="Welcome_188.png"
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.WelcomePageView"
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>
        <Page DLL="OSDRefreshWizard.dll"
           Description="Captures or restores user state data"
           Type="Microsoft.OSDRefresh.UserStatePage"
           DisplayName="User Data"
           Image="UserState_188.png"
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.UserStatePageView"
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>
        <Page DLL="OSDRefreshWizard.dll"
           Description="Allows selecting the image to install, target drive, and whether to format"
           Type="Microsoft.OSDRefresh.VolumePage"
           DisplayName="Volume"
           Image="Volume_188.png"
           DesignerType="Microsoft.Enterprise.UDIDesigner.CoreModules.Views.VolumePageView"
           DesignerAssembly="Microsoft.Enterprise.UDIDesigner.CoreModules.dll"/>
     </DesignerMappings>
</DesignerConfig>

Pagina

Questo elemento specifica un editor di pagine della procedura guidata da caricare nella Designer della Procedura guidata UDI, che a sua volta viene usata per modificare le impostazioni di configurazione per una pagina della procedura guidata.

Informazioni sull'elemento

La tabella 57 fornisce informazioni sull'elemento Page .

Tabella 57. Informazioni sull'elemento Page

Attributo Valore
Numero di occorrenze Uno o più per ogni pagina della procedura guidata definita nell'elemento DesignerMappings
Elementi padre DesignerMappings
Sommario Qualsiasi contenuto XML ben formato
Attributi dell'elemento

Nella tabella 58 sono elencati gli attributi dell'elemento Page e una descrizione per ognuno di essi.

Tabella 58. Attributi e valori corrispondenti per l'elemento Page

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sul parametro , visualizzato nella procedura guidata UDI Designer
DesignerAssembly Specifica il nome del file .dll associato all'editor di pagine della procedura guidata. Il file .dll deve essere presente nella cartella installation_folder\Bin , dove installation_folder è la cartella in cui è stato installato MDT.
DesignerType Specifica il nome dell'editor di pagine della procedura guidata all'interno del file .dll specificato nell'attributo DesignerAssembly (tipo Microsoft .NET per l'editor di pagine della procedura guidata, con lo spazio dei nomi Microsoft .NET completo).
DisplayName Specifica il nome descrittivo dell'editor di pagine, visualizzato nella procedura guidata UDI Designer
DLL Specifica il nome del file .dll associato alla pagina della procedura guidata (il file .dll deve essere presente nella cartella installation_folder\Templates\Distribution\Tools\platform (dove installation_folder è la cartella in cui È stato installato MDT e platform è x86 per la versione a 32 bit o x64 è per la versione a 64 bit). Nota: Assicurarsi che l'architettura del processore DLL corrisponda all'architettura del processore MDT installata. Ad esempio, se è stata installata una versione a 32 bit di MDT, assicurarsi di usare una DLL a 32 bit per la pagina della procedura guidata.
Immagine Specifica il nome di un'immagine della pagina in formato PNG (Portable Network Graphics) (il file .png deve essere presente nella cartella installation_folder\Bin\Images ( dove installation_folder è la cartella in cui è stato installato MDT).
Tipo Specifica l'editor di pagine della procedura guidata e deve corrispondere all'oggetto denominato usato quando è stata registrata la pagina personalizzata
Osservazioni

La procedura guidata UDI Designer usa l'elemento Page come un modello per creare il codice XML iniziale per una nuova procedura guidata. La procedura guidata UDI Designer esegue la convalida dello schema per garantire che gli elementi Page e figlio abbiano un formato valido. Questo elemento fornisce un mapping tra il tipo di pagina UDI Wizard e le informazioni necessarie per la creazione guidata UDI Designer per modificare e creare pagine di questo tipo usando un editor di pagine personalizzato.

Esempio

Nessuna.

Param

Questo elemento specifica un parametro passato all'elemento padre Task o Validator e corrisponde a un elemento Setter nel file di configurazione della Procedura guidata UDI.

Nota

Gli attributi per questo elemento sono diversi se l'elemento padre è l'elemento Task o Validator .

Informazioni sull'elemento

La tabella 59 fornisce informazioni sull'elemento Param .

Tabella 59. Informazioni sull'elemento Param

Attributo Valore
Numero di occorrenze Uno o più elementi padre TaskItem o Validator
Elementi padre TaskItem, Validator
Sommario Qualsiasi contenuto XML ben formato
Attributi dell'elemento

La tabella 60 elenca gli attributi dell'elemento Param e ne fornisce una descrizione.

Tabella 60. Attributi e valori corrispondenti per l'elemento Param

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sul parametro , visualizzato nella procedura guidata UDI Designer Nota: questo attributo è valido solo per l'elemento Validator.
DisplayName Specifica il nome descrittivo del parametro validator, visualizzato per la pagina UDI Wizard appropriata nella procedura guidata UDI Designer (questo nome è in genere più descrittivo dell'attributo Name). Nota: questo attributo è valido solo per l'elemento Validator.
Nome Specifica il nome del parametro passato all'attività o al validator, a seconda dell'elemento padre.Questo attributo diventerà l'attributo Property in un elemento Setter nel file di configurazione della Procedura guidata UDI. Nota: Questo parametro viene usato sia per gli elementi padre TaskItem che per gli elementi padre di Validator .
Osservazioni

Nessuna.

Esempio

Nessuna.

Attività

Questo elemento specifica un'attività all'interno della libreria di attività.

Informazioni sull'elemento

La tabella 61 fornisce informazioni sull'elemento Task .

Tabella 61. Informazioni sull'elemento Task

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno dell'elemento TaskLibrary (questo elemento non è facoltativo se viene specificato l'elemento TaskLibrary ).
Elementi padre TaskLibrary
Sommario Taskitem
Attributi dell'elemento

La tabella 62 elenca gli attributi dell'elemento Task e ne fornisce una descrizione.

Tabella 62. Attributi e valori corrispondenti per l'elemento Task

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sull'attività, che viene visualizzato nella procedura guidata UDI Designer
DLL Specifica il nome del file .dll associato all'attività (il file .dll deve essere presente nella cartella installation_folder\Templates\Distribution\Tools\platform ( dove installation_folder è la cartella in cui È stato installato MDT e platform è x86 per la versione a 32 bit o x64 per la versione a 64 bit).
Nome Specifica il nome dell'attività, visualizzato nella pagina della procedura guidata UDI appropriata e nella procedura guidata UDI Designer
Tipo Specifica il tipo di attività, registrato nel Registro di sistema factory e usato per chiamare un'attività specifica all'interno di un file di .dll
Osservazioni

Nessuna.

Esempio

Nessuna.

Taskitem

Questo elemento specifica un gruppo di parametri passati all'attività.

Informazioni sull'elemento

La tabella 63 fornisce informazioni sull'elemento TaskItem .

Tabella 63. Informazioni sull'elemento TaskItem

Attributo Valore
Numero di occorrenze Uno o più elementi Task
Elementi padre Attività
Sommario Param
Attributi dell'elemento

La tabella 64 elenca gli attributi dell'elemento TaskItem e ne fornisce una descrizione.

Tabella 64. Attributo e valori corrispondenti per l'elemento TaskItem

Attributo Descrizione
Tipo Specifica il tipo di elemento che verrà creato nel file di configurazione della Procedura guidata UDI. Verrà creato un elemento XML che corrisponde al valore di questo attributo. Ad esempio, se il valore di questo attributo è File, verrà creato un elemento File nel file di configurazione della Procedura guidata UDI.

Attualmente, gli unici valori supportati sono:

- File, che richiede due elementi figlio Param (un elemento figlio Param con l'attributo Name impostato su Source e un altro elemento figlio Param con l'attributo Name impostato su Dest)
- Setter, che richiede un elemento figlio Param
Osservazioni

Nessuna.

Esempio

Nessuna.

TaskLibrary

Questo elemento raggruppa un set di elementi Task .

Informazioni sull'elemento

La tabella 65 fornisce informazioni sull'elemento TaskLibrary .

Tabella 65. Informazioni sull'elemento TaskLibrary

Attributo Valore
Numero di occorrenze Zero o uno all'interno dell'elemento DesignerConfig (questo elemento è facoltativo se nella DLL non sono presenti attività personalizzate che corrispondono a questo file di configurazione Designer UDI Wizard).
Elementi padre DesignerConfig
Sommario Attività
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<DesignerConfig>
   - <TaskLibrary>
        +<Task DLL="" Description="Executes a process with the given command line." Type="Microsoft.Wizard.ShellExecuteTask" Name="Shell Execute Task">
        +<Task DLL="OSDRefreshWizard.dll" Description="Discovers supported applications for install." Type="Microsoft.OSDRefresh.AppDiscoveryTask" Name="Application Discovery">
        +<Task DLL="SharedPages.dll" Description="Check to ensure a wired network connection is available." Type="Microsoft.SharedPages.WiredNetworkTask" Name="Wired Network Check">
        +<Task DLL="OSDRefreshWizard.dll" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.OSDRefresh.ACPowerTask" Name="AC Power Check">
        +<Task DLL="" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.Wizard.CopyFilesTask" Name="Copy Files Task">
     </TaskLibrary>
   + <ValidatorLibrary>
   + <DesignerMappings>
</DesignerConfig>

Validator

Questo elemento specifica un validator all'interno della libreria di convalida.

Informazioni sull'elemento

La tabella 66 fornisce informazioni sull'elemento Validator .

Tabella 66. Informazioni sull'elemento Validator

Attributo Valore
Numero di occorrenze Zero o più all'interno dell'elemento ValidatorLibrary (questo elemento è facoltativo).
Elementi padre ValidatorLibrary
Sommario Param
Attributi dell'elemento

La tabella 67 elenca gli attributi dell'elemento Validator e ne fornisce una descrizione.

Tabella 67. Attributi e valori corrispondenti per l'elemento Validator

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sul validator, visualizzato nella procedura guidata UDI Designer
DisplayName Specifica il nome descrittivo del validator visualizzato nella procedura guidata UDI Designer (questo nome è in genere più descrittivo dell'attributo Name).
DLL Specifica il nome del file .dll associato al validator (il file .dll deve essere presente nella cartella installation_folder\Templates\Distribution\Tools\platform (dove installation_folder è la cartella in cui È stato installato MDT e platform è x86 per la versione a 32 bit o x64 per la versione a 64 bit).
Nome Specifica il nome del validator, visualizzato nella pagina della procedura guidata UDI appropriata e nella procedura guidata UDI Designer
Tipo Specifica il tipo di validator, registrato con il fattore del Registro di sistema e usato per chiamare un validator specifico all'interno di un file di .dll
Osservazioni

Nessuna.

Esempio

Nessuna.

ValidatorLibrary

Questo elemento raggruppa un set di elementi Validator .

Informazioni sull'elemento

La tabella 68 fornisce informazioni sull'elemento ValidatorLibrary .

Tabella 68. Informazioni sull'elemento ValidatorLibrary

Attributo Valore
Numero di occorrenze Zero o uno all'interno dell'elemento DesignerConfig (questo elemento è facoltativo se nella DLL non sono presenti validator personalizzati che corrispondono a questo file di configurazione Designer procedura guidata UDI).
Elementi padre DesignerConfig
Sommario Validator
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Requires text in a field" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Doesn't allow certain characters to be in a field" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Richiedi che il contenuto corrisponda a un'espressione regolare" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"<>/ValidatorLibrary> + <DesignerMappings></DesignerConfig>

Informazioni di riferimento sulla procedura guidata UDI Designer

Controlli

I controlli usati per creare editor di pagine della procedura guidata personalizzata da usare nella procedura guidata UDI Designer sono istanze di UserControl WPF. Nella tabella 69 sono elencati i controlli che è possibile usare per creare editor di pagine personalizzate della procedura guidata.

Tabella 69. Controlli che possono essere usati per creare editor di pagine della creazione guidata personalizzata

Controllo Descrizione
CollectionTControl Questo controllo viene usato per modificare i dati archiviati nell'elemento Data all'interno di un elemento Page .
FieldElementControl Questo controllo viene usato per modificare un campo, in genere collegato a un controllo TextBox nella pagina xaml.
SetterControl Questo controllo viene utilizzato per modificare il valore di un elemento setter nel file di configurazione della Procedura guidata UDI.

CollectionTControl

Questo controllo offre molte funzionalità per la modifica dei dati. Il modo migliore per imparare a usare questo controllo consiste nell'esaminare l'esempio, che mostra come modificare i dati nell'elemento Data di una pagina. In particolare, l'esempio mostra come aggiungere, rimuovere e modificare elementi in questo controllo.

FieldElementControl

Usa questo controllo per modificare un campo, in genere collegato a un controllo TextBox nella pagina con estensione xaml.

Esempio

L'estratto seguente di un file xaml illustra l'uso di FieldElementControl per configurare il valore predefinito per un campo in una pagina della procedura guidata usando un controllo TextBox figlio:

<Controls:FieldElementControl
Width="450"
Margin="0,5"
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
HeaderText="Location Combo Box"
InstructionText="Here you can configure the behavior of the location combo box."
HideValidationTab="True">

<TextBox Text="{Binding FieldData.DefaultValue,
 UpdateSourceTrigger=PropertyChanged,
 Mode=TwoWay}"/>
</Controls:FieldElementControl>
Proprietà
FieldData

Questa proprietà stringa contiene informazioni per la connessione di FieldElementControl al codice XML sottostante per il campo. La connessione viene eseguita a una proprietà dell'interfaccia dell'editor di pagine. L'estratto seguente da un file con estensione xaml illustra l'uso della proprietà FieldData :

FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"

In questo estratto l'interfaccia dell'editor di pagine è denominata ControlRoot e viene specificata nel parametro ElementName . L'associazione viene eseguita alla proprietà DataContext.Location dell'interfaccia dell'editor di pagine ControlRoot . DataContext è un modello di visualizzazione che punta all'elemento Page all'interno del file di configurazione della Procedura guidata UDI. Location è una proprietà della visualizzazione che restituisce un elenco dei percorsi possibili ed è definita da un elemento Data all'interno del file di configurazione della Procedura guidata UDI. Ogni percorso è definito da un elemento DataItem all'interno del file di configurazione della Procedura guidata UDI.

Headertext

Questa proprietà stringa consente di specificare un'intestazione per il controllo FieldElementControl . L'intestazione funge da titolo per il controllo ed è formattata come testo in grassetto e arancione visualizzato immediatamente sopra il controllo.

Instructiontext

Questa proprietà stringa consente di specificare testo informativo per il controllo FieldElementControl . In genere, il testo viene usato per fornire una breve descrizione del campo e spiegare in che modo la configurazione del campo influisce sulla pagina della procedura guidata corrispondente.

HideEnableButton

Questa proprietà booleana consente di controllare la visibilità del pulsante che modifica lo stato tra Sbloccato e Bloccato (abilitato o disabilitato). Se impostato su:

  • True, il pulsante non è visibile

  • False, il pulsante è visibile (valore predefinito).

HideDefaultTab

Questa proprietà booleana consente di controllare la visibilità della sezione che contiene il controllo utilizzato per impostare il valore predefinito. Anche se la proprietà fa riferimento a una scheda, non esiste alcuna scheda in FieldElementControl , ma piuttosto una sezione che può essere nascosta. Se impostato su:

  • True, la sezione non è visibile

  • False, la sezione è visibile (valore predefinito).

HideBorder

Questa proprietà booleana consente di controllare la visibilità del bordo intorno al controllo campo. Se impostato su:

  • True, il bordo non è visibile

  • False, il bordo è visibile (valore predefinito).

HideImage

Questa proprietà booleana consente di controllare la visibilità dell'immagine configurata dalla proprietà FieldImageSource . Se impostato su:

  • True, l'immagine non è visibile

  • False, l'immagine è visibile (valore predefinito).

HideValidationTab

Questa proprietà booleana consente di controllare la visibilità della sezione in cui viene gestito l'elenco di validator. Anche se la proprietà fa riferimento a una scheda, non esiste alcuna scheda in FieldElementControl , ma piuttosto una sezione che può essere nascosta. Se impostato su:

  • True, la sezione non è visibile

  • False, la sezione è visibile (valore predefinito).

HideSummaryTab

Questa proprietà booleana consente di controllare la visibilità della sezione in cui viene configurato il didascalia di riepilogo dei campi. Il didascalia e il valore corrispondente del campo vengono visualizzati in un tipo di pagina della procedura guidata SummaryPage in un flusso di fase. Anche se la proprietà fa riferimento a una scheda, non esiste alcuna scheda in FieldElementControl , ma piuttosto una sezione che può essere nascosta. Se impostato su:

  • True, la sezione non è visibile

  • False, la sezione è visibile (valore predefinito).

HideTaskSequenceTab

Questa proprietà booleana consente di controllare la visibilità della sezione in cui si configura la variabile della sequenza di attività corrispondente al campo. Anche se la proprietà fa riferimento a una scheda, non esiste alcuna scheda in FieldElementControl , ma piuttosto una sezione che può essere nascosta. Se impostato su:

  • True, la sezione non è visibile

  • False, la sezione è visibile (valore predefinito).

SetterControl

Utilizzare questo controllo per modificare il valore di un elemento Setter nel file di configurazione della Procedura guidata UDI. Questo controllo contiene un controllo figlio utilizzato per modificare il valore dell'elemento setter .

Esempio

L'estratto seguente di un file xaml illustra l'uso di SetterControl per modificare un elemento Setter denominato KeyLocationSetter usando un controllo TextBox figlio.

<Controls:SetterControl Margin="5"
        Width="450"
        HeaderText="Title text"
        SetterData="{Binding KeyLocationSetter}"
        InstructionText="What this means..."
        HorizontalAlignment="Left">

    <TextBox
                   Margin="0,3"
                   Text="{Binding SetterData.SetterValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    />

</Controls:SetterControl>
Proprietà
SetterData

È necessario associare questa proprietà a una proprietà del modello di visualizzazione o visualizzazione che si connette al setter. In questo modo è simile a come eseguire l'associazione a un campo, come descritto per FieldElementControl.

Headertext

Questa proprietà consente di impostare il testo che verrà visualizzato nell'intestazione del controllo. Considerare questa proprietà come un titolo per il controllo; per impostazione predefinita, viene visualizzato come testo in grassetto e arancione.

Instructiontext

Impostare questa proprietà sul testo che si desidera visualizzare sotto l'intestazione, in genere testo di istruzioni che indica all'utente dell'editor personalizzato quando e perché vuole modificare il comportamento del campo.

Interfacce

Nella tabella 70 sono elencate le interfacce che è possibile usare per creare editor di pagine personalizzate della procedura guidata.

Tabella 70. Interfacce che possono essere usate per creare editor di pagine della creazione guidata personalizzata

Interfaccia Descrizione
IDataService Usare questa interfaccia per connettere i campi agli elementi dati nel file di configurazione della Procedura guidata UDI.
Imessageboxservice Questa interfaccia consente di accedere ai metodi che è possibile usare per visualizzare le finestre di messaggio.

IDataService

Questa interfaccia contiene diverse proprietà e metodi, ma esiste una sola proprietà di cui si ha bisogno. Questa proprietà è l'unica documentata qui.

È possibile usare l'inserimento delle dipendenze per ottenere un puntatore a questa interfaccia usando codice simile al seguente nella classe :

[Dependency]
public IDataService DataService { get; set; }
Proprietà

Nella tabella 71 sono elencate le proprietà per l'interfaccia IDataService .

Tabella 71. Proprietà per l'interfaccia IDataService

Interfaccia Descrizione
Currentpage Questa proprietà consente l'accesso agli elementi, agli attributi e ai valori XML sotto il contesto della pagina corrente da modificare nel file di configurazione della Procedura guidata UDI
Currentpage
XElement CurrentPage { get; set; }

Questa proprietà fornisce l'accesso al codice XML per la pagina corrente. Non è mai consigliabile impostare questa proprietà, ma è possibile modificare il codice XML per la pagina. L'editor di pagine di esempio mostra esempi di modifica del codice XML. Questa proprietà viene utilizzata principalmente quando si dispone di dati personalizzati. Per i campi e le proprietà (setter), è possibile usare controlli predefiniti che si occupano di tutti i dettagli.

Imessageboxservice

Questa interfaccia consente di accedere ai metodi che è possibile usare per visualizzare le finestre di messaggio. Ci si potrebbe chiedere perché è necessaria un'interfaccia per visualizzare una finestra di messaggio. La realtà è che non è possibile: Microsoft usa questa interfaccia con nel codice, perché facilita la scrittura di test automatizzati per le pagine della finestra di progettazione.

Tuttavia, l'uso di questi metodi offre un vantaggio utile: le finestre di dialogo hanno sempre il "proprietario" impostato su UDI Wizard, che garantisce che la finestra di dialogo sia raggruppata correttamente con la finestra principale.

È possibile usare l'inserimento delle dipendenze per ottenere un puntatore a questa interfaccia usando codice simile al seguente nella classe :

[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Metodi

Nella tabella 72 sono elencati i metodi per l'interfaccia IMessageBoxService .

Tabella 72. Metodi per l'interfaccia IMessageBoxService

Metodo Descrizione
Showmessagebox Questo metodo di overload viene usato per visualizzare una finestra di messaggio con i membri seguenti:

- ShowMessageBox(String message, String didascalia, MessageBoxImage icon)
- ShowMessageBox(string message, string didascalia, MessageBoxButton button, MessageBoxImage icon)
- ShowMessageBox(Eccezione eccezione)
ShowDialogWindow Utilizzare questo metodo per creare una nuova finestra di dialogo.
ShowWizardWindow Utilizzare questo metodo per visualizzare un editor personalizzato all'interno di una finestra di dialogo che include i pulsanti Avanti e Indietro per la navigazione.
Showmessagebox

Questo metodo visualizza una finestra di messaggio figlio dell'editor di pagine della procedura guidata personalizzata. Questo membro è sovraccarico: la tabella 73 contiene un elenco dei membri e una breve descrizione di ognuno di essi. Per informazioni complete su ogni membro (inclusi sintassi, utilizzo ed esempi), vedere la sezione corrispondente a ogni membro.

Tabella 73. Membri di overload per il metodo ShowMessagBox

Membro Descrizione
ShowMessageBox(String message, String didascalia, MessageBoxImage icon) Visualizza una finestra di messaggio con un'icona e un pulsante OK
ShowMessageBox(string message, string didascalia, MessageBoxButton button, MessageBoxImage icon) Visualizza una finestra di messaggio con un'icona e diverse combinazioni possibili di pulsanti
ShowMessageBox(Eccezione eccezione) Visualizza una finestra di messaggio che fornisce informazioni su un'eccezione e dispone di un pulsante OK
ShowMessageBox(String message, String didascalia, MessageBoxImage icon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);

Questo metodo visualizza una finestra di messaggio con un pulsante OK . Vedere la tabella 74.

Tabella 74. Parametri per il metodo ShowMessageBox(String message, String didascalia, MessageBoxImage icon)

Parametro Descrizione
Messaggio Messaggio da visualizzare nell'area del contenuto della finestra di messaggio
didascalia Testo da visualizzare nella barra del titolo della finestra di dialogo
Icona Tipo di icona da visualizzare nella finestra di messaggio
ShowMessageBox(string message, string didascalia, MessageBoxButton button, MessageBoxImage icon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);

Questo metodo visualizza una finestra di messaggio con il set di pulsanti che si desidera visualizzare e segnala il pulsante selezionato. Vedere la tabella 75.

Tabella 75. Parametri per il metodo ShowMessageBox(messaggio stringa, stringa didascalia, pulsante MessageBoxButton, icona MessageBoxImage)

Parametro Descrizione
Messaggio Messaggio da visualizzare nell'area del contenuto della finestra di messaggio
didascalia Testo da visualizzare nella barra del titolo della finestra di dialogo
Pulsante Quali pulsanti visualizzare
Icona Tipo di icona da visualizzare nella finestra di messaggio
ShowMessageBox(Eccezione eccezione)
void ShowMessageBox(Exception exception);

Questo metodo visualizza una finestra di messaggio che segnala informazioni su un'eccezione. Questa finestra di messaggio include un singolo pulsante OK . Vedere la tabella 76.

Tabella 76. Parametri per il metodo ShowMessageBox(Exception Exception)

Parametro Descrizione
Eccezione Eccezione da segnalare (la finestra di dialogo usa l'eccezione. Messaggio come contenuto.
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);

Questo metodo crea una nuova finestra di dialogo, il cui contenuto è il testo specificato nel parametro viewType . L'Designer UDI crea una nuova istanza di questo tipo e la esegue il wrapping in una finestra di dialogo con pulsanti OK e Annulla.

I dati vengono passati al controllo usando il parametro dialogPayload. La soluzione SampleEditor nella directory SDK contiene un esempio di come usare questa funzionalità.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);

Questo metodo consente di visualizzare un editor personalizzato all'interno di una finestra di dialogo che include pulsanti Avanti e Indietro per la navigazione. Microsoft non ha fornito un esempio per l'uso di questo metodo.

Informazioni di riferimento sullo schema del file di configurazione della procedura guidata UDI

Questo file viene utilizzato dalla Procedura guidata UDI e configurato dalla procedura guidata UDI Designer. Questo file viene usato per configurare:

  • Pagine della procedura guidata visualizzate nella Procedura guidata UDI

  • Sequenza delle pagine della procedura guidata nella Procedura guidata UDI

  • Impostazioni per i campi in ogni pagina della procedura guidata

  • StageGroup disponibili nella procedura guidata UDI Designer

  • Fasi disponibili all'interno di ogni distribuzione guidata nella procedura guidata UDI Designer

    77 elenca gli elementi nel file di configurazione della procedura guidata UDI e le relative descrizioni. L'elemento Wizard è il nodo radice per questo riferimento.

Tabella 77. Elementi nel file di configurazione della procedura guidata UDI e relative descrizioni

Nome elemento Descrizione
Dati Raggruppa i singoli elementi DataItem all'interno di un elemento Page ed è denominato dall'attributo Name .
Dataitem Raggruppa i singoli elementi Setter all'interno di un elemento Page . È possibile creare dati gerarchici includendo uno o più elementi Data all'interno di un elemento DataItem . Ogni elemento DataItem rappresenta un singolo elemento. Ad esempio, un elenco di unità disponibili potrebbe avere un oggetto DataItem per il nome visualizzato e un altro elemento DataItem per la lettera di unità corrispondente.
Predefinita Specifica un valore predefinito per il campo specificato nell'elemento padre Field o RadioGroup . Il valore predefinito è impostato sul valore racchiuso tra parentesi quadre da questo elemento.
DLL Specifica una DLL a cui fare riferimento e che deve essere caricata dalla Procedura guidata UDI e dalla procedura guidata UDI Designer.
Dll Raggruppa i singoli elementi DLL .
Errore Specifica un possibile codice di errore che può essere restituito da un'attività. Il valore del codice di errore viene restituito dall'HRESULT dell'attività e viene intrappolato da questo elemento per fornire informazioni di errore più specifiche.
ExitCode Specifica un possibile codice di uscita per un'attività. I codici di uscita sono codici restituiti previsti dall'attività. Creare un elemento ExitCode per ogni possibile codice di uscita. In caso contrario, è possibile specificare un asterisco (*) nell'attributo Value per gestire i codici restituiti non elencati in altri elementi ExitCode .
ExitCodes Raggruppa un set di elementi ExitCode ed Error per un elemento Task o un elemento Error .
Campo Specifica un'istanza di un controllo in un elemento Page usato per fornire la personalizzazione con XML. Non tutti i controlli consentono la personalizzazione con XML, ma solo i controlli che usano l'elemento Field .
Campi Raggruppa i singoli elementi Field all'interno di un elemento Page .
File Specifica l'origine e la destinazione per un'operazione di copia file utilizzando il tipo di attività Microsoft.Wizard.CopyFilesTask . È possibile includere un elemento File separato per copiare più file in una singola attività.
Pagina Specifica un'istanza di una pagina e include tutte le impostazioni di configurazione per la pagina.
Pageref Specifica un riferimento a un'istanza di una pagina all'interno di una fase all'interno di un stagegroup.
Pagine Raggruppa i singoli elementi Page .
Gruppo di radio Specifica un gruppo di pulsanti di opzione all'interno di un elemento Field .
StageGroup Specifica un gruppo di una o più fasi.
StageGroups Raggruppa un set di gruppi di fasi all'interno di un file di configurazione della Procedura guidata UDI.
Setter Specifica un'impostazione di proprietà di un valore per una proprietà denominata nella proprietà Property .
Fase Specifica una fase all'interno di un elemento StageGroup e contiene uno o più elementi PageRef .
Stile Raggruppa i singoli elementi setter che configurano l'aspetto della procedura guidata UDI, incluso il titolo visualizzato nella parte superiore della procedura guidata e l'immagine del banner visualizzata nella Procedura guidata UDI.
Attività Specifica un'attività che deve essere eseguita nella pagina specificata nell'elemento Page padre.
Attività Raggruppa un set di attività per un elemento Page .
Validator Specifica un validator per il controllo campo specificato nell'elemento Field padre.
Mago Specifica la radice per tutti gli altri elementi.

Dati

Questo elemento raggruppa i singoli elementi DataItem all'interno di un elemento Page ed è denominato dall'attributo Name .

Informazioni sull'elemento

La tabella 78 fornisce informazioni sull'elemento Data .

Tabella 78. Informazioni sugli elementi dati

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Page (questo elemento è facoltativo).
Elementi padre Page, DataItem
Sommario DataItem, Setter
Attributi dell'elemento

La tabella 79 elenca gli attributi dell'elemento Data e ne fornisce una descrizione.

Tabella 79. Attributi e valori corrispondenti per l'elemento dati

Attributo Descrizione
Nome Specifica il nome dell'elemento Data
Osservazioni

L'attributo Name consente al codice di recuperare un set specifico di dati.

Esempio

Nessuna.

Dataitem

Questo elemento raggruppa i singoli elementi Setter all'interno di un elemento Page . È possibile creare dati gerarchici includendo uno o più elementi Data all'interno di un elemento DataItem . Ogni elemento DataItem rappresenta un singolo elemento. Ad esempio, un elenco di unità disponibili potrebbe avere un oggetto DataItem per il nome visualizzato e un altro elemento DataItem per la lettera di unità corrispondente.

Informazioni sull'elemento

La tabella 80 fornisce informazioni sull'elemento DataItem .

Tabella 80. Informazioni sull'elemento DataItem

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Data (questo elemento è facoltativo).
Elementi padre Dati
Sommario Data, Setter
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

Predefinita

Questo elemento specifica un valore predefinito per il campo specificato nell'elemento padre Field o RadioGroup . Il valore predefinito è impostato sul valore racchiuso tra parentesi quadre di questo elemento.

Informazioni sull'elemento

La tabella 81 fornisce informazioni sull'elemento Default .

Tabella 81. Informazioni sugli elementi predefiniti

Attributo Valore
Numero di occorrenze Zero o più all'interno di un elemento Field o RadioGroup (questo elemento è facoltativo).
Elementi padre Field, RadioGroup
Sommario Può essere qualsiasi contenuto XML ben formato, ma è in genere testo standard
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nell'esempio seguente, il valore predefinito per il campo TimeZone è impostato su "Pacific Standard Time":

<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
  <Default>Pacific Standard Time</Default>

DLL

Questo elemento specifica una DLL per il caricamento e il riferimento della Designer procedura guidata UDI e della procedura guidata UDI.

Informazioni sull'elemento

La tabella 82 fornisce informazioni sull'elemento DLL .

Tabella 82. Informazioni sull'elemento DLL

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno dell'elemento DLL
Elemento padre Dll
Sommario Nessun contenuto consentito per questo elemento
Attributi dell'elemento

La tabella 83 elenca gli attributi dell'elemento DLL e ne fornisce una descrizione.

Tabella 83. Attributi e valori corrispondenti per l'elemento DLL

Attributo Descrizione
Nome Specifica il nome della DLL per la procedura guidata UDI e la procedura guidata UDI Designer fare riferimento
Osservazioni

Nessuna.

Esempio
<DLLs>
  <DLL Name="OSDRefreshWizard.dll" />
  <DLL Name="SharedPages.dll" />
</DLLs>

Dll

Questo elemento raggruppa i singoli elementi DLL .

Informazioni sull'elemento

La tabella 84 fornisce informazioni sull'elemento DLL .

Tabella 84. Informazioni sull'elemento DLLLs

Attributo Valore
Numero di occorrenze Uno
Elementi padre Mago
Sommario DLL
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<DLLs>
   <DLL Name="OSDRefreshWizard.dll" />
   <DLL Name="SharedPages.dll" />
</DLLs>

Error

Questo elemento specifica un possibile codice di errore che un'attività può restituire. Il valore del codice di errore viene restituito e intrappolato dall'HRESULT dell'attività per fornire informazioni sugli errori più specifiche.

Informazioni sull'elemento

La tabella 85 fornisce informazioni sull'elemento Error .

Tabella 85. Informazioni sull'elemento Error

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento ExitCode (questo elemento è facoltativo).
Elementi padre ExitCodes
Sommario Qualsiasi contenuto XML ben formato
Attributi dell'elemento

La tabella 86 elenca gli attributi dell'elemento Error e ne fornisce una descrizione.

Tabella 86. Informazioni sull'elemento Error

Attributo Descrizione
Stato Specifica lo stato restituito di un'attività che ha rilevato un errore. In genere, il valore per questo attributo è impostato su Error. Questo valore viene visualizzato nella colonna Stato della pagina della procedura guidata della Procedura guidata UDI.
Testo Specifica il testo descrittivo relativo alla condizione di errore rilevata dall'attività.
Tipo Specifica se questo elemento rappresenta un errore, un avviso o un esito positivo. Il valore specificato inType deve essere univoco all'interno di un elemento ExitCodes . Di seguito sono riportati i valori validi per questo elemento:

- **0.**L'elemento rappresenta un esito positivo.
- 1. L'elemento rappresenta un avviso.
- -1. L'elemento rappresenta un errore.
Valore Specifica il valore del codice restituito dall'attività come valore numerico. La specifica del valore di un asterisco (*) indica l'elemento predefinito per i codici restituiti non elencati in altri elementi Error .
Osservazioni

Nessuna.

Esempio

Nessuna.

ExitCode

Questo elemento specifica un possibile codice di uscita per un'attività. I codici di uscita sono codici restituiti previsti dall'attività. Creare un elemento ExitCode per ogni possibile codice di uscita. In caso contrario, è possibile specificare un asterisco (*) nell'attributo Value per gestire i codici restituiti non elencati in altri elementi ExitCode .

Informazioni sull'elemento

La tabella 87 fornisce informazioni sull'elemento ExitCode .

Tabella 87. Informazioni sull'elemento ExitCode

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento ExitCodes (questo elemento è facoltativo).
Elementi padre ExitCodes
Sommario Almeno un elemento ExitCode e zero o più elementi Error
Attributi dell'elemento

La tabella 88 elenca gli attributi dell'elemento ExitCode e ne fornisce una descrizione.

Tabella 88. Attributi e valori corrispondenti per l'elemento ExitCode

Attributo Descrizione
Stato Specifica lo stato restituito di un'attività. Il valore di questo attributo viene visualizzato nella colonna Stato della pagina della procedura guidata corrispondente della Procedura guidata UDI. È possibile usare qualsiasi valore per questo attributo significativo per l'attività. Di seguito sono riportati i valori tipici usati per questo attributo:

-Successo
-Avviso
-Errore
Testo Specifica il testo descrittivo relativo al codice esistente dell'attività.
Tipo Specifica se questo elemento rappresenta un errore, un avviso o un esito positivo. Il valore specificato nel tipo deve essere univoco all'interno di un elemento ExitCodes . Di seguito sono riportati i valori validi per questo elemento:

- 0. L'elemento rappresenta un esito positivo.
- 1. L'elemento rappresenta un avviso.
- -1. L'elemento rappresenta un errore.
Valore Specifica il valore del codice restituito dall'attività come valore numerico. La specifica del valore di un asterisco (*) indica l'elemento predefinito per i codici restituiti non elencati in altri elementi ExitCode .
Osservazioni

Nessuna.

Esempio

Nessuna.

ExitCodes

Questo elemento raggruppa un set di elementi ExitCode ed Error per un elemento Task o Error .

Informazioni sull'elemento

La tabella 89 fornisce informazioni sull'elemento ExitCodes .

Tabella 89. Informazioni sull'elemento ExitCodes

Attributo Valore
Numero di occorrenze Uno all'interno di ogni elemento Task
Elementi padre Attività
Sommario Error, ExitCode
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

Campo

Questo elemento specifica un'istanza di un controllo in un elemento Page usato per fornire la personalizzazione con XML. Non tutti i controlli consentono la personalizzazione con XML, ma solo i controlli che usano l'elemento Field .

Informazioni sull'elemento

La tabella 90 fornisce informazioni sull'elemento Field .

Tabella 90. Informazioni sull'elemento Field

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Field (questo elemento è facoltativo).
Elementi padre Campi
Sommario Predefinito, Validator
Attributi dell'elemento

La tabella 91 elenca gli attributi dell'elemento Field e ne fornisce una descrizione.

Tabella 91. Attributi e valori corrispondenti per l'elemento Field

Attributo Descrizione
Enabled Specifica se il campo è abilitato per l'input dell'utente (l'attributo può essere impostato su True o False).
Nome Specifica il nome del campo
Riepilogo Specifica il testo descrittivo visualizzato nella pagina della procedura guidata Riepilogo per il valore impostato da questo campo
Varname Specifica il nome della variabile della sequenza di attività letto o configurato usando il campo nell'elemento Field padre
Osservazioni

Questo elemento può contenere zero o più elementi Default e zero o più elementi Validator .

Esempio

Nessuna.

Fields

Questo elemento raggruppa i singoli elementi Field all'interno di un elemento Page .

Informazioni sull'elemento

La tabella 92 fornisce informazioni sull'elemento Fields .

Tabella 92. Informazioni sull'elemento Fields

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Page (questo elemento è facoltativo).
Elementi padre Pagina
Sommario Field, RadioGroup
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

File

Questo elemento specifica l'origine e la destinazione per un'operazione di copia file tramite il tipo di attività Microsoft.Wizard.CopyFilesTask . È possibile includere un elemento File separato per copiare più file in una singola attività.

Informazioni sull'elemento

La tabella 93 fornisce informazioni sull'elemento File .

Tabella 93. Informazioni sugli elementi file

Attributo Valore
Numero di occorrenze Uno o più per ogni attività con un tipo di attività Microsoft.Wizard.CopyFilesTask
Elementi padre Attività
Sommario Nessuno
Attributi dell'elemento

La tabella 94 elenca gli attributi dell'elemento File e ne fornisce una descrizione.

Tabella 94. Attributi e valori corrispondenti per l'elemento file

Attributo Descrizione
Dest Specifica il percorso completo o relativo della cartella di destinazione per il file specificato nell'attributo Source . Le variabili di ambiente sono consentite come parte del percorso.
Source Specifica il percorso completo o relativo del file di origine copiato dal tipo di attività Microsoft.Wizard.CopyFilesTask . Questo attributo supporta caratteri jolly in modo che sia possibile copiare più file usando un singolo elemento File . Le variabili di ambiente sono consentite come parte del percorso.
Osservazioni

Nessuna.

Esempio

Nessuna.

Pagina

Questo elemento specifica un'istanza di una pagina e include tutte le impostazioni di configurazione per la pagina.

Informazioni sull'elemento

La tabella 95 fornisce informazioni sull'elemento Page .

Tabella 95. Informazioni sull'elemento Page

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno di ogni elemento Pages
Elementi padre Pagine
Sommario Data, Fields, Setter, Tasks
Attributi dell'elemento

La tabella 96 elenca gli attributi dell'elemento Page e ne fornisce una descrizione.

Tabella 96. Attributi e valori corrispondenti per l'elemento Page

Attributo Descrizione
DisplayName Specifica il nome descrittivo della pagina della procedura guidata visualizzata nella Designer della Procedura guidata UDI. Questo nome è in genere più descrittivo dell'attributo Name .
Nome Specifica il nome della pagina della procedura guidata visualizzata nella Designer della Procedura guidata UDI.
Tipo Specifica il tipo di pagina della procedura guidata che si riferisce direttamente a una pagina della procedura guidata specifica all'interno di una DLL.
Osservazioni

Nessuna.

Esempio

Nessuna.

Pageref

Questo elemento specifica un riferimento a un'istanza di una pagina all'interno di uno stage all'interno di un stagegroup.

Informazioni sull'elemento

La tabella 97 fornisce informazioni sull'elemento PageRef .

Tabella 97. Informazioni sull'elemento PageRef

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno di un elemento Stage
Elementi padre Fase
Sommario Nessuno
Attributi dell'elemento

La tabella 98 elenca l'attributo dell'elemento PageRef e ne fornisce una descrizione.

Tabella 98. Attributi e valori corrispondenti per l'elemento PageRef

Attributo Descrizione
Pagina Specifica l'istanza di una pagina all'interno di una fase all'interno di un stagegroup. Impostare questo valore sull'attributo Name di un elemento Page .
Osservazioni

Nessuna.

Esempio

Nessuna.

Pagine

Questo elemento raggruppa i singoli elementi Page .

Informazioni sull'elemento

La tabella 99 fornisce informazioni sull'elemento Pages .

Tabella 99. Informazioni sugli elementi Pages

Attributo Valore
Numero di occorrenze Uno
Elementi padre Mago
Sommario Pagina
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<Pages>
   + <Page Name="WelcomePage" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">
   + <Page Name="ConfigScanPage" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">
   + <Page Name="ConfigScanBareMetal" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">
   + <Page Name="RebootPage" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">
   + <Page Name="WelcomePageReplace" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">
   + <Page Name="VolumePage" DisplayName="Volume" Type="Microsoft.OSDRefresh.VolumePage">
   + <Page Name="UserRestorePage" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">
   + <Page Name="ComputerPage" DisplayName="New Computer Details" Type="Microsoft.OSDRefresh.ComputerPage">
   + <Page Name="AdminAccounts" DisplayName="Administrator Password" Type="Microsoft.SharedPages.AdminAccountsPage">
   + <Page Name="UDAPage" DisplayName="User Device Affinity" Type="Microsoft.OSDRefresh.UDAPage">
   + <Page Name="LanguagePage" DisplayName="Language" Type="Microsoft.OSDRefresh.LanguagePage">
   + <Page Name="ApplicationPage" DisplayName="Install Programs" Type="Microsoft.OSDRefresh.ApplicationPage">
     <Page Name="SummaryPage" DisplayName="Summary" Type="Microsoft.Shared.SummaryPage" />
   + <Page Name="UserCapturePageOldPC" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">
   + <Page Name="ProgressPage" DisplayName="Capture Data" Type="Microsoft.OSDRefresh.ProgressPage">
   + <Page Name="RebootAfterCapture" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">
</Pages>

Gruppo di radio

Questo elemento specifica un gruppo di pulsanti di opzione con in un elemento Field .

Informazioni sull'elemento

La tabella 100 fornisce informazioni sull'elemento RadioGroup .

Tabella 100. Informazioni sull'elemento RadioGroup

Attributo Valore
Numero di occorrenze Zero o più all'interno di un elemento Fields (questo elemento è facoltativo).
Elementi padre Campi
Sommario Predefinita
Attributi dell'elemento

La tabella 101 elenca gli attributi dell'elemento RadioGroup e ne fornisce una descrizione.

Tabella 101. Attributi e valori corrispondenti per l'elemento RadioGroup

Attributo Descrizione
Bloccato Specifica se il gruppo di pulsanti di opzione è abilitato per l'input dell'utente. L'attributo può essere impostato su:

- True. Specifica che i pulsanti di opzione sono disabilitati e che gli utenti non possono selezionare un pulsante di opzione nel gruppo.
- False. Specifica che i pulsanti di opzione sono abilitati e che gli utenti possono selezionare un pulsante di opzione nel gruppo.
Nome Specifica il nome del gruppo di opzioni di opzione.
Osservazioni

Nessuna.

Esempio

Nessuna.

StageGroup

Questo elemento specifica un gruppo di fasi di distribuzione.

Informazioni sull'elemento

La tabella 102 fornisce informazioni sull'elemento StageGroup .

Tabella 102. Informazioni sull'elemento StageGroup

Attributo Valore
Numero di occorrenze Uno o più elementi StageGroups
Elementi padre StageGroups
Sommario Fase
Attributi dell'elemento

Nella tabella 103 sono elencati gli attributi dell'elemento StageGroup e una descrizione dell'attributo.

Tabella 103. Attributi e valori corrispondenti per l'elemento StageGroup

Attributo Descrizione
DisplayName Specifica il nome descrittivo del gruppo di fasi visualizzato nella procedura guidata UDI Designer. Questo nome è in genere più descrittivo dell'attributo Name .
Osservazioni

Nessuna.

Esempio

Nessuna.

StageGroups

Questo elemento raggruppa un set di gruppi di fasi all'interno di un file di configurazione della Procedura guidata UDI.

Informazioni sull'elemento

La tabella 104 fornisce informazioni sull'elemento StageGroups .

Tabella 104. Informazioni sull'elemento StageGroups

Attributo Valore
Numero di occorrenze Zero o uno all'interno di un elemento Wizard
Elementi padre Mago
Sommario StageGroup
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

Setter

Questo elemento specifica un'impostazione della proprietà per il valore di una proprietà denominata nella proprietà Property .

Informazioni sull'elemento

La tabella 105 fornisce informazioni sull'elemento Setter .

Tabella 105. Informazioni sull'elemento Setter

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento padre (questo elemento è facoltativo).
Elementi padre Data, DataItem, Page, Style, Task, Validator
Sommario Contiene un valore stringa nell'attributo Property
Attributi dell'elemento

La tabella 106 elenca l'attributo dell'elemento Setter e ne fornisce una descrizione.

Tabella 106. Attributi e valori corrispondenti per l'elemento Setter

Attributo Descrizione
Proprietà Specifica il nome della proprietà da impostare. Il nome della proprietà è impostato sul valore racchiuso tra parentesi quadre di questo attributo.
Osservazioni

Nessuna.

Esempio

Nessuna.

Fase

Questo elemento specifica un elemento Stage all'interno di uno StageGroup e contiene uno o più elementi PageRef .

Informazioni sull'elemento

La tabella 107 fornisce informazioni sull'elemento Stage .

Tabella 107. Informazioni sull'elemento Stage

Attributo Valore
Numero di occorrenze Uno o più elementi di un elemento StageGroup
Elementi padre StageGroup
Sommario Pageref
Attributi dell'elemento

La tabella 108 elenca gli attributi dell'elemento Stage e ne fornisce una descrizione.

Tabella 108. Attributi e valori corrispondenti per l'elemento Stage

Attributo Descrizione
DisplayName Specifica il nome descrittivo della pagina della procedura guidata visualizzata nella Designer della Procedura guidata UDI. Questo nome è in genere più descrittivo dell'attributo Name .
Nome Specifica il nome della fase. Il valore di questo elemento viene usato quando si avvia la Procedura guidata UDI con il parametro della riga di comando /stage: name .
Osservazioni

Nessuna.

Esempio

Nessuna.

Stile

Questo elemento raggruppa i singoli elementi Setter che configurano l'aspetto della procedura guidata UDI, incluso il titolo visualizzato nella parte superiore della procedura guidata e l'immagine del banner visualizzata nella Procedura guidata UDI.

Informazioni sull'elemento

La tabella 109 fornisce informazioni sull'elemento Style.

Tabella 109. Informazioni sull'elemento Style

Attributo Valore
Numero di occorrenze Uno
Elementi padre Mago
Sommario Setter
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<Style>
  <Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
  <Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>

Attività

Questo elemento specifica un'attività che deve essere eseguita nella pagina specificata nell'elemento Page padre.

Informazioni sull'elemento

La tabella 110 fornisce informazioni sull'elemento Task .

Tabella 110. Informazioni sull'elemento Task

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno di un elemento Tasks
Elementi padre Attività
Sommario ExitCodes, File, Setter
Attributi dell'elemento

La tabella 111 elenca gli attributi dell'elemento Task e ne fornisce una descrizione.

Tabella 111. Attributi e valori corrispondenti per l'elemento Task

Attributo Descrizione
DependsOn Specifica se l'attività dipende da un'altra attività. Il valore di questo attributo è impostato sull'attributo Name di un altro elemento Task . Nota: Non è possibile configurare questo attributo usando la procedura guidata UDI Designer. Tuttavia, è possibile aggiungere manualmente questo attributo a un elemento Task modificando direttamente il file .xml.
DisplayName Specifica il nome descrittivo dell'attività visualizzata nella procedura guidata UDI Designer. Questo nome è in genere più descrittivo dell'attributo Name .
Nome Specifica il nome dell'attività. Questo nome deve essere univoco.
Tipo Specifica il tipo di attività per l'attività da eseguire, definita nella DLL che contiene l'attività.
Osservazioni

Nessuna.

Esempio

Nessuna.

Attività

Questo elemento raggruppa un set di attività per un elemento Page .

Informazioni sull'elemento

La tabella 112 fornisce informazioni sull'elemento Tasks .

Tabella 112. Informazioni sull'elemento Tasks

Attributo Valore
Numero di occorrenze Zero o uno all'interno di ogni elemento Page (questo elemento è facoltativo).
Elementi padre Pagina
Sommario Attività
Attributi dell'elemento

La tabella 113 elenca gli attributi dell'elemento Tasks e ne fornisce una descrizione.

Tabella 113. Attributi e valori corrispondenti per l'elemento Tasks

Attributo Descrizione
NameTitle Specifica la didascalia visualizzata nella parte superiore della colonna che contiene il nome delle attività nella pagina della procedura guidata appropriata.
StatusTitle Specifica la didascalia visualizzata nella parte superiore della colonna che contiene lo stato delle attività nella pagina della procedura guidata appropriata.
Osservazioni

Nessuna.

Esempio

Nessuna.

Validator

Questo elemento specifica un validator per il controllo campo specificato nell'elemento Field padre.

Informazioni sull'elemento

La tabella 114 fornisce informazioni sull'elemento Validator .

Tabella 114. Informazioni sull'elemento Validator

Attributo Valore
Numero di occorrenze Zero o uno all'interno di un elemento Field
Elementi padre Campo
Sommario Setter
Attributi dell'elemento

La tabella 115 elenca l'attributo dell'elemento Validator e ne fornisce una descrizione.

Tabella 115. Attributi e valori corrispondenti per l'elemento Validator

Attributo Descrizione
Tipo Specifica il tipo per il validator, definito nella DLL che contiene il validator
Osservazioni

Nessuna.

Esempio

Nessuna.

Mago

Questo elemento specifica la radice per tutti gli altri elementi.

Informazioni sull'elemento

La tabella 116 fornisce informazioni sull'elemento Wizard .

Tabella 116. Informazioni sugli elementi della procedura guidata

Attributo Valore
Numero di occorrenze Uno
Elementi padre Nessuno
Sommario DLL, Pagine, StageGroup,Stile
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<Wizard>
   + <DLLs>
   + <Style>
   + <Pages>
   + <StageGroups>
</Wizard>