Installazione guidata dall'utente - Guida per sviluppatori

L'installazione guidata dall'utente (UDI) semplifica la distribuzione dei sistemi operativi client Windows®, ad esempio Windows 8.1, nei computer che usano la funzionalità OSD (Operating System Deployment) in Microsoft® System Center 2012 R2 Gestione configurazione. UDI fa parte di Microsoft Deployment Toolkit (MDT).

Introduzione

In genere, quando si distribuiscono sistemi operativi utilizzando la funzione OSD, è necessario fornire tutte le informazioni necessarie per la distribuzione del sistema operativo. Le informazioni vengono configurate nei file di configurazione o nei database (come il file CustomSettings.ini o il database MDT [DBD]). È necessario fornire tutte le impostazioni di configurazione prima di poter avviare la distribuzione.

UDI offre un'interfaccia basata su procedure guidate che consente di fornire le informazioni di configurazione immediatamente prima di eseguire la distribuzione. Questo comportamento consente di creare sequenze di attività OSD generiche e quindi di fornire informazioni specifiche del computer al momento della distribuzione, in modo da offrire maggiore flessibilità nel processo di distribuzione.

Destinatari

Questa guida è stata scritta per gli sviluppatori che creano pagine di procedure guidate personalizzate per la procedura guidata UDI e editor di pagine di procedure guidate personalizzate per UDI Wizard Designer. Questa guida presuppone che si abbia familiarità con lo sviluppo di applicazioni Windows usando:

  • 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 (macchine virtuali Windows), utilizzato per creare editor di pagine personalizzate

  • Linguaggi supportati da macchine virtuali Windows, ad esempio C#, C++ o Microsoft Visual Basic® .NET, utilizzati per creare editor di pagine personalizzate per procedure guidate

Informazioni sulla guida

Questa guida fornisce le informazioni di riferimento necessarie per personalizzare le infezioni delle vie urinarie per l'organizzazione. Questa guida non illustra argomenti amministrativi o operativi, ad esempio l'installazione di MDT (che include UDI), la configurazione di UDI per distribuire sistemi operativi e applicazioni o l'esecuzione di distribuzioni usando la procedura guidata UDI. Per altre informazioni su questi argomenti, vedere gli argomenti UDI in Uso del Toolkit di distribuzione Microsoft, incluso in MDT.

Panoramica dello sviluppo UDI

Lo sviluppo UDI consente di estendere le funzionalità fornite da UDI. In genere, lo sviluppo UDI è necessario per raccogliere informazioni aggiuntive usate dal processo di distribuzione UDI. Queste informazioni aggiuntive vengono in genere salvate come variabili della sequenza di attività lette dai passaggi della sequenza di attività in una sequenza di attività UDI in Gestione configurazione.

Architettura UDI

L'obiettivo generale dello sviluppo UDI è creare pagine di procedure guidate personalizzate che possono essere visualizzate nella procedura guidata UDI. Creando pagine personalizzate della procedura guidata, è possibile estendere le funzionalità esistenti di 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.

La Figura 1 illustra la relazione tra UDI Wizard Designer e UDI Wizard.

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

Figura 1. Relazione tra la procedura guidata UDI e UDI Wizard 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. Le pagine della procedura guidata vengono create usando C++ in Microsoft Visual Studio®. Le pagine della procedura guidata personalizzata vengono implementate come DLL lette dalla procedura guidata UDI. Il kit di sviluppo software (SDK) UDI include un esempio su come creare pagine personalizzate di procedure guidate.

  • Editor di pagine della procedura guidata personalizzata. Gli editor delle pagine della procedura guidata consentono di configurare il comportamento di una pagina della procedura guidata personalizzata. Gli editor di pagine della procedura guidata personalizzati vengono implementati come DLL lette da UDI Wizard Designer. Gli editor di pagine della procedura guidata vengono creati utilizzando:

    • macchine virtuali Windows 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 utilizzare in UDI Wizard Designer. UDI SDK include un esempio su come creare editor di pagine personalizzate della procedura guidata.

    Inoltre, UDI Wizard Designer usa i file di configurazione dell'editor delle pagine della procedura guidata. I file di configurazione dell'editor di pagine della procedura guidata vengono creati come parte del processo di creazione delle pagine della procedura guidata e degli editor di pagine della procedura guidata personalizzati. Il Designer della procedura guidata UDI 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 della procedura guidata personalizzate e editor di pagine della procedura guidata, eseguire i passaggi seguenti 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 Verifica dell'ambiente di sviluppo UDI.

Preparare i prerequisiti per l'ambiente di sviluppo UDI

Per preparare i prerequisiti dell'ambiente di sviluppo UDI, eseguire la procedura seguente:

  1. Preparare i requisiti hardware per l'ambiente di sviluppo UDI come descritto in Preparare i prerequisiti hardware dell'ambiente di sviluppo UDI.

  2. Preparare i requisiti 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 ha i prerequisiti software seguenti:

  • Qualsiasi sistema operativo Windows supportato da Visual Studio 2010 (si consiglia Windows 7 o Windows Server ® 2008 R2).

    Avrai bisogno di un sistema operativo Windows che supporti l'architettura del processore per cui vuoi sviluppare. È possibile eseguire lo sviluppo UDI a 32 bit e a 64 bit usando un sistema operativo a 64 bit. Si esegue solo lo sviluppo UDI a 32 bit nei 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 ulteriori 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++ (il linguaggio utilizzato per estendere le pagine della procedura guidata UDI)

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

    Nota

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

Configurare l'ambiente di sviluppo UDI

Una volta soddisfatti i prerequisiti dell'ambiente di sviluppo UDI, eseguire la procedura seguente per configurare l'ambiente di sviluppo UDI:

  1. Installare Visual Studio 2010.

    Assicurarsi di installare il linguaggio C++ e qualsiasi altro linguaggio supportato da macchine virtuali Windows.

    Nota

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

    Per ulteriori 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, crea local_folder (in cui local_folder è una cartella qualsiasi situata in un'unità locale nel computer di sviluppo).

  4. Copia la cartella installation_folder\SDK in local_folder (dove installation_folder è la cartella in cui hai installato MDT e local_folder è una cartella qualsiasi situata in un'unità locale nel computer di sviluppo).

    Copi la cartella SDK in un'altra posizione perché MDT è installato nella cartella Program Files, in cui non è possibile scrivere senza diritti elevati. La copia della cartella SDK in un'altra posizione consente di modificare i file in tale cartella senza bisogno di diritti elevati.

  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 sottostante local_folder dovrebbe essere simile alla struttura di cartelle illustrata nella Figura 2 (dove local_folder è la cartella creata in precedenza nel processo ed è mostrata come UDIDevolopment nella figura).

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

    Figura 2. Struttura delle cartelle per lo sviluppo UDI

Verificare l'ambiente di sviluppo UDI

Quando l'ambiente di sviluppo UDI è configurato, verificare che l'ambiente di sviluppo UDI sia configurato correttamente assicurandosi 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 venga compilato correttamente

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

Per verificare che il progetto SamplePage venga compilato correttamente

  1. Avviare Visual Studio 2010.

  2. Aprire il progetto SamplePage.

    Il progetto SamplePage risiede 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à.

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

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

  5. Nelle proprietà di debug, in Configurazione, selezionare Tutte le configurazioni.

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

  7. Nelle proprietà Debug, in Directory di lavoro, digitare $(TargetDir).

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

  9. Nelle proprietà dell'evento di 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. Nel menu Debug , seleziona Avvia debug.

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

  13. Nella finestra di dialogo di Microsoft Visual Studio selezionare .

    Viene visualizzata la finestra di dialogo Nessuna informazione di debug , in cui viene visualizzato un messaggio che informa che non sono disponibili informazioni di debug per OSDSetupWizard.exe.

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

    La procedura guidata UDI si apre con la pagina della procedura guidata personalizzata visualizzata.

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

  16. Nel modulo della 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 venga compilato correttamente

Il progetto SampleEditor fornisce un esempio di come creare un editor di pagine della procedura guidata personalizzato per UDI Wizard Designer. Per ulteriori informazioni sul progetto SampleEditor, vedere Revisione della soluzione SamplePage di Visual Studio.

Per verificare che il progetto SampleEditor venga 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 , seleziona Aggiungi riferimento.

    Viene visualizzata la finestra di dialogo Aggiungi riferimento .

  5. Nella finestra di dialogo Aggiungi riferimento (Add Reference), selezionate la scheda Sfoglia (Brows).

  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 scegliere 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, vai a SampleEditor/Riferimenti.

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

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

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

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

  11. Nella scheda Debug , seleziona Avvia programma esterno.

  12. In Start programma esterno, digita installation_folder\Bin\UDIDesigner.exe (dove installation_folder è la cartella in cui hai installato MDT) e quindi seleziona OK.

    Consiglio

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

  13. Dal menu File , seleziona Salva tutto.

  14. Copia il file local_folder\SDK\SamplePage\SamplePage.dll.config nella cartella installation_folder\Bin\Config (dove local_folder è la cartella che hai creato nel computer di sviluppo all'inizio del processo di configurazione einstallation_folder è la cartella in cui hai installato MDT).

  15. In Visual Studio 2010, dal menu Debug , selezionare Avvia debug.

    Viene avviato UDI Wizard Designer.

  16. Nella procedura guidata UDI Designer, sulla barra multifunzione, selezionare Apri.

    Viene visualizzata la finestra di dialogo Apri .

  17. Nella finestra di dialogo Apri apri 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.

    Il file Config.xml si apre e lo StageGroup personalizzato viene visualizzato nel riquadro dei dettagli.

  18. Nel riquadro dei dettagli selezionare la scheda Configura .

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

    • Pulsante sbloccato, con cui si abilita o disabilita la casella di posizione

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

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

    • Casella di riepilogo della posizione, che include un elenco di posizioni possibili

  20. Chiudere UDI Wizard Designer.

  21. Chiudere Visual Studio 2010.

Revisione degli esempi di UDI SDK

Prima di iniziare lo sviluppo, esaminare gli esempi forniti nell'SDK UDI. 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.

Esamina gli esempi di UDI SDK esaminando:

Esamina 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 a un'altra cartella creata. Nella tabella 1 sono elencate le cartelle immediatamente sotto la cartella SDK e viene fornita una breve descrizione di ognuna.

Tabella 1. Cartelle in UDI SDK

Cartella Questa cartella contiene
Include File di intestazione C++ necessari per creare pagine personalizzate della procedura guidata per la procedura guidata UDI
Libs I file della libreria C++ che saranno collegati alla tua pagina personalizzata; Sono disponibili 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 Progetto di Visual Studio per la creazione di un editor personalizzato usato per modificare la pagina SamplePage in UDI Wizard Designer, scritto in C#
Pagina campione Un progetto di Visual Studio per la creazione di una pagina personalizzata della procedura guidata UDI, scritta in Visual C++

Esamina la soluzione SamplePage di Visual Studio

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

Rivedere il ciclo di vita della pagina della procedura guidata

Una pagina della procedura guidata UDI contiene metodi che corrispondono a ogni fase (o fase) del ciclo di vita della pagina. Nell'ambito della creazione di una pagina della procedura guidata personalizzata, è necessario eseguire l'override di questi metodi con il codice. Nella tabella 2 sono elencati i metodi di cui sarà necessario eseguire l'override e viene fornita una breve descrizione di ogni metodo, incluso quando utilizzare il metodo nel ciclo di vita della pagina della procedura guidata.

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

Metodo Descrizione
OnWindowCreated Questo metodo viene chiamato una volta, dopo che la finestra della pagina è stata creata.

Per questo metodo, scrivere codice che inizializzi la pagina per la prima volta e che debba essere eseguito una sola volta. Ad esempio, usare 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 (mostrata) nella procedura guidata UDI. Viene chiamata la prima volta che si visualizza la pagina e ogni volta che si passa alla pagina selezionando Avanti o Indietro nella procedura guidata.

Per questo metodo, scrivere codice che prepara la pagina da visualizzare, ad esempio leggendo variabili di memoria, variabili della sequenza di attività o variabili di ambiente e quindi aggiornando la pagina in base alle eventuali 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 WM_NOTIFY da un elemento figlio (in genere, controlli comuni).

Per questo metodo, scrivere codice che gestisca WM_NOTIFY in base al messaggio di notifica. Ad esempio, è possibile rispondere a 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 gestisca i messaggi della finestra pertinenti alla pagina della procedura guidata. In genere, non è 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 tutte le azioni necessarie prima di passare alla pagina successiva della procedura guidata, ad esempio per eseguire una convalida che potrebbe richiedere molto tempo. Se la convalida non riesce, è possibile annullare la richiesta successiva e visualizzare un messaggio.
OnWindowHidden Questo metodo viene chiamato ogni volta che la pagina viene nascosta quando viene visualizzata la pagina precedente o successiva della procedura guidata.

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 è necessario eseguire l'override di questo metodo.

Rivedi 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 nel 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 nel passaggio 2: La procedura guidata UDI carica la DLL per la pagina della procedura guidata personalizzata.

  3. La procedura guidata UDI visualizza la pagina della procedura guidata personalizzata e consente l'interazione di controllo desiderata, come descritto nel passaggio 3: La procedura guidata UDI visualizza la pagina della procedura guidata personalizzata.

  4. Dopo che la pagina della procedura guidata personalizzata ha raccolto le informazioni, eseguire tutte le attività necessarie prima di selezionare Avanti per passare alla procedura guidata successiva, come descritto nel passaggio 4: viene selezionato il pulsante Avanti nella pagina della procedura guidata personalizzata.

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

Quando viene avviata la procedura guidata UDI (OSDSetupWizard.exe), per impostazione predefinita legge il file di configurazione della procedura guidata UDI, che è il file UDIWizard_Config.xml, ovvero il file di configurazione principale per la procedura guidata UDI.

Nota

Nell'esempio viene utilizzato 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 nel 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à della procedura guidata UDI per l'uso del 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

  • Elemento DLL

  • Elemento di stile

  • Elemento Pages

  • Elemento StageGroups

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

    La procedura guidata UDI analizza l'elemento DLL alla ricerca dei file .dll da caricare. Nell'esempio sono elencati due file .dll: SamplePage.dll e SharedPages.dll. Questi file di .dll devono trovarsi nella stessa cartella di OSDSetupWizard.exe, ossia 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.

  • Il nome del progetto al posto di SamplePage.

  • Il nome della pagina della procedura guidata personalizzata al posto di LocationPage.

Passaggio 2: La procedura guidata UDI carica la DLL per la pagina della procedura 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 è 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 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 factory di classi per la procedura guidata UDI, che rende tale classe factory disponibile 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 è 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 utilizzando 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 utilizzando 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.

È inoltre possibile utilizzare la funzione RegisterFactories per registrare i tipi di attività e i tipi di validatori. Per ulteriori informazioni, vedere gli argomenti seguenti:

Nota

Nell'esempio viene contenuta e registrata solo una pagina della procedura guidata personalizzata. L'esempio non include attività o convalide personalizzate e pertanto non registra attività o convalide personalizzate.

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

La pagina della procedura guidata personalizzata nell'esempio è definita nel file LocationPage.cpp. Le pagine della procedura guidata derivano da classi modello che forniscono molte delle funzionalità disponibili per 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 di modelli facoltativi e le interfacce corrispondenti in base alle esigenze della pagina.

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

Per un elenco dei disponibili:

  • Classi modello per le pagine delle procedure guidate, vedere Classi helper delle pagine della procedura guidata

  • Interfacce per le classi del modello di pagina della procedura guidata, vedere Interfacce della 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 sono implementati nel file LocationPage.cpp.

    La pagina di esempio della procedura guidata personalizzata sostituisce i metodi seguenti:

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

    • AggiungiCampo. Questo metodo correla il controllo casella IDC_COMBO_LOCATION nella risorsa IDD_LOCATION_PAGE con l'elemento dati denominato Location nel file 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. Usare questo metodo per inizializzare i campi (controlli) aggiunti alla maschera. Il puntatore della pagina è un parametro. Nell'esempio viene passato il puntatore this che fa riferimento alla pagina corrente.

      Nota

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

      L'interfaccia IFieldCallback chiama il metodo SetFieldDefault , che consente di 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 Config.xml.

      Il metodo OnWindowCreated imposta il controller di modulo utilizzando l'interfaccia IFormController. Per ulteriori informazioni sull'impostazione del controller del modulo, vedere Impostazione 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 della variabile della sequenza di attività TSLocation con il valore selezionato nella casella combinata usando il metodo SaveFields

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

Passaggio 4: viene selezionato il pulsante Avanti nella pagina della procedura 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 della procedura guidata successiva, ad esempio la registrazione di eventuali modifiche di 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. Nel metodo OnNextSelected nella pagina della procedura guidata personalizzata di esempio vengono chiamati i metodi seguenti:

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

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

Esamina la soluzione di Visual Studio di SampleEditor

Prima di iniziare a creare pagine della procedura guidata personalizzate e editor di pagine della procedura guidata, eseguire i passaggi seguenti per preparare l'ambiente di sviluppo UDI:

Rivedere l'architettura di UDI Wizard Designer

UDI Wizard Designer è stato sviluppato usando macchine virtuali Windows, Prism e Unity. Il Designer UDI viene usato per modificare il file di configurazione della procedura guidata UDI (UDIWizard_Config.xml), che la procedura guidata UDI (OSDSetupWizard.exe) legge 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, UDI Wizard Designer carica l'editor di pagine personalizzato corrispondente al tipo di pagina della procedura guidata. Gli editor di pagine della procedura guidata personalizzata sono sviluppati come controlli utente macchine virtuali Windows. Le pagine dell'editor di pagine della procedura guidata personalizzata usano il modello di progettazione MVVM (Model-View-ViewModel ) per macchine virtuali Windows.

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 usando la proprietà CurrentPage dell'interfaccia IDataService .

UDI Wizard 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 interiezione delle dipendenze in Unity, vedere Dare un po' di vita alle applicazioni: Conoscere il blocco di applicazioni Unity.

Esaminare i componenti configurabili di una pagina della procedura guidata UDI

Quando si crea una pagina della procedura guidata personalizzata, alcune delle impostazioni di configurazione potrebbero essere impostate nel codice e non possono essere modificate dopo aver compilato la pagina. Tuttavia, per altre impostazioni di configurazione, dovrai consentire la modifica di tali impostazioni usando la procedura guidata UDI Designer.

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

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

  • Campo. I campi consentono agli utenti di fornire input. I campi vengono visualizzati come elementi campo nel file di configurazione della procedura guidata UDI (UDIWizard_Config.xml), che contiene le impostazioni di configurazione per ogni campo. L'editor della pagina 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 . Configurare le proprietà negli elementi Setter . Aggiungi un elemento Setter separato per ogni proprietà che desideri definire. È possibile modificare le proprietà utilizzando SetterControl e configurare altri elementi Setter utilizzando altri controlli.

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

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

Esamina 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. L'esempio EditorPage include i componenti principali seguenti:

  • Interfaccia utente per configurare le impostazioni della casella combinata Posizione

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

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

  • Codice di supporto per gli altri componenti

    Rivedere l'esempio EditorPage in Visual Studio eseguendo la procedura seguente:

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

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

  3. Esamina l'interfaccia utente usata per aggiungere o modificare percorsi all'elenco nei file AddEditLocationView.xaml e AddEditLocationView.xaml.cs come descritto in Esamina l'interfaccia utente usata per modificare l'elenco dei percorsi 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 pagina della procedura guidata di revisione

Gli editor di pagina della procedura guidata personalizzati vengono caricati come richiesto da UDI Wizard Designer. I file di configurazione di UDI Wizard Designer vengono caricati all'avvio di UDI Wizard Designer. La procedura guidata UDI Designer analizza la cartella install_folder\Bin\Config (dove install_folder è il nome della cartella in cui è installato MDT) alla ricerca di file con estensione .config.

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

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 macchine virtuali Windows.

  • Digitare. Usare questo attributo per configurare il tipo di pagina della pagina della procedura guidata personalizzata, caricata dalla procedura guidata UDI. UDI Wizard Designer usa questo attributo per individuare l'elemento Page appropriato nel file di configurazione UDI Wizard.

  • Dll. Usare questo attributo per configurare l'elemento DLL nel file di configurazione della procedura guidata UDI, creato da UDI Wizard Designer.

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

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

    Nell'esempio il tipo della pagina della procedura guidata personalizzata SamplePage è Microsoft.SamplePage.LocationPage, che viene salvata nel file Config.xml. Il file di Config.xml si trova nella cartella local_folder\SDK\SamplePage\SamplePage (dove local_folder è la cartella creata nel computer di sviluppo all'inizio del 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 esaminano l'interfaccia utente nella scheda Progettazione e il codice nella scheda XAML , è possibile notare la relazione tra l'interfaccia utente grafica e gli elementi e gli attributi in Extensible Application Markup Language (XAML).

Ad esempio, se si esamina l'elemento Controls:FieldElementControl nel codice XAML, è possibile vedere come ciò sia correlato al layout dell'interfaccia utente corrispondente. Utilizzare l'elemento Controls:FieldElementControl per definire il controllo FieldElementControl .

I parametri Binding nel file XAML associano i campi nell'editor della pagina 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 ulteriori informazioni, vedere Procedura: rendere disponibili i dati per l'associazione in XAML.

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

Esaminare l'interfaccia utente usata per modificare l'elenco dei percorsi possibili

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

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

Quando si fa clic con il pulsante destro del mouse nella casella di riepilogo che contiene l'elenco dei luoghi, viene visualizzato un menu sensibile al contesto. La barra multifunzione contiene 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 indicato di seguito:

  • SelectedItem. Questa proprietà associata ai 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 di 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 contestuale o dai pulsanti corrispondenti della barra multifunzione. È presente un'associazione dati a una proprietà nel modello di visualizzazione 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'associazione dati a una proprietà che restituisce l'oggetto EditLocationAction . Questo oggetto è il metodo EditLocationCallback , presente 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'associazione dati a una proprietà che restituisce l'oggetto RemoveAction . Questo oggetto è il metodo EditLocationCallback , presente 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 una nuova posizione all'elenco delle posizioni o si modifica una posizione esistente, viene visualizzato un messaggio che si trova nel file AddEditLocationView.xaml. Il messaggio viene visualizzato utilizzando il metodo finestra ShowDialogWindow nel file LocationPageEditorViewModel.cs.

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

  • Un frame di dialogo denominato DialogFrame, che include gli elementi seguenti:

    • Titolo da configurare utilizzando l'attributo DialogTitle della cornice di dialogo

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

    • Pulsante Annulla, che imposta lo stato restituito per la proprietà Approvato su False (lo stato restituito viene controllato nel metodo AddLocationCallback nel file LocationPageEditorViewModel.cs per determinare se l'utente ha selezionato Annulla).

  • Un elemento macchine virtuali Windows che contiene:

    • Un'etichetta, che si configura utilizzando l'attributo Content

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

Esamina 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, che è:

  • 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 della procedura guidata predefinita

    Nell'esempio di 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 personalizzate della procedura guidata UDI

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

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

  2. Posizionare i controlli (campi) desiderati nella maschera.

  3. Scrivere codice per eseguire le attività appropriate quando viene caricata la pagina della procedura guidata (sostituzioni 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 dei file XML, ad esempio le proprietà Setter .

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

    1. Abilitare o disabilitare i controlli in base alle informazioni lette durante il caricamento della pagina nel passaggio 3.

    2. Aggiornare i controlli in base alle informazioni lette al 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 (sostituzioni 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 eseguito dai campi della pagina).

  7. Crea la soluzione.

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

    • Sistema operativo esistente nel computer di destinazione. È possibile eseguire le versioni a 32 bit della pagina della procedura guidata in sistemi operativi Windows a 32 bit o a 64 bit. Tuttavia, è possibile eseguire solo le 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 aver creato una versione per la pagina della procedura guidata per ogni architettura del processore di Windows PE che si intende utilizzare.

  8. Copiare la DLL per la pagina della procedura guidata 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).

  9. Completa i passaggi per la creazione di un editor di pagine personalizzato.

Creazione di editor di pagine della procedura guidata personalizzata

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

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

  2. Crea l'interfaccia utente principale dell'editor di pagine in un file .xaml.

  3. Aggiungere le 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 della pagina principale utilizzando l'interfaccia IMessageBoxService come richiesto dalla pagina della procedura guidata da configurare.

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

  10. Crea la soluzione.

    Nota

    Verificare 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, si crea una versione a 64 bit dell'editor di pagine personalizzato.

  11. Creare una procedura guidata UDI Designer un file di configurazione per caricare le DLL necessarie ed 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 ulteriori informazioni sugli elementi necessari per eseguire il mapping tra la pagina della procedura guidata e l'editor della pagina della procedura guidata, vedere l'elemento DesignerMappings , gli elementi figlio e gli attributi corrispondenti.

  12. Copiare il file di configurazione del Designer della procedura guidata UDI creato nel passaggio precedente nella cartella installation_folder\Bin\Config, dove installation_folder è la cartella in cui è stata installata la versione 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. Per registrare la DLL con la procedura guidata UDI Designer libreria attività, creare un file di configurazione Designer (file .config) e inserirlo nella cartella installation_folder\Bin\Config, dove installation_folder è la cartella in cui è stato installato MDT.

Nota

È possibile creare una DLL che contiene pagine della procedura guidata, attività e convalida all'interno dello stesso file di .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 le validazioni nella DLL.

Per creare attività UDI personalizzate

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

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

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

  2. Scrivere codice che registri la factory della classe di attività personalizzata con il registro di fabbrica.

  3. Crea la soluzione per la tua attività personalizzata.

    Nota

    Verificare 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, si crea una versione a 64 bit dell'attività UDI personalizzata.

  4. Creare un elemento Task nell'elemento TaskLibrary nel file di configurazione di UDI Wizard Designer 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 in base alle esigenze dell'attività. Ad esempio, nell'estratto precedente, il parametro log viene utilizzato per specificare un parametro per la posizione di un file di log.

  5. Copiare il file di configurazione del Designer della procedura guidata UDI 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 platform è x86 per la versione a 32 bit o x64 è per la versione a 64 bit).

Creazione di validatori UDI personalizzati

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

Per creare validatori 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 di modulo chiama il membro Init per inizializzare il validatore. Questo metodo deve chiamare il metodo Init per la classe BaseValidator . In genere legge tutte le proprietà impostate per il validatore dal file di configurazione della procedura guidata UDI. Ad esempio, il validatore InvalidCharactersValidator recupera il valore della proprietà InvalidChars utilizzando questo metodo.

    • È valido. Il controller di maschera chiama questo metodo per verificare se il controllo contiene testo valido. Di seguito è riportato un esempio del metodo IsValid per un validator che verifica 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 di modulo chiama questo membro per ogni pressione di tasto e altri eventi in modo che il validatore 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 che è necessario ignorare. Tuttavia, a seconda della validatore, potrebbe essere necessario eseguire l'override di altri metodi nella sottoclasse della classe BaseValidator creata. Per ulteriori informazioni su questi altri metodi, vedere la classe BaseValidator .

  2. Scrivere codice che registri la classe di attività personalizzata nella factory del Registro di sistema.

  3. Crea la soluzione per la tua attività personalizzata.

    Nota

    Verificare 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, si crea una versione a 64 bit dell'attività UDI personalizzata.

  4. Creare un elemento Validator nell'elemento ValidatorLibrary nel file di configurazione di UDI Wizard Designer 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 . Specifica tutti gli altri parametri come richiesto dal validatore. Ad esempio, nell'estratto precedente, il parametro NamedPattern viene usato per specificare un parametro per il nome di un modello di espressioni regolari predefinito.

  5. Copiare il file di configurazione del Designer della procedura guidata UDI 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 platform è 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

Puoi usare uno dei diversi componenti predefiniti per creare le tue pagine personalizzate.

Creazione di istanze del componente

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

Supponendo che la pagina sia stata scritta come sottoclasse di WizardPageImpl, è possibile creare una nuova istanza di WmiRepoistory come questa:

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 il conteggio dei riferimenti per te.

Componenti creabili

È disponibile un set di componenti che è possibile registrare nel Registro di sistema. Il primo set di componenti viene sempre registrato, perché fornito dal file eseguibile della procedura guidata UDI principale. Gli altri due set di componenti sono 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 sapere quale eseguibile contiene un componente specifico.

L'elenco degli ID dei componenti per i componenti (il nome del componente è uguale all'ID ma senza il ID_ iniziale) registrati nel registro di fabbrica (definito in OSDSetupWizard) è mostrato nella Tabella 3.

Tabella 3. ID componente

ID Descrizione
ID_ACPowerTask (ITask, IWizardComponent) Un'attività di verifica preliminare che assicura che il computer non funzioni solo a batteria
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) Molto probabilmente non dovrai creare un'istanza da solo, poiché la tua pagina riceve la propria istanza
ID_InvalidCharactersValidator (IValidator) Verifica che nessun campo di testo contenga caratteri di un elenco fornito al validatore
ID_Logger (ILogger) Sarà preferibile non creare un'istanza manualmente, poiché la pagina riceve un puntatore all'istanza condivisa
ID_NonEmptyValidator (IValidator) Un validatore che assicura che nessun campo sia vuoto
ID_PasswordValidator (IValidator) Un validatore che garantisce che non esistano due campi di testo con lo stesso contenuto
ID_Regex (IRegEx) Valuta le espressioni regolari, ricerca di corrispondenze
ID_RegExValidator (IValidator) Validatore che esegue la convalida 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 mostrati nella Tabella 4 e nella Tabella 5.

Tabella 4. Controlli directory

ID Descrizione
ID_Directory (Direttorio) Una 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à di Active Directory® Domain Services (AD DS)
ID_CpuInfo (ICpuInfo) Determina se la CPU è a 32 o 64 bit
ID_DomainJoinValidator (IDomainJoinValidator) Ha alcuni metodi per verificare se un set di credenziali è autorizzato ad aggiungere un dominio
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Utilizza WMI per ottenere un elenco di unità nel computer
ID_WiredNetworkTask (Chiedi) Attività che consente di verificare se si è connessi alla rete con una scheda di rete cablata (anziché wireless)

Componenti di controllo

È possibile interagire con i controlli nella pagina tramite la funzione modello GetControlWrapper , che consente di accedere a uno dei tipi di componenti elencati nella tabella 6.

Tabella 6. Componenti

Tipi di controllo della finestra di dialogo Descrizione
CONTROL_CHECK_BOX (ICheckBox) Facciata per l'utilizzo dei controlli casella di controllo
CONTROL_COMBO_BOX (IComboBox) Facciata per controlli casella combinata
CONTROL_GENERIC (CONTROLLO) Consente di usare la maggior parte dei tipi di controlli per controllare l'abilitazione e lo stato visibile
CONTROL_LIST_VIEW (IListView) Facciata che consente di accedere alle funzionalità di un controllo di visualizzazione elenco
CONTROL_PROGRESS_BAR (IProgressBar) Una facciata per lavorare con la posizione di un controllo a barre di avanzamento
CONTROL_RADIO_BUTTON (IRadioButton) Una facciata per lavorare con i pulsanti di opzione
CONTROL_STATIC_TEXT (IStaticText) Una 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) Una facciata per l'uso con un controllo della visualizzazione albero

Componente elenco immagini

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

Componente FormController

Il componente creato automaticamente dalla procedura guidata viene passato alla pagina. È possibile accedervi dalla pagina utilizzando il metodo Form , implementato dalla classe base WizardPageImpl .

Componente InvalidCharacterValidator

Questo è un tipo di validatore che puoi includere in una pagina. L'ID è ID_InvalidCharactersValidator (definito in IValidator.h), il cui valore di testo è "Microsoft.Wizard.Validation.InvalidChars".

Questo validatore cerca una singola proprietà (un elemento Setter nel file .config) denominata InvalidChars, che è 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 l'errore.

Componente NonEmptyValidator

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

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

Componente PasswordValidator

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

Questo validatore funziona con due diversi controlli di testo (controlli che supportano IStaticText) e segnala gli errori se non contengono gli stessi valori. In altre parole, non riesce se le caselle di testo Password e Conferma password non corrispondono.

Poiché questo validatore richiede due controlli, richiede più configurazione rispetto ad altri validatori. La configurazione potrebbe avere un aspetto simile al 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);

Innanzitutto, definire 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 . Quindi, aggiungi uno strumento di convalida della password al modulo. Infine, fornire al validatore di password l'interfaccia per il controllo Conferma password .

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

Componente RegExValidator

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

Questo validatore confronta il contenuto di un controllo di testo (che supporta IStaticText) con un'espressione regolare e non riesce se il testo non corrisponde all'espressione regolare.

In alternativa, puoi utilizzare questo validatore con un modello denominato predefinito. Per utilizzare un'espressione regolare, il codice XML deve contenere una proprietà setter denominata Pattern. Se invece vuoi usare un modello denominato, usa un setter chiamato NamedPattern impostato su uno dei valori nella Tabella 7.

Tabella 7. Setter di modelli con nome

Criterio Descrizione
Username Verifica che il testo sia del modulo 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 di tutti 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 il caricamento di 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 le convalide (e qualsiasi altra class factory che si desidera registrare). Di seguito è riportato un esempio dal 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). Si usa questo metodo per scrivere voci nel file di log. Il contenuto del file di log è utile per diagnosticare i 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 finché l'utente non seleziona Fine (per impostazione predefinita). È possibile accedere al sacchetto TSVariable tramite il metodo TSVariables della pagina (implementato dalla classe base WizardPageImpl ). Questi componenti registrano tutte le operazioni di lettura e scrittura delle variabili della sequenza di attività.

Componente WmiRepository

Questo componente funge da 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 di supporto pagina della procedura guidata

È possibile creare pagine personalizzate della procedura guidata UDI usando le classi helper predefinite fornite con l'SDK UDI. La tabella 8 elenca le classi helper che è possibile usare per creare pagine personalizzate della procedura guidata.

Tabella 8. Classi di supporto

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 fabbrica.
Classe modello di interfaccia Utilizzare questa classe modello quando si desidera compilare un componente che implementa più di un'interfaccia.
Classe Path Helper Questa classe fornisce le operazioni comuni su file/directory.
Classe modello di puntatore Questa classe fornisce il conteggio dei riferimenti per la gestione della durata nei componenti COM. È importante rilasciare le interfacce quando si è finito di usarle. Questa classe modello gestisce automaticamente la durata.
Classe PUnknown Questa classe è un puntatore intelligente specifico per l'interfaccia IUnknown. Per tutte le altre interfacce, usa 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 a sua volta eredita da un'altra interfaccia.
Classe modello UnknownImpl Questa classe gestisce la maggior parte dei dettagli della creazione di un componente COM.
WizardComponent Classe modello Questa classe base viene usata per creare componenti che richiedono l'accesso ai servizi di procedura guidata, ad esempio la creazione e la registrazione dei componenti.
Classe modello WizardPageImpl Questa classe base deve essere usata come classe base per tutte le pagine personalizzate della procedura guidata

Classe ClassFactoryImpl

Si tratta di una classe di base utile per la creazione di una class factory che è quindi possibile registrare nel registro di fabbrica.

Di seguito è riportato un estratto dal 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 dal file di 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

Utilizzare questa classe modello quando si desidera 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 base che supporta sia IFieldCalback che le interfacce supportate da WizardPageImpl (che è IWizardPage).

Classe Path Helper

Questa classe fornisce le operazioni comuni su file/directory:

static inline std::wstring GetModulePath(HINSTANCE hModule)

Restituisce inoltre il percorso completo del file .exe o .dll con l'handle di istanza fornito a questo metodo:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)

La classe restituisce il percorso completo e il nome file del file .exe e .dll con l'handle di istanza fornito a 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 percorso 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 di puntatore

Questa classe è definita in Pointer.h. Poiché i componenti COM utilizzano il conteggio dei riferimenti per la gestione della durata, è importante rilasciare sempre le interfacce al termine delle interfacce. Microsoft fornisce una classe modello che gestisce automaticamente la durata. Ad esempio, se si desidera un puntatore intelligente per un'interfaccia XML, è possibile scrivere qualcosa di 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 Pointer chiama Release quando la variabile esce dall'ambito. Microsoft consiglia di usare puntatori intelligenti invece di chiamare AddRef e Release manualmente.

Inoltre, la classe puntatore intelligente Pointer chiama QueryInterface per recuperare automaticamente altre interfacce. Ad esempio, quando il registro di fabbrica crea una nuova istanza di un componente, ha un 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, usa 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 le maiuscole/minuscole (vedere la tabella 9).

Tabella 9. Classe Helper StringUtil

Resi Descrizione
0 Le stringhe corrispondono, ignorando le maiuscole/minuscole
<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 Microsoft .NET Format , nel senso che i parametri hanno la 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.

Classe modello SubInterface

Questa classe di base semplifica l'implementazione di un componente che supporta un'interfaccia che a sua volta eredita da un'altra interfaccia. Ad esempio, l'interfaccia ICheckBox eredita da IControl. Ecco come viene utilizzata 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 della creazione di un componente COM. Di seguito è riportato un esempio di come si usa questa classe base:

classDirectory :public UnknownImpl<IDirectory>

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

WizardComponent Classe modello

Questa classe è definita in IWizardComponent.h ed è una classe di base utile per la creazione di componenti che richiedono l'accesso ai servizi di 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 di modelli è l'interfaccia "main" che vuoi utilizzare per il tuo componente, che nel caso delle attività è ITask. L'utilizzo di WizardComponent indica che il componente supporta sia l'interfaccia fornita (ITask in questo esempio) che IWizardComponent.

Ogni volta che si utilizza il Registro di sistema della factory di classi 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 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 della pagina della procedura guidata

La procedura guidata UDI usa le interfacce per accedere ai diversi controlli nella pagina. All'interno della pagina, è possibile utilizzare la funzione GetControlWrapper per recuperare un wrapper del controllo. Ecco un esempio:

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

Qui, 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(nome utente LPCTSTR, password LPCTSTR, dominio LPCTSTR)

Questo metodo verifica la validità di un set di credenziali, 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(nome utente LPCTSTR, password LPCTSTR, dominio LPCTSTR, LPCTSTR computerName, LPCTSTR accountDomain)

Questo metodo verifica se un set di credenziali dispone dell'accesso in lettura/scrittura all'oggetto computer in Servizi di dominio Active Directory, 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 di avanzamento usa questa classe per eseguire attività in un thread separato. È inoltre possibile utilizzare 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 è 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. Inizializzazione HRESULT

Parametro Descrizione
pAttività Puntatore alla classe che contiene il codice da eseguire in un altro thread
Id Un numero che è possibile usare nel metodo Finished del callback per indicare quale attività ha terminato l'esecuzione; Utile se avvii diverse attività con lo stesso metodo di callback
pCallback Classe che implementa il metodo Finished , che viene chiamato ogni volta che termina l'esecuzione di un'attività. la chiamata al metodo Finished avverrà 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 mostrati nella tabella 13.

Tabella 13. Torna thread di sfondo

Resi 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 l'interruzione dell'esecuzione del thread o la scadenza del numero di millisecondi.

HRESULT Terminate(DWORD exitCode)

Questo metodo uccide il thread in esecuzione (vedere la Tabella 14 e la Tabella 15). Il completamento di questo processo potrebbe richiedere poco tempo dopo la restituzione di questo 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

Resi Descrizione
E_FAIL La chiamata alla chiusura non è riuscita.
S_OK La richiesta di terminare il thread è riuscita.
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 di risultato

Parametro Descrizione
pCode Puntatore a un DWORD che verrà impostato su return o nullptr se non è necessario il valore restituito. All'uscita, questo parametro è 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 valore HRESULT che verrà impostato al momento della restituzione 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; se 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 è implementata dal componente CheckBoxWrapper . È possibile recuperare un'istanza di questo componente utilizzando la funzione helper GetControlWrapper con il tipo CONTROL_COMBO_BOX.

HRESULT Bind([in] IBindableList *pList)

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

HRESULT Select(int index)

Selezionare l'elemento nella casella combinata all'indice.

int Selected(void)

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

void Add([in] LPCTSTR didascalia)

Aggiungere manualmente un elemento alla casella combinata.

HRESULT GetText([out, retval] LPBSTR pText)

Recupera 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 è implementata dal componente ControlWrapper . È possibile recuperare un'istanza di questo componente utilizzando 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 e FALSE in caso contrario.

HRESULT SetVisible(BOOL visible)

Mostrare o nascondere il controllo.

Interfaccia ICpuInfo

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

È possibile ottenere questa interfaccia creando un nuovo componente ID_CpuInfo . Il metodo singolo segnala 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 utilizzando ID_Directory, fornisce una facciata per l'utilizzo delle directory nel file system.

BOOL FileExists(nome LPCWSTR)

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 i caratteri jolly e restituisce sia i nomi di file che quelli di directory. Il metodo restituisce VERO se è stata trovata una corrispondenza, FALSO in caso contrario.

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 trovati più di recente. Puoi usare il codice come segue per verificare se si tratta di una directory:

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

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

void FinishFind(void)

Questo metodo rilascia le risorse utilizzate 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

È possibile ottenere un'istanza di questa interfaccia utilizzando il valore ID_DomainJoinValidator della funzione modello CreateInstance .

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

Inizializzare l'istanza, come mostrato nella tabella 17.

Tabella 17. HRESULT init - Inizializzazione dell'istanza

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

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

BOOL CanModifyComputerAdEntry(LPCWSTR nomedominio)

Verificare se l'utente dispone dei diritti per modificare la voce del computer. La maggior parte del lavoro è svolto 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)

Chiama questo metodo prima di chiamare qualsiasi altro componente. È necessario creare un nuovo WmiRepository prima di chiamare questo metodo.

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 le dimensioni minime dell'unità, in byte, per le unità che verranno restituite dalla query.

HRESULT Update(void)

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

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

Questo metodo aggiunge i nomi delle proprietà aggiuntive che si desidera rendere disponibili nei risultati della query. Chiama 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 Le dimensioni, in byte, rappresentate come stringa
DISKQUERY_DISKPARTITION DiskIndex Il numero del disco come numero intero, a partire da 0
DISKQUERY_LOGICALDISK VolumeName L'etichetta del volume
size_t Count(void)

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

HRESULT GetProperty(size_t indice, LPCTSTR propName, valore LPVARIANT)

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 "Dimensioni"
Valore Al ritorno, questo parametro contiene un valore variante della proprietà
HRESULT GetCaption(size_t indice, LPBSTR pCaption)

Questo metodo recupera la didascalia per un record che è uguale alla proprietà Caption.

Interfaccia di IImageList

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

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

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

Crea un nuovo elenco di immagini, gestito da questo componente. Chiama 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 sull'elenco di immagini.

int AddImage(HInstance hInstance, int resourceId)

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

Tabella 20. Interfaccia HRESULT IImageList

Parametro Descrizione
hInstance Handle di 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 è implementata dal componente ControlWrapper . È possibile recuperare un'istanza di questo componente utilizzando la funzione helper GetControlWrapper con il tipo CONTROL_LIST_VIEW.

int AddItem([in] testo LPCTSTR)

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 analitico L'indice della voce di elenco da modificare
colonna L'indice della colonna che si desidera aggiornare. la prima colonna viene impostata con AddItem, le colonne due e seguenti vengono impostate con questo metodo
testo La 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 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 che si chiami 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 allegarlo alla visualizzazione elenco.

int AddImage(HINSTANCE, hInstance, int resourceId)

Aggiungere un'immagine all'elenco di immagini della visualizzazione elenco. È necessario chiamare CreateImageList, prima.

HRESULT SetImage(int index, int imageIndex)

Imposta l'immagine che verrà visualizzata sul lato sinistro per un elemento specifico della visualizzazione elenco.

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 è implementata dal componente ProgressBarWrapper . È possibile recuperare un'istanza di questo componente utilizzando la funzione helper GetControlWrapper con il tipo CONTROL_PROGRESS_BAR.

HRESULT SetPercentage(int position)

Impostare la posizione dell'indicatore di stato utilizzando 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 è implementata dal componente RadioButtonWrapper . È possibile recuperare un'istanza di questo componente utilizzando 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. Chiama questo metodo prima di chiamare CheckRadio.

void CheckRadio(int id)

Impostare il pulsante di opzione specifico come pulsante singolo 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 è implementata dal componente StaticTextWrapper . È possibile recuperare un'istanza di questo componente utilizzando 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);
};

Implementa questa interfaccia se vuoi che il componente sia disponibile come attività nella pagina di verifica preliminare o se vuoi usare il componente BackgroundTask per eseguire operazioni su un thread in background.

Ecco 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"

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

Se si scrive un'attività per la pagina di verifica preliminare, chiamare questo metodo per inizializzare l'attività. Il file .config contiene codice XML che potrebbe avere un aspetto 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 fornisce 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 si scrive il codice che esegue l'attività. Questo metodo dovrebbe 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 abbinati agli <elementi Error> nella <sezione ExitCodes> se si utilizza la pagina di verifica preliminare.

Il parametro pReturnCode deve essere aggiornato con un numero che indichi lo stato dell'attività. Questi valori vengono abbinati dalla pagina delle verifiche preliminari 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 è implementata dal componente TreeViewWrapper . È possibile recuperare un'istanza di questo componente utilizzando la funzione helper GetControlWrapper con il tipo CONTROL_TREE_VIEW.

void EnableCheckboxes(void)

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

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

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

int AddImage(HINSTANCE, hInstance, int resourceId)

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

HTREEITEM AddItem(testo LPCTSTR, HTREEITEM hParent = NULL)

Aggiungere un nodo alla visualizzazione albero. Il nuovo nodo verrà aggiunto al livello superiore se hParent è NULL. In caso contrario, fornire l'handle all'elemento padre a 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 quella espansa.

void Clear(void)

Rimuovere tutti gli elementi dalla visualizzazione albero.

BOOL SetFirstVisible(elemento HTREEITEM)

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

BOOL SelectItem(elemento HTREEITEM)

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

void CheckItem(elemento HTREEITEM, checkState UINT)

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

Tabella 22.void Elenco immagini CheckItem predefinito

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

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

int SetItemHeight(altezza SHORT)

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

HRESULT EnableItem(elemento HTREEITEM, abilitazione BOOL)

Questo metodo abilita o disabilita un singolo elemento nella struttura. La disabilitazione di un elemento con figli non disabiliterà i bambini.

void Expand(HTREEITEM, hItem, BOOL expand)

Questo metodo espande o comprime un nodo nella struttura.

HTREEITEM GetChild(HTREEITEM hParent)

Questo metodo restituisce il primo elemento figlio di un elemento della visualizzazione 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 eseguire l'iterazione tra 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(elemento HTREEITEM)

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

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

Questo metodo è solo per uso interno.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

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

void SetSelectedBackColor(colore COLORREF)

Impostare il colore di sfondo usato 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 le chiamate WMI. L'interfaccia IWmiIteration consente di eseguire l'iterazione dei valori restituiti da una query.

HRESULT Next(void)

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

Tabella 23. La query HRESULT next(void) restituisce

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

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

Tabella 24. HRESULT GetProperty

Parametro Descrizione
propertyName Nome della proprietà che si desidera recuperare
pValue Indica una struttura VARIANT che, al ritorno, contiene il valore della proprietà

Tabella 25. Risultato GetProperty HRESULT

HRESULT Descrizione
S_OK È stato recuperato il valore della proprietà.
WBEM_E_NOT_FOUND Non esiste 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 è implementata dal componente WmiRepository (ID_WmiRepository).

HRESULT SetNamespace(LPCWSTR namespaceNameName)

Questo metodo imposta lo spazio dei nomi WMI che verrà usato per la query. Chiama 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 nelle tabelle 26 e 27.

Tabella 26. HRESULT ExecQuery

Parametro Descrizione
Query Stringa per la query WMI che si desidera eseguire
ppIteratore Passare un puntatore a un puntatore di interfaccia, che al ritorno verrà compilato con un'interfaccia, consentendo l'accesso ai risultati della query

Tabella 27. Risultato della query HRESULT

HRESULT Descrizione
S_OK Query riuscita
Altro Se la query non ha esito positivo, restituisce un valore 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 il proprio controller di modulo che implementa questa interfaccia. Usare questo controller per connettere i dati di campo nel file XML .config ai controlli nella pagina. Il controller del modulo gestisce quindi molti dettagli per l'utente.

Configurazione del modulo

In generale, impostare il controller di modulo nel metodo OnWindowCreated della pagina. Ciò di solito comporta la chiamata dei metodi mostrati nella Tabella 28.

Tabella 28. Metodo OnWindowCreated

Metodo Descrizione
Inizializzazione Inizializza il controller di modulo
AddField Fornisce una connessione tra un campo nel file XML .config che è un nome stringa e un controllo nella finestra di dialogo della pagina che è un ID
AddRadioGroup Consente di connettere un pulsante di opzione a un gruppo e a un controllo nella finestra di dialogo
AddToGroup Consente di abilitare o disabilitare i controlli "per bambini" insieme all'elemento padre o in base al pulsante di opzione selezionato
InitFields Chiama 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 eventi correlati al modulo.

Salva i dati del modulo

Nel metodo OnNextSelected chiamare i metodi di maschera mostrati nella tabella 29.

Tabella 29. Metodo OnNextSelected

Metodo Descrizione
Sezione iniziali Fornisce 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
Inizializzazione
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)

In genere si chiama questo metodo all'inizio del metodo OnWindowCreated della pagina. Il comando dovrebbe avere un aspetto simile al seguente:

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

Questo metodo viene chiamato internamente e non dovresti chiamarlo da solo. Fornisce il codice XML della pagina al controller del modulo.

Convalida
HRESULT Validate(void)

Questo metodo esegue tutte le validazioni collegate ai controlli. Se un validatore non viene superato, il controller del modulo visualizza un messaggio di avviso e disabilita il pulsante Avanti , quindi interrompe l'elaborazione dei validatori. 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 elemento 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 per l'utente.

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

Chiamare questo metodo solo se si dispone di un validatore che si desidera creare nel codice anziché con l'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 validatore che si desidera creare nel codice anziché con l'XML.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)

Chiamare questo metodo per disabilitare esplicitamente il validatore per un controllo o ripristinare la convalida normale, come mostrato nella Tabella 31. Questo metodo è utile, ad esempio, quando si hanno regole di abilitazione/disabilitazione per i controlli che non sono coperti dalla convalida del modulo ed è necessario disabilitare la convalida per un controllo. In altre parole, normalmente non chiameresti questo metodo. Questo metodo restituisce sempre S_OK.

Tabella 31. HRESULT DisableValidation

Parametro Descrizione
controlId Il controllo per cui si desidera abilitare o disabilitare la convalida
Disable Impostato 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 del 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
Nome campo Nome del campo così come viene 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 relativi a password o PIN
Tipo Il tipo di controllo, ovvero 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 chiamarlo prima del metodo InitFields , poiché tale metodo utilizza gli attributi nell'elemento RadioGroup per controllare le impostazioni per tutti i controlli del pulsante di opzione nel gruppo. I gruppi radio possono essere bloccati, ad esempio, in modo che tutti i pulsanti di opzione siano disabilitati, ma i controlli bambino siano 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 dei pulsanti di opzione nel gruppo, nonché tutti gli elementi figlio di tali pulsanti di opzione aggiunti con AddToGroup. Vedi Tabella 34 e Tabella 35.

Tabella 34. EnableRadioGroup

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

Tabella 35. HRESULT EnableRadioGroup

HRESULT Descrizione
S_OK Gruppo abilitato o disabilitato
E_INVALIDARG Non esiste alcun 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 viene fornito, il controller del 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 di 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 . Fornire un puntatore in pFieldCallback consente di gestire il salvataggio dei valori 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.

Sezione iniziali
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)

Questo metodo inizializza i dati di riepilogo che verranno visualizzati nella pagina Riepilogo , come mostrato 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 utilizzato 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 oltre a quelli impostati con XML. Vedi tabella 37.

Tabella 37. HRESULT AddSummaryItem

Parametro Descrizione
Nome La didascalia dell'elemento di riepilogo visualizzata sul lato sinistro
Secondo Il 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. Chiama questo metodo per le variabili della sequenza di attività che archiviano 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 è necessario chiamare questo metodo manualmente, perché il controller di maschera esegue questa operazione per tutti i campi. Vedi Tabella 38.

Tabella 38. HRESULT SaveText

Parametro Descrizione
controlId ID della casella di testo che contiene il valore da salvare o qualsiasi altro controllo in grado di restituire testo.
tsVariableName Nome della variabile della sequenza di attività da modificare
sommarioDidascalia La 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.

Evento di controllo
void ControlEvent(WORD eventId, WORD controlId)

Chiamare questo metodo nel 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 passati al metodo OnControlEvent .

IsValid
BOOL IsValid(void)

Questo metodo restituisce lo stato della convalida più recente del modulo. Se uno dei validatori 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 di 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 validatori sono componenti che possono convalidare un singolo controllo nella pagina. Il modo più semplice per implementare un validatore è renderlo una sottoclasse della classe BaseValidator , definita nel file di intestazione BaseValidator.h.

HRESULT Init(IControl *pControl, messaggio LPCTSTR)

Se crei un validatore nel codice, puoi chiamare questo metodo per inizializzare il validatore. Vedi tabella 39.

Tabella 39. Inizializzazione HRESULT

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

Il controller di modulo chiama questo metodo per inizializzare le validazioni che crea in base al codice XML della pagina. Vedi tabella 40.

Tabella 40. Metodo di inizializzazione HRESULT

Parametro Descrizione
pControl Il controllo che il validatore deve convalidare
pContainer Nel caso in cui il validatore abbia bisogno di accedere al logger o di creare altri componenti
pProprietà Fornisce l'accesso alle proprietà (elementi setter) per il validatore
BOOL, IsValid(LPBSTR pMessage)

Questo metodo restituisce TRUE se il controllo è valido o FALSE se il controllo non è valido. Al ritorno, 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 è implementato dal componente ID_Regex (IRegex.h) e fornisce il supporto per l'elaborazione di espressioni regolari.

BOOL MatchesRegex(input LPCTSTR, regex LPCTSTR)

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 VERO se sono presenti corrispondenze e FALSO in caso contrario.

HRESULT GetMatch(size_t indice, LPBSTR pValue)

Questo metodo consente di recuperare le corrispondenze dalla chiamata MatchesRegex più recente. Si noti che in questo metodo non si verifica alcun errore di elaborazione e che 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 direttamente questa interfaccia. Invece, usa 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 direttamente questa interfaccia. Invece, usa 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 fornisce l'accesso alle variabili della sequenza di attività. È possibile accedere a questa interfaccia utilizzando 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 un valore specifico della sequenza di attività dalla memoria. La volta successiva che chiami GetValue con lo stesso nome della sequenza di attività, il metodo tenterà di recuperarlo dalla sequenza di attività.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Ogni volta che vengono scritte le 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. Chiama questo metodo per eliminare la registrazione di valori sensibili, ad esempio password o PIN, per una variabile specifica della sequenza di attività.

void Save(void)

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

Interfaccia di 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 è per uso interno da parte 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 desidera eseguire elaborazioni aggiuntive 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 selezioni Fine. Se si annulla la procedura guidata, l'attività imposta solo la variabile OSDSetupWizCancelled della sequenza di attività su TRUE e non salva le modifiche apportate ad altre variabili della sequenza di attività.

Se crei il tuo componente di finitura, devi registrarlo con un 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 origine dati che si desidera 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 indice, LPBSTR pCaption)

Questo metodo restituisce la didascalia dell'elemento in 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 fornisce l'accesso ai dati gerarchici che possono essere salvati in una pagina. Questa interfaccia si ottiene tramite i metodi dell'interfaccia ISettingsProperties , disponibile per la pagina tramite il metodo Settings .

I dati nel codice XML di una pagina possono avere un aspetto simile 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>

Calling Settings()->GetDataNode(L"Network", &pData) fornisce un'istanza 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 il popolamento 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 questa associazione. Ad esempio, è possibile chiamare questo metodo con DisplayName e userebbe la proprietà setter per l'associazione dati. La casella combinata conterrà quindi il team pubblico e il team di sviluppo come elementi.

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

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

Tabella 41. DataItem GetProperty

Parametro Descrizione
Indice Valore di indice (a partire da 0) dell'oggetto DataItem per cui si desidera recuperare un valore di proprietà
propertyName Nome della proprietà setter per la quale si desidera recuperare un valore
propertyValue Al ritorno, contiene il valore stringa di una proprietà

Tabella 42. HRESULT GetProperty

HRESULT Descrizione
S_OK La proprietà è stata recuperata.
E_INVALIDARG L'indice ha superato 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 DataItem di cui è stato eseguito il wrapping in un'interfaccia ISettingsProperties . Cfr. tabella 43 e tabella 44.

Tabella 43. HRESULT GetNode

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

Tabella 44. Risultati GetNode HRESULT

HRESULT Descrizione
S_OK Il nodo è stato recuperato.
E_INVALIDARG L'indice ha superato 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 page factory, ovvero una classe che implementa IClassFactory. È possibile usare ClassFactoryImpl come classe di base per la factory.

void Register(tipo LPCTSTR, IClassFactory *pFactory)

Questo metodo registra una class factory con il Registro di sistema. Vedi tabella 45.

Tabella 45. Registro vuoto IClassFactory

Parametro Descrizione
Tipo Una stringa che identifica la fabbrica che stai registrando; In genere, questo parametro deve includere il nome della società nella stringa per assicurarsi che sia univoco
pFactory Puntatore all'istanza della factory di classe
HRESULT, LoadAndRegister(LPCTSTR, dllName, ILogger *pLogger)

Questo metodo è solo per uso interno.

BOOL Contains (tipo LPCTSTR)

Questo metodo è generalmente per uso interno. Controlla se una class factory è stata registrata per un tipo.

HRESULT GetFactory(tipo LPCTSTR, IClassFactory **ppFactory)

Questo metodo consente di recuperare la class factory. In genere, chiami 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(tipo LPCTSTR, IUnknown **ppInstance)

Questo metodo crea una nuova istanza di un componente, in base al suo tipo. Utilizza invece il metodo del modello CreateInstance , che consente la creazione di oggetti con indipendenza 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 fornito con il parametro della riga di comando /locale per la procedura guidata UDI. Il metodo restituisce uno dei valori seguenti:

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

  • 0, se non è stato fornito 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 trovati sul campo. È buona norma che le pagine registrino le informazioni. È possibile ottenere un puntatore a questa interfaccia dall'interno della pagina utilizzando il metodo Logger() della pagina. Le righe nel file di log contengono un numero di "livello" che rappresenta i 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 di 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>
Inizializzazione
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)

Chiama questo metodo per registrare le informazioni su un errore. Vedi tabella 46.

Tabella 46. Errore HRESULT

Parametro Descrizione
Errore Il codice di errore restituito da una chiamata (questo codice verrà visualizzato nella voce del log come numero).
Componente Stringa che identifica l'origine dell'errore, che in genere è la pagina o il componente scritto
Messaggio Il messaggio che spiega cosa ha causato l'errore
Errore 2
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 conterrà "message" e quindi "message2" nel file di output. Questo è semplicemente un metodo conveniente.

Normale
HRESULT Normal(LPCTSTR component, LPCTSTR message)

Questo metodo registra un messaggio normale. Per i parametri, vedere la descrizione del metodo Error .

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. Per i parametri, vedere la descrizione del metodo Error .

Dettagliato2
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. Per i parametri, vedere la descrizione del metodo Error . I messaggi di debug non vengono salvati nel file a meno che non sia abilitato. 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 di 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 fornisce l'accesso ai dati della pagina. Per ottenere il livello superiore dei dati della pagina, utilizzare il metodo Settings() della pagina.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

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

IStringProperties * Properties()

Questo metodo fornisce l'accesso ai valori della proprietà setter nel nodo principale. Per una pagina, queste sono le proprietà di primo livello.

HRESULT, SelectNodes(LPCTSTR, xPath, IXMLDOMNodeList, **ppList)

Chiama questo metodo se vuoi ottenere direttamente un elenco di nodi XML usando un'espressione XPath. È meglio usare uno degli altri metodi, se puoi. Usare questo metodo solo se non è possibile accedere ai nodi in nessun altro modo.

HRESULT SelectSingleNode(LPCTSTR, xPath, IXMLDOMNode **ppNode)

Chiama questo metodo se vuoi ottenere direttamente un singolo nodo XML usando un'espressione XPath. È meglio usare uno degli altri metodi, se puoi. Usa questo metodo solo se non puoi raggiungere un nodo in nessun altro modo.

HRESULT GetDataNode(nome LPCTSTR, ISettingsProperties **ppNode)

Recupera un elemento Data in base all'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 dei record. Ad esempio, dato questo codice XML:

    <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 fornisce un modo rapido per accedere al set di nodi DataItem in un nodo Data specifico. Utilizzando l'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. Viene però 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 invece di usare valori da XML. Di seguito è riportato un esempio di come si può 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 consente di accedere facilmente a un set di elementi setter che provengono 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 di proprietà. Cfr. tabella 47 e tabella 48.

Tabella 47. IHRESULT Ottenere il valore della proprietà

Parametro Descrizione
propertyName Nome dell'immobile da leggere
pPropValue All'uscita, contiene il valore della proprietà come stringa (questo valore sarà nullptr se non esiste tale proprietà).

Tabella 48. IHRESULT Ottenere i risultati del valore della proprietà

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

Interfaccia di 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 è implementata dal componente TaskManager (ID_TaskManager in ITaskManager.h), che è il componente che esegue le attività nella pagina di verifica preliminare. Puoi utilizzare direttamente la pagina di preflight, che è ciò che fai la maggior parte delle volte, o creare la tua pagina, lasciando che questo componente faccia 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 . Vedi tabella 49.

Tabella 49. Inizializzazione HRESULT

Parametro Descrizione
pPageView Fornisce l'accesso alla pagina in cui verranno eseguite 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 e lo stato di tali attività
idMessage ID controllo di una casella di testo che verrà usata 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 Un wrapper intorno al codice XML della pagina (TaskManager carica il set di attività da eseguire da questo codice 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 distinto.

HRESULT GetTaskMessage(size_t indice, messaggio LPBSTR)

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

HRESULT GetResultType)(size_t indice, tipo LPBSTR)

Questo metodo recupera il "tipo" corrente di 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 osservando il codice di uscita o di errore dell'attività e trovando una corrispondenza nell'elemento XML ExitCodes> dell'attività<.

HRESULT GetProperty(size_t indice, LPCTSTR propertyName, valore LPBSTR)

Questo metodo viene utilizzato dalle pagine di stato 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, che è utile se si desidera recuperare informazioni aggiuntive sull'attività (vedere il metodo GetProperty ) da visualizzare per l'attività selezionata. Le pagine Stato e Verifica preliminare utilizzano questo metodo per visualizzare un'immagine per l'attività selezionata.

HRESULT Wait(DWORD, waitMilliseconds)

Questo metodo aiuta principalmente con gli unit test in modo che il test possa garantire che le attività finiscano prima dell'uscita dello unit test. Normalmente non chiameresti questo metodo. Restituisce un risultato al termine dell'esecuzione di tutte le attività o quando è trascorso il tempo di attesa.

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 dall'evento OnCommonControlEvent della pagina in modo che TaskManager possa elaborare gli eventi necessari.

void OnControlEvent(WORD, eventId, WORD, controlId)

Chiamare questo metodo dall'evento 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 viene implementata direttamente, ma tramite la classe modello WizardComponent . Se il componente implementa questa interfaccia ed è stata registrata una class factory nel Registro di sistema, il componente riceve un puntatore all'istanza IWizardPageContainer al momento della creazione. Questo ti aiuta, ad esempio, ad accedere al Logger o al registro per creare altri componenti di cui il tuo componente potrebbe aver bisogno.

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 è implementata da WizardPageImpl, quindi in genere non dovrai implementarla da solo. La procedura guidata chiama tutti questi metodi per l'utente 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 tua pagina tramite il metodo Container (implementato da WizardPageImpl) e ti dà accesso a vari servizi della procedura guidata.

ILogger * Logger(void)

Usare 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 fornisce l'accesso alle variabili di "memoria", che sono proprietà che sono in memoria solo durante l'esecuzione della procedura guidata UDI. Queste proprietà sono disponibili per le 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, è meglio usare la funzione modello CreateInstance, perché è fortemente tipizzata.

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

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

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

Questo metodo gestisce l'uso delle variabili all'interno di valori stringa. Supporta i formati illustrati nelle tabelle 51 e 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. Usa il valore di una variabile della sequenza di attività, se presente.
2. Utilizzare il valore di una variabile di ambiente, se presente.
3. Altrimenti, rimuovi questo testo dalla stringa.

Tabella 52. Parametro HRESULT

Parametro Descrizione
Source Stringa di input, che può contenere qualsiasi combinazione di $ variabili AND % o nessuna
pDest Al ritorno, contiene una nuova stringa in cui sono stati sostituiti tutti i token 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 l'oggetto OnNextSelected nella pagina. Inoltre, il comportamento di questo metodo è soggetto a modifiche, quindi usalo a tuo rischio e pericolo.

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

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

BOOL InPreview(void)

Questo metodo restituisce TRUE se la procedura guidata è stata avviata in modalità "anteprima" fornendo l'opzione /preview . In modalità anteprima, il pulsante Avanti non viene 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 HWND per la finestra di dialogo principale. Usa questo metodo con cautela. In generale, l'interfaccia di programmazione dell'applicazione UDI Wizard è progettata in modo da non lavorare mai direttamente con le maniglie delle finestre.

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 tua pagina attraverso 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 sulla tua pagina. L'uso di queste facciate invece dei controlli effettivi rende molto più facile scrivere test per la tua pagina, perché puoi fornire facciate fittizie dai tuoi test.

Invece di usare questo metodo direttamente, è consigliabile usare il metodo del modello GetControlWrapper , che è 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 di finestra per la pagina. In generale, non dovresti aver bisogno di accedere a questa maniglia della finestra.

HWND GetControl(int itemId)

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

Visualizzazione HRESULT (vuoto)

Questo metodo è solo per uso interno.

HRESULT Hide(void)

Questo metodo è solo per uso interno.

HRESULT Focus(int itemId)

Impostare lo stato attivo dell'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, abilitazione BOOL)

Richiedere l'abilitazione o la disabilitazione di uno dei pulsanti della procedura guidata. Lo stato del pulsante potrebbe non corrispondere a quello 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(messaggio LPCTSTR)

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 è implementata dal componente ID_IXmlDocument , che è una facciata progettata per semplificare l'uso di documenti XML in C++.

Caricamento HRESULT (nome file LPCTSTR)

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 .

Salvataggio HRESULT (nome file LPCWSTR)

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 del caricamento del documento XML, se presente. Restituisce sempre S_OK.

HRESULT, SelectNodes(LPCTSTR, xpath, IXMLDOMNodeList, **ppNodes)

Questo metodo consente di utilizzare 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 utilizzare un'espressione XPath per recuperare un nodo dal documento. Restituisce sempre S_OK.

HRESULT AddSchema(nome file LPCTSTR, LPCTSTR ns)

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

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

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

Tabella 53. HRESULT AddAttribute

Parametro Descrizione
pNode Il nodo al quale si desidera aggiungere un attributo
Nome Nome del nuovo attributo
Valore Il valore per il nuovo attributo
HRESULT CreateNode(tipo DOMNodeType, nome LPCWSTR, LPCWSTR ns, IXMLDOMNode **ppNode)

Chiama 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 del padre.

Funzioni di supporto

Funzione modello CreateInstance

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

Questa funzione è definita in IWizardPageContainer.h e fornisce un wrapper indipendente dai tipi sul 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 sul 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 .

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

Questo file viene utilizzato dalla procedura guidata UDI Designer. Per ogni file di .dll personalizzato, viene creato un file separato, che può contenere editor di pagine di procedure guidate personalizzate, attività personalizzate o validatori personalizzati. Il file deve terminare con .config e trovarsi nella cartella installation_folder\Bin\Config, dove installation_folder è la cartella in cui è stato installato MDT.

La tabella 54 elenca gli elementi nel file di configurazione di UDI Wizard Designer e le relative descrizioni. L'elemento DesignerConfig è il nodo radice per questo riferimento.

Tabella 54. Elementi nel file di configurazione di UDI Wizard Designer e relative descrizioni

Nome elemento Descrizione
DesignerConfig Specifica la radice per tutti gli altri elementi
DesignerMappings Raggruppa un set di elementiPage
Pagina Specifica un editor di pagine della procedura guidata da caricare in UDI Wizard Designer, che viene usato per modificare le impostazioni di configurazione per una pagina della procedura guidata
Param Specifica un parametro che viene passato all'elemento padre Task o Validator e corrisponde a un elemento Setter nel file di configurazione della procedura guidata UDI Nota: gli attributi di questo elemento sono diversi se l'elemento padre è l'elemento Task o Validator .
Attività Specifica un'attività all'interno della libreria attività
Elemento attività Specifica un gruppo di parametri che vengono passati all'attività
Libreria attività Raggruppa un set di elementi Task
Validatore Specifica un validatore 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 insieme 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 non è presente alcuna pagina della procedura guidata personalizzata nella DLL corrispondente al file di configurazione di UDI Wizard Designer).
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 in UDI Wizard Designer, che a sua volta viene usato 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 sugli elementi di pagina

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 formattato
Attributi dell'elemento

La tabella 58 elenca gli attributi dell'elemento Page e una descrizione per ciascuno di essi.

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

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sul parametro, che viene visualizzato nella UDI Wizard Designer
DesignerAssembly Specifica il nome del file di .dll associato all'editor della pagina della procedura guidata (il file di .dll deve esistere nella cartella installation_folder\Bin (dove installation_folder è la cartella in cui è stato installato MDT).
DesignerType Specifica il nome dell'editor della pagina della procedura guidata all'interno del file di .dll specificato nell'attributo DesignerAssembly (questo è il tipo Microsoft .NET per l'editor della pagina 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 di .dll associato alla pagina della procedura guidata (il file .dll deve esistere nella cartella installation_folder\Templates\Distribution\Tools\platform (dove installation_folder è la cartella in cui hai installato MDT e la piattaforma è x86 per la versione a 32 bit o x64 è per la versione a 64 bit). Nota: Verificare che l'architettura del processore DLL corrisponda all'architettura del processore MDT installata. Ad esempio, se è 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 esistere nella cartella installation_folder\Bin\Images (dove installation_folder è la cartella in cui è stato installato MDT).
Tipo Specifica l'editor della pagina della procedura guidata e deve corrispondere al nome utilizzato al momento della registrazione della pagina personalizzata
Osservazioni

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

Esempio

Nessuna.

Param

Questo elemento specifica un parametro che viene 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 sugli elementi Param

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

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

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

Attributo Descrizione
Descrizione Specifica il testo che fornisce informazioni sul parametro, che viene visualizzato nella procedura guidata UDI Designer Nota: questo attributo è valido solo per l'elemento Validator.
DisplayName Specifica il nome descrittivo del parametro validator, che viene visualizzato per la pagina UDI Wizard appropriata in UDI Wizard 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 alla convalidatore, 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 per gli elementi padre TaskItem e Validator .
Osservazioni

Nessuna.

Esempio

Nessuna.

Attività

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

Informazioni sull'elemento

La tabella 61 fornisce informazioni sull'elemento Task .

Tabella 61. Informazioni sull'elemento attività

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

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

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 UDI Wizard Designer
DLL Specifica il nome del file di .dll associato all'attività (il file .dll deve esistere nella cartella installation_folder\Templates\Distribution\Tools\platform (dove installation_folder è la cartella in cui hai installato MDT e la piattaforma è x86 per la versione a 32 bit o x64 per la versione a 64 bit).
Nome Specifica il nome dell'attività, che viene visualizzato nella pagina UDI Wizard appropriata e in UDI Wizard Designer
Tipo Specifica il tipo di attività, che è registrata nel registro di fabbrica e usata per chiamare un'attività specifica all'interno di un file di .dll
Osservazioni

Nessuna.

Esempio

Nessuna.

Elemento attività

Questo elemento specifica un gruppo di parametri che vengono 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ù per ogni elemento Task
Elementi padre Attività
Sommario Param
Attributi dell'elemento

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

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 corrispondente al valore di questo attributo. Ad esempio, se il valore per 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.

Libreria attività

Questo elemento raggruppa un insieme 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 non sono presenti attività personalizzate nella DLL corrispondenti a questo file di configurazione di UDI Wizard Designer).
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>

Validatore

Questo elemento specifica un validatore all'interno della libreria validatore.

Informazioni sull'elemento

La tabella 66 fornisce informazioni sull'elemento validatore .

Tabella 66. Informazioni sull'elemento validatore

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 fornisce una descrizione di ciascuno.

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

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

Nessuna.

Esempio

Nessuna.

ValidatorLibrary

Questo elemento raggruppa un set di elementi validatore .

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 validatori personalizzati corrispondenti a questo file di configurazione di Designer della procedura guidata UDI).
Elementi padre DesignerConfig
Sommario Validatore
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Richiede testo in un campo" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Non consente la presenza di determinati caratteri in un campo" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Deve seguire uno schema predefinito" 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 su UDI Wizard Designer

Controlli

I controlli utilizzati per creare editor di pagine della procedura guidata personalizzati da utilizzare in UDI Wizard Designer sono istanze di macchine virtuali Windows UserControl. Nella tabella 69 sono elencati i controlli che è possibile usare per creare editor di pagine personalizzate per la procedura guidata.

Tabella 69. Controlli che possono essere usati per creare editor di pagine personalizzate della procedura guidata

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

CollezioneTControl

Questo controllo offre molte funzionalità per la modifica dei dati. Il modo migliore per imparare ad utilizzare questo controllo è esaminare l'esempio, che illustra come modificare i dati nell'elemento Data di una pagina. In particolare, nell'esempio viene illustrato come aggiungere, rimuovere e modificare elementi in questo controllo.

FieldElementControl

Usare questo controllo per modificare un campo, che in genere è collegato a un controllo TextBox nella pagina .xaml.

Esempio

L'estratto seguente da un file con estensione xaml illustra l'uso di FieldElementControl per configurare il valore predefinito per un campo in una pagina della procedura guidata utilizzando 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 effettuata a una proprietà dell'interfaccia dell'editor di pagine. L'estratto seguente da un file con estensione xaml illustra l'utilizzo della proprietà FieldData :

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

In questo estratto, l'interfaccia dell'editor di pagine si chiama ControlRoot ed è 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. La posizione è una proprietà della visualizzazione che restituisce un elenco delle posizioni 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 arancione visualizzato immediatamente sopra il controllo.

Testo delle istruzioni

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 cambia stato tra Sbloccato e Bloccato (abilitato o disabilitato). Se impostato su:

  • Vero, 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, nel FieldElementControl non esiste una scheda, bensì una sezione che può essere nascosta. Se impostato su:

  • È vero, 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:

  • È vero, 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:

  • Vero, 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 dei validatori. Anche se la proprietà fa riferimento a una scheda, nel FieldElementControl non esiste una scheda, bensì una sezione che può essere nascosta. Se impostato su:

  • È vero, la sezione non è visibile

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

NascondiScheda Riepilogo

Questa proprietà booleana consente di controllare la visibilità della sezione in cui si configura la didascalia di riepilogo dei campi. La didascalia e il valore corrispondente del campo vengono visualizzati in un tipo di pagina della procedura guidata SummaryPage in un flusso stage. Anche se la proprietà fa riferimento a una scheda, nel FieldElementControl non esiste una scheda, bensì una sezione che può essere nascosta. Se impostato su:

  • È vero, 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, nel FieldElementControl non esiste una scheda, bensì una sezione che può essere nascosta. Se impostato su:

  • È vero, la sezione non è visibile

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

SetterControl

Usare 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 da un file con estensione xaml illustra l'utilizzo di SetterControl per modificare un elemento Setter denominato KeyLocationSetter utilizzando 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 associarlo a una proprietà della vista o del modello di visualizzazione che si connette al setter. Questa operazione è simile alla procedura per l'associazione a un campo, come descritto per FieldElementControl.

HeaderText

Questa proprietà consente di impostare il testo da visualizzare nell'intestazione del controllo. Pensa a questa proprietà come a un titolo per il controllo; Per impostazione predefinita, viene visualizzato come testo in grassetto arancione.

Testo delle istruzioni

Impostare questa proprietà sul testo da visualizzare sotto l'intestazione, in genere testo di istruzione che indica all'utente dell'editor personalizzato quando e perché desidera modificare il comportamento del campo.

Interfacce

Nella tabella 70 sono elencate le interfacce che è possibile utilizzare per creare editor di pagine di procedure guidate personalizzate.

Tabella 70. Interfacce che possono essere usate per creare editor di pagine personalizzate della procedura guidata

Interfaccia Descrizione
IDataService Usare questa interfaccia per connettere i campi agli elementi Data nel file di configurazione della procedura guidata UDI.
IMessageBoxService Questa interfaccia fornisce l'accesso ai metodi che è possibile utilizzare per visualizzare le finestre di messaggio.

IDataService

Questa interfaccia contiene diverse proprietà e metodi, ma c'è solo una proprietà di cui hai bisogno. Questa proprietà è l'unica documentata qui.

Puoi usare l'inserimento delle dipendenze per ottenere un puntatore a questa interfaccia utilizzando codice come questo nella tua 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
Pagina corrente Questa proprietà consente di accedere agli elementi, agli attributi e ai valori XML nel contesto della pagina corrente in fase di modifica nel file di configurazione della procedura guidata UDI
Pagina corrente
XElement CurrentPage { get; set; }

Questa proprietà consente l'accesso al codice XML per la pagina corrente. Non impostare mai questa proprietà, ma si è liberi di 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 gestiscono tutti i dettagli.

IMessageBoxService

Questa interfaccia fornisce l'accesso ai metodi che è possibile utilizzare per visualizzare le finestre di messaggio. Forse ti starai chiedendo perché hai bisogno di un'interfaccia per visualizzare una finestra di messaggio. La realtà è che non è necessario: Microsoft usa questa interfaccia nel codice perché consente di scrivere test automatizzati per le pagine di progettazione.

Tuttavia, l'uso di questi metodi offre un vantaggio utile: le finestre di dialogo hanno sempre il "proprietario" impostato sulla procedura guidata UDI, che garantisce che la finestra di dialogo sia raggruppata correttamente con la finestra principale.

Puoi usare l'inserimento delle dipendenze per ottenere un puntatore a questa interfaccia utilizzando codice come questo nella tua classe:

[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Metodi

La tabella 72 elenca 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(messaggio stringa, didascalia stringa, icona MessageBoxImage)
- ShowMessageBox(messaggio stringa, didascalia stringa, pulsante MessageBoxButton, icona MessageBoxImage)
- ShowMessageBox(eccezione eccezione)
ShowDialogWindow Usare questo metodo per creare una nuova finestra di dialogo.
ShowWizardWindow Usare questo metodo per visualizzare un editor personalizzato all'interno di una finestra di dialogo che include i pulsanti Avanti e Indietro per lo spostamento.
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 ciascuno. Per informazioni complete su ogni membro (inclusa la sintassi, l'utilizzo ed esempi), vedere la sezione che corrisponde a ogni membro.

Tabella 73. Membri di overload per il metodo ShowMessagBox

Membro Descrizione
ShowMessageBox(messaggio stringa, didascalia stringa, icona MessageBoxImage) Visualizza una finestra di messaggio con un'icona e un pulsante OK
ShowMessageBox(messaggio stringa, didascalia stringa, pulsante MessageBoxButton, icona MessageBoxImage) Visualizza una finestra di messaggio con un'icona e diverse combinazioni di pulsanti possibili
ShowMessageBox(eccezione eccezione) Visualizza una finestra di messaggio che fornisce informazioni su un'eccezione e contiene un pulsante OK
ShowMessageBox(messaggio stringa, didascalia stringa, icona MessageBoxImage)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);

Questo metodo visualizza una finestra di messaggio con un pulsante OK . Vedi tabella 74.

Tabella 74. Parametri per il metodo ShowMessageBox(messaggio stringa, didascalia stringa, icona MessageBoxImage)

Parametro Descrizione
messaggio Messaggio da visualizzare nell'area 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(messaggio stringa, didascalia stringa, pulsante MessageBoxButton, icona MessageBoxImage)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);

Questo metodo visualizza una finestra di messaggio con il set di pulsanti che desideri mostrare e segnala quale pulsante hai selezionato. Vedi tabella 75.

Tabella 75. Parametri per il metodo ShowMessageBox(messaggio stringa, didascalia stringa, pulsante MessageBoxButton, icona MessageBoxImage)

Parametro Descrizione
messaggio Messaggio da visualizzare nell'area 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 contiene un solo pulsante OK . Vedi tabella 76.

Tabella 76. Parametri per il metodo ShowMessageBox(eccezione eccezione)

Parametro Descrizione
eccezione L'eccezione che si desidera 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 fornito nel parametro viewType . UDI Designer crea una nuova istanza di questo tipo e la inserisce in una finestra di dialogo con i pulsanti OK e Annulla.

I dati vengono passati al controllo utilizzando il parametro dialogPayload. La soluzione SampleEditor nella directory SDK contiene un esempio di utilizzo di 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 i pulsanti Avanti e Indietro per lo spostamento. Microsoft non ha fornito un esempio di utilizzo 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 utilizzato per configurare:

  • Pagine della procedura guidata visualizzate nella procedura guidata UDI

  • La sequenza delle pagine della procedura guidata nella procedura guidata UDI

  • Impostazioni per i campi in ogni pagina della procedura guidata

  • StageGroup disponibili in UDI Wizard Designer

  • Fasi disponibili all'interno di ogni distribuzione guidata in UDI Wizard 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 e gli viene assegnato l'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 elemento 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 Field o RadioGroup padre. Il valore predefinito è impostato sul valore racchiuso tra parentesi quadre per questo elemento.
DLL Specifica una DLL che deve essere caricata e a cui devono fare riferimento la procedura guidata UDI e la 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 intercettato da questo elemento per fornire informazioni più specifiche sull'errore.
Codice di uscita Specifica un possibile codice di uscita per un'attività. I codici di uscita sono codici restituiti previsti dall'attività. Create un elemento ExitCode per ogni possibile codice di uscita. In caso contrario, è possibile specificare un asterisco (*) nell'attributo Value per gestire codici restituiti non elencati in altri elementi ExitCode .
Codici di uscita 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 utilizzata per fornire personalizzazioni 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 usando 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.
riferimento pagina Specifica un riferimento a un'istanza di una pagina all'interno di uno Stage all'interno di un StageGroup.
Pagine Raggruppa i singoli elementi Page .
Gruppo radio Specifica un gruppo di pulsanti di opzione all'interno di un elemento Field .
Gruppo di scena Specifica un gruppo di una o più fasi.
Gruppi di scena 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 StageGroup e contiene uno o più elementi PageRef .
Stile Raggruppa i singoli elementi setter che configurano l'aspetto della procedura guidata UDI, inclusi 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 .
Validatore Specifica un validator per il controllo campo specificato nell'elemento Field padre.
procedura guidata 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 sull'elemento 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 fornisce una descrizione di ciascuno.

Tabella 79. Attributi e valori corrispondenti per l'elemento dati

Attributo Descrizione
Nome Specifica il nome dell'elemento dati
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 elemento 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 Dati, 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 predefinite sull'elemento

Attributo Valore
Numero di occorrenze Zero o più all'interno di un campo o di un elemento RadioGroup (questo elemento è facoltativo).
Elementi padre Campo, Gruppo radio
Sommario Può essere qualsiasi contenuto XML in formato corretto, 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 Fuso orario è impostato su "Ora solare standard Pacifico":

<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
  <Default>Pacific Standard Time</Default>

DLL

Questo elemento specifica una DLL da caricare e come riferimento per UDI Wizard e UDI Wizard Designer.

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ù 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 fornisce una descrizione di ciascuno.

Tabella 83. Attributi e valori corrispondenti per l'elemento DLL

Attributo Descrizione
Nome Specifica il nome della DLL a cui fare riferimento per la Creazione guidata UDI e UDI Wizard Designer
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 DLL

Attributo Valore
Numero di occorrenze Uno
Elementi padre procedura guidata
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 intercettato dall'HRESULT dell'attività per fornire informazioni più specifiche sull'errore.

Informazioni sull'elemento

La tabella 85 fornisce informazioni sull'elemento Error .

Tabella 85. Informazioni sull'elemento di errore

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento ExitCode (Questo elemento è facoltativo).
Elementi padre Codici di uscita
Sommario Qualsiasi contenuto XML ben formattato
Attributi dell'elemento

La tabella 86 elenca gli attributi dell'elemento Error e fornisce una descrizione di ciascuno.

Tabella 86. Informazioni sull'elemento di errore

Attributo Descrizione
Stato Specifica lo stato restituito di un'attività in cui si è verificato un errore. In genere, il valore per questo attributo è impostato su Error. Questo valore viene visualizzato nella colonna Stato nella pagina della procedura guidata nella procedura guidata UDI.
Testo Specifica il testo descrittivo della 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 . I seguenti sono valori validi per questo elemento:

- **0.**L'elemento rappresenta un successo.
- 1. L'elemento rappresenta un avvertimento.
- -1. L'elemento rappresenta un errore.
Valore Specifica il valore numerico del codice restituito dall'attività. Se si specifica il valore di un asterisco (*), si indica l'elemento predefinito per i codici restituiti non elencati in altri elementi Error .
Osservazioni

Nessuna.

Esempio

Nessuna.

Codice di uscita

Questo elemento specifica un possibile codice di uscita per un'attività. I codici di uscita sono codici restituiti previsti dall'attività. Create un elemento ExitCode per ogni possibile codice di uscita. In caso contrario, è possibile specificare un asterisco (*) nell'attributo Value per gestire 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 Codici di uscita
Sommario Almeno un elemento ExitCode e zero o più elementi Error
Attributi dell'elemento

La tabella 88 elenca gli attributi dell'elemento ExitCode e fornisce una descrizione di ciascuno.

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 nella pagina della procedura guidata corrispondente nella procedura guidata UDI. Per questo attributo è possibile usare qualsiasi valore significativo per l'attività. Di seguito sono riportati i valori tipici utilizzati per questo attributo:

- Operazione riuscita
- Attenzione
- 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 in type deve essere univoco all'interno di un elemento ExitCodes . I seguenti sono valori validi per questo elemento:

- 0. L'elemento rappresenta un successo.
- 1. L'elemento rappresenta un avvertimento.
- -1. L'elemento rappresenta un errore.
Valore Specifica il valore numerico del codice restituito dall'attività. Se si specifica il valore di un asterisco (*), indica l'elemento predefinito per i codici restituiti non elencati in altri elementi ExitCode .
Osservazioni

Nessuna.

Esempio

Nessuna.

Codici di uscita

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 Errore, 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 utilizzato 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 elemento campo

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Field (Questo elemento è facoltativo).
Elementi padre Campi
Sommario Impostazione predefinita, Validator
Attributi dell'elemento

La tabella 91 elenca gli attributi dell'elemento Field e fornisce una descrizione di ciascuno.

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 Creazione 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. Campi Informazioni elemento

Attributo Valore
Numero di occorrenze Zero o più all'interno di ogni elemento Page (questo elemento è facoltativo).
Elementi padre Pagina
Sommario Campo, Gruppo radio
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

File

Questo elemento specifica l'origine e la destinazione di un'operazione di copia file usando 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 del 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 fornisce una descrizione di ciascuno.

Tabella 94. Attributi e valori corrispondenti per l'elemento file

Attributo Descrizione
Dest Specifica il percorso completo o relativo alla cartella di destinazione per il file specificato nell'attributo Origine . Le variabili di ambiente sono consentite come parte del percorso.
Source Specifica il percorso completo o relativo al file di origine copiato dal tipo di attività Microsoft.Wizard.CopyFilesTask . Questo attributo supporta i 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 sugli elementi di pagina

Attributo Valore
Numero di occorrenze Uno o più all'interno di ogni elemento Pages
Elementi padre Pagine
Sommario Dati, Campi, Setter, Attività
Attributi dell'elemento

La tabella 96 elenca gli attributi dell'elemento Page e fornisce una descrizione di ciascuno.

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

Attributo Descrizione
DisplayName Specifica il nome descrittivo della pagina della procedura guidata visualizzata in UDI Wizard Designer. Questo nome è in genere più descrittivo dell'attributo Name .
Nome Specifica il nome della pagina della procedura guidata visualizzata in UDI Wizard Designer.
Tipo Specifica il tipo di pagina della procedura guidata direttamente correlato a una specifica pagina della procedura guidata all'interno di una DLL.
Osservazioni

Nessuna.

Esempio

Nessuna.

riferimento pagina

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ù 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 uno Stage 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 sull'elemento Pages

Attributo Valore
Numero di occorrenze Uno
Elementi padre procedura guidata
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 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 fornisce una descrizione di ciascuno.

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:

- Vero. 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 radio.
Osservazioni

Nessuna.

Esempio

Nessuna.

Gruppo di scena

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 all'interno di un elemento StageGroups
Elementi padre Gruppi di scena
Sommario Fase
Attributi dell'elemento

La tabella 103 elenca 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.

Gruppi di scena

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 della procedura guidata
Elementi padre procedura guidata
Sommario Gruppo di scena
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio

Nessuna.

Setter

Questo elemento specifica un'impostazione di 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 Dati, elemento dati, pagina, stile, attività, convalida
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à viene impostato sul valore racchiuso tra parentesi quadre di questo attributo.
Osservazioni

Nessuna.

Esempio

Nessuna.

Fase

Questo elemento specifica una fase all'interno di un oggetto StageGroup e contiene uno o più elementi PageRef .

Informazioni sull'elemento

La tabella 107 fornisce informazioni sull'elemento Stage .

Tabella 107. Informazioni sugli elementi dello stage

Attributo Valore
Numero di occorrenze Uno o più elementi all'interno di un elemento StageGroup
Elementi padre Gruppo di scena
Sommario riferimento pagina
Attributi dell'elemento

La tabella 108 elenca gli attributi dell'elemento Stage e fornisce una descrizione di ciascuno.

Tabella 108. Attributi e valori corrispondenti per l'elemento stage

Attributo Descrizione
DisplayName Specifica il nome descrittivo della pagina della procedura guidata visualizzata in UDI Wizard Designer. 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, inclusi 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 sugli elementi di stile

Attributo Valore
Numero di occorrenze Uno
Elementi padre procedura guidata
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 attività

Attributo Valore
Numero di occorrenze Uno o più 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 fornisce una descrizione di ciascuno.

Tabella 111. Attributi e valori corrispondenti per l'elemento task

Attributo Descrizione
Dipende da Specifica se l'attività dipende da un'altra attività. Il valore di questo attributo è impostato sull'attributo Name di un altro elemento Task . Nota: Questo attributo non può essere configurato con UDI Wizard 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à. Il nome deve essere univoco.
Tipo Specifica il tipo di attività da eseguire, che è definito nella DLL che contiene l'attività.
Osservazioni

Nessuna.

Esempio

Nessuna.

Attività

Questo elemento raggruppa un insieme di attività per un elemento Page .

Informazioni sull'elemento

La tabella 112 fornisce informazioni sull'elemento Tasks .

Tabella 112. Informazioni sull'elemento Attività

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 fornisce una descrizione di ciascuno.

Tabella 113. Attributi e valori corrispondenti per l'elemento Tasks

Attributo Descrizione
NameTitle Specifica la didascalia che compare nella parte superiore della colonna che contiene il nome delle attività nella pagina della procedura guidata appropriata.
StatusTitle Specifica la didascalia che compare nella parte superiore della colonna che contiene lo stato delle attività nella pagina della procedura guidata appropriata.
Osservazioni

Nessuna.

Esempio

Nessuna.

Validatore

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 validatore

Attributo Valore
Numero di occorrenze Zero o uno all'interno di un elemento Campo
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 validatore

Attributo Descrizione
Tipo Specifica il tipo per la convalida, che è definito nella DLL che contiene il validatore
Osservazioni

Nessuna.

Esempio

Nessuna.

procedura guidata

Questo elemento specifica la radice per tutti gli altri elementi.

Informazioni sull'elemento

La tabella 116 fornisce informazioni sull'elemento Wizard .

Tabella 116. Informazioni elemento della procedura guidata

Attributo Valore
Numero di occorrenze Uno
Elementi padre Nessuno
Sommario DLL, pagine, gruppi di scena, stile
Attributi dell'elemento

Questo elemento non ha attributi.

Osservazioni

Nessuna.

Esempio
<Wizard>
   + <DLLs>
   + <Style>
   + <Pages>
   + <StageGroups>
</Wizard>