Gebruikersgestuurde installatie - Handleiding voor ontwikkelaars

UDI (User Driven Installation) helpt de implementatie van Windows-clientbesturingssystemen®, zoals Windows 8.1, op computers te vereenvoudigen met behulp van de functie voor besturingssysteemimplementatie in Microsoft® System Center 2012 R2 Configuration Manager. UDI maakt deel uit van de Microsoft Deployment Toolkit (MDT).

Inleiding

Normaal gesproken moet u bij het implementeren van besturingssystemen met behulp van de OSD-functie alle benodigde informatie opgeven voor het implementeren van het besturingssysteem. De informatie wordt geconfigureerd in configuratiebestanden of in databases (zoals het CustomSettings.ini bestand of de MDT-database [MDT DB]). U moet alle configuratie-instellingen opgeven voordat u de implementatie kunt starten.

UDI biedt een wizard-gestuurde interface waarmee u configuratiegegevens direct voorafgaand aan het uitvoeren van de implementatie kunt opgeven. Dit gedrag stelt u in staat algemene OSD-takenreeksen te maken en vervolgens computerspecifieke informatie op te geven tijdens de implementatie, waardoor het implementatieproces flexibeler wordt.

Doelgroep

Deze handleiding is geschreven voor de ontwikkelaars die aangepaste tovenaarpagina's maken voor de UDI-wizard en aangepaste tovenaarspagina-editors voor de UDI Wizard Designer. In deze handleiding wordt ervan uitgegaan dat u bekend bent met het ontwikkelen van Windows-toepassingen met behulp van:

  • C++, dat wordt gebruikt om aangepaste wizardpagina's te maken

  • Microsoft .NET Framework, dat wordt gebruikt om aangepaste editors voor wizardpagina's te maken

  • Windows Presentation Foundation (WPF), waarmee aangepaste editors voor wizardpagina's kunnen worden gemaakt

  • Talen die door WPF worden ondersteund, zoals C#, C++ of Microsoft Visual Basic® .NET, die worden gebruikt om aangepaste editors voor wizardpagina's te maken

Over deze handleiding

Deze handleiding bevat de benodigde referentie-informatie om u te helpen bij het aanpassen van UTI voor uw organisatie. In deze handleiding wordt geen aandacht besteed aan administratieve of operationele onderwerpen, zoals het installeren van MDT (inclusief UDI), het configureren van UDI voor het implementeren van besturingssystemen en toepassingen of het uitvoeren van implementaties met behulp van de UDI-wizard. Zie de UDI-onderwerpen in De Microsoft Deployment Toolkit gebruiken, die deel uitmaakt van MDT voor meer informatie over deze onderwerpen.

Overzicht UDI-ontwikkeling

Met UDI-ontwikkeling kunt u de functies die UDI biedt, uitbreiden. UDI-ontwikkeling is meestal vereist wanneer u aanvullende informatie wilt verzamelen die tijdens het UDI-implementatieproces wordt gebruikt. Deze aanvullende informatie wordt meestal opgeslagen als taakreeksvariabelen die door taakreeksstappen in een UDI-takenreeks in Configuration Manager worden gelezen.

UDI-architectuur

Het algemene doel van UDI-ontwikkeling is het maken van aangepaste wizardpagina's die in de UDI-wizard kunnen worden weergegeven. Door aangepaste wizardpagina's te maken, kunt u de bestaande functies van UDI uitbreiden om te voldoen aan de zakelijke en technische vereisten van uw organisatie. Een aangepaste wizardpagina verzamelt informatie als aanvulling op of in plaats van de wizardpagina's die UDI biedt.

Afbeelding 1 illustreert de relatie tussen de UDI Wizard Designer en de UDI Wizard.

Figuur 1. Relatie tussen de UDI-wizard en UDI Wizard Designer Afbeelding 1. Relatie tussen de UDI-wizard en UDI Wizard Designer

Figuur 1. Relatie tussen de UDI-wizard en UDI Wizard Designer

Op conceptueel niveau omvat UDI-ontwikkeling het creëren van:

  • Aangepaste wizardpagina's. Er worden wizardpagina's weergegeven in de UDI-wizard waarop de informatie wordt verzameld die nodig is om het implementatieproces te voltooien. U maakt wizardpagina's met C++ in Microsoft Visual Studio®. De aangepaste wizardpagina's worden geïmplementeerd als DLL's die door de UDI-wizard worden gelezen. De UDI Software Development Kit (SDK) bevat een voorbeeld van het maken van aangepaste wizardpagina's.

  • Editors van aangepaste wizardpagina's. U gebruikt editors voor wizardpagina's om het gedrag van de aangepaste wizardpagina te configureren. De aangepaste editors voor tovenaarspagina's worden geïmplementeerd als DLL's die door UDI Wizard Designer worden gelezen. U maakt editors voor wizardpagina's met:

    • WPF versie 4.0

    • Microsoft Prism versie 4.0

    • Microsoft Unity-toepassingsblok (Unity) versie 2.1

      MDT bevat alle assembly's die nodig zijn om een aangepaste editor voor de wizardpagina te maken voor gebruik in de UDI Wizard Designer. De UDI SDK bevat een voorbeeld van hoe u aangepaste editors voor tovenaarspagina's kunt maken.

    Bovendien gebruikt de UDI Wizard Designer ondersteunende configuratiebestanden van wizardpagina-editors. U maakt de configuratiebestanden voor de editor voor wizardpagina's als onderdeel van het proces voor het maken van uw aangepaste wizardpagina's en aangepaste editors voor wizardpagina's. De UDI-wizard maakt Designer de benodigde XML-gegevens in het configuratiebestand van de UDI-wizard en het bijbehorende .app bestand.

De UDI-ontwikkelomgeving voorbereiden

Voordat u uw eigen aangepaste wizardpagina's en editors voor wizardpagina's gaat maken, voert u de volgende stappen uit om de UDI-ontwikkelomgeving voor te bereiden:

  1. Bereid de UDI-ontwikkelingsomgevingsvereisten voor zoals beschreven in Prepare the UDI Development Environment Prerequisites.

  2. Configureer de UDI-ontwikkelomgeving zoals beschreven in De UDI-ontwikkelomgeving configureren.

  3. Controleer of de UDI-ontwikkelomgeving correct is geconfigureerd, zoals is beschreven in De UDI-ontwikkelomgeving controleren.

Bereid de UDI-ontwikkelingsomgeving voor Vereisten voor

Voer de volgende stappen uit om de vereisten voor de UDI-ontwikkelomgeving voor te bereiden:

  1. Bereid de hardwarevereisten voor de UDI-ontwikkelomgeving voor zoals beschreven in Bereid de hardwarevereisten voor de UDI-ontwikkelomgeving voor.

  2. Bereid de softwarevereisten voor de UDI-ontwikkelomgeving voor zoals beschreven in De softwarevereisten voor de UDI-ontwikkelomgeving voorbereiden.

Bereid de hardwarevereisten voor de UDI-ontwikkelomgeving voor

De hardwarevereisten voor de UDI-ontwikkelomgeving zijn dezelfde hardwarevereisten als voor de editie van Microsoft Visual Studio die u gebruikt. Zie de systeemvereisten voor elke editie in de Visual Studio-documentatie voor meer informatie over deze vereisten.

Bereid de UDI-ontwikkelingsomgeving voor op softwarevereisten

De UDI-ontwikkelomgeving heeft de volgende softwarevereisten:

  • Elk Windows-besturingssysteem dat Visual Studio 2010 ondersteunt (Windows 7 of Windows Server ® 2008 R2 wordt aanbevolen.)

    U hebt een Windows-besturingssysteem nodig dat de processorarchitectuur ondersteunt die u wilt ontwikkelen. U kunt 32-bits en 64-bits UDI-ontwikkeling uitvoeren met behulp van een 64-bits besturingssysteem. U doet alleen 32-bits UDI-ontwikkeling op 32-bits besturingssystemen. Gebruik daarom een 64-bits besturingssysteem.

    Opmerking

    IntelItanium-versies (IA-64) van het Windows-besturingssysteem worden niet ondersteund voor UDI-ontwikkelomgevingen.

    Zie de systeemvereisten voor elke editie in de Visual Studio-documentatie voor meer informatie over de besturingssystemen die Visual Studio 2010 ondersteunt.

  • Microsoft .NET Framework versie 4.0 (vereist voor Visual Studio 2010)

  • C++-taal (de taal die wordt gebruikt bij het uitbreiden van UDI-wizardpagina's)

  • Andere talen die WPF ondersteunt, zoals C#, Visual Basic .NET of C++/Common Language Infrastructure, die worden gebruikt om UDI Wizard uit te breiden Designer wizardpagina-editors

    Opmerking

    De voorbeeldbroncode voor de pagina-editors van de wizard UDI Wizard Designer is geschreven in C#. Installeer de C#-taal als u de voorbeeldbroncode wilt gebruiken.

De UDI-ontwikkelomgeving configureren

Wanneer vervolgens aan de UDI-ontwikkelingsomgevingsvereisten is voldaan, voert u de volgende stappen uit om de UDI-ontwikkelomgeving te configureren:

  1. Installeer Visual Studio 2010.

    Zorg ervoor dat je de C++-taal installeert en elke andere taal die WPF ondersteunt.

    Opmerking

    De voorbeeldbroncode voor de editorpagina's van de UDI-wizard Designer is geschreven in C#. Installeer de C#-taal als u de voorbeeldbroncode wilt gebruiken.

    Zie Visual Studio installeren voor meer informatie over het installeren van Visual Studio 2010.

  2. Installeer MDT.

    Zie voor meer informatie over het installeren van MDT de sectie 'MDT installeren of upgraden' in het MDT-document De Microsoft Deployment Toolkit gebruiken.

  3. Maak local_folder in Windows Verkenner (waarbij local_folder een map is die zich op een lokaal station van de ontwikkelcomputer bevindt).

  4. Kopieer de map installation_folder\SDK naar local_folder (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en local_folder elke map is die zich op een lokaal station op de ontwikkelcomputer bevindt).

    U kopieert de SDK-map naar een andere locatie omdat MDT is geïnstalleerd in de map Program Files, waarnaar niet kan worden geschreven zonder verhoogde machtigingen. Als u de SDK-map naar een andere locatie kopieert, kunt u de bestanden in de SDK-map wijzigen zonder verhoogde machtigingen.

  5. Kopieer de map installation_folder\Templates\Distribution\Tools naar local_folder (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en local_folder de map is die u eerder in het proces hebt gemaakt).

  6. Wijzig de naam van de map local_folder\Tools in local_folder\OSDSetupWizard(waarbij local_folder de map is die u eerder in het proces hebt gemaakt).

    Wanneer u klaar bent, moet de mapstructuur onder local_folder eruitzien als de mappenstructuur in afbeelding 2 (waarbij local_folder de map is die u eerder in het proces hebt gemaakt en die in de afbeelding wordt weergegeven als UDIDevelopment ).

    Figuur 2. Mappenstructuur voor UDI-ontwikkeling Figuur 2. Mapstructuur voor UDI-ontwikkeling

    Figuur 2. Mapstructuur voor UDI-ontwikkeling

De UDI-ontwikkelomgeving controleren

Wanneer de UDI-ontwikkelomgeving is geconfigureerd, controleert u of de UDI-ontwikkelomgeving correct is geconfigureerd door ervoor te zorgen dat de voorbeeldprojecten correct worden opgebouwd in Visual Studio 2010.

Controleer of de UDI-ontwikkelomgeving juist is geconfigureerd door te bepalen of:

Controleren of het SamplePage-project op de juiste manier wordt opgebouwd

Het VoorbeeldPagina-project biedt een voorbeeld van hoe u een aangepaste wizardpagina voor de UDI-wizard kunt maken. Zie voor meer informatie over het SamplePage-project Review the SamplePage Visual Studio Solution (De oplossing VoorbeeldPage Visual Studio bekijken).

Controleren of het SamplePage-project op de juiste manier wordt opgebouwd

  1. Start Visual Studio 2010.

  2. Open het SamplePage-project.

    Het SamplePage-project bevindt zich in de map local_folder\SDK\UDI\SamplePage (waarbij local_folder de map is die u eerder in het proces hebt gemaakt).

  3. Klik in Visual Studio 2010 in Solution Explorer met de rechtermuisknop op het SamplePage-project en selecteer vervolgens Eigenschappen.

    Het dialoogvenster Eigenschappenpagina's van Voorbeeldpagina wordt weergegeven.

  4. Ga in het dialoogvenster Eigenschappen/foutopsporing van Voorbeeldpagina's naar Configuratieeigenschappen.

  5. Selecteer in de Eigenschappen voor foutopsporing, onder Configuratie, de optie Alle configuraties.

  6. Typ $(TargetDir)\OSDSetupWizard.exein de eigenschappen voor foutopsporing.

  7. Typ in de eigenschappen voor foutopsporing onder Werkmap$(TargetDir).

  8. Ga in het dialoogvenster Eigenschappenpagina's van Voorbeeldpagina naar Configuratie-eigenschappen/Buildgebeurtenissen/Post-buildgebeurtenis.

  9. Typ het volgende in de eigenschappen van de post-buildgebeurtenis onder Opdrachtregel:

    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. Selecteer OK in het dialoogvenster Eigenschappenpagina's van Voorbeeldpagina.

  11. Sla het project op.

  12. Selecteer in het menu Foutopsporingde optie Foutopsporing starten.

    Het dialoogvenster Microsoft Visual Studiowordt weergegeven om aan te geven dat de bron verouderd is en waarin u wordt gevraagd of u het project wilt maken.

  13. Selecteer Ja in het dialoogvenster Microsoft Visual Studio.

    Het dialoogvenster Geen informatie over foutopsporing wordt weergegeven met de mededeling dat er geen informatie over foutopsporing beschikbaar is voor OSDSetupWizard.exe.

  14. Selecteer Ja in het dialoogvenster Geen informatie over foutopsporing.

    De wizard UDI wordt geopend met de aangepaste wizardpagina.

  15. Controleer of u een waarde kunt selecteren in Kies uw locatie.

  16. Selecteer Annulerenin de wizard met voorbeeldpaginaformulier.

    Het dialoogvenster Wizard Annuleren wordt weergegeven.

  17. Selecteer Ja in het dialoogvenster Wizard annuleren.

  18. Sluit Visual Studio 2010.

Controleren of het SampleEditor-project op de juiste manier wordt opgebouwd

Het project SampleEditor biedt een voorbeeld van het maken van een aangepaste editor voor tovenaarspagina's voor de UDI Wizard Designer. Zie De SamplePage Visual Studio-oplossing bekijken voor meer informatie over het SampleEditor-project.

Controleren of het SampleEditor-project op de juiste manier wordt opgebouwd

  1. Start Visual Studio 2010.

  2. Open het SampleEditor-project.

    Het SampleEditor-project bevindt zich in de map local_folder\SDK\UDI\SampleEditor (waarin local_folder de map is die u eerder in het proces hebt gemaakt).

  3. Selecteer in Visual Studio 2010 in Solution Explorer het project SampleEditor.

  4. Selecteer verwijzing toevoegen in het menu Project.

    Het dialoogvenster Verwijzing toevoegen wordt geopend.

  5. Selecteer in het dialoogvenster Verwijzing toevoegen het tabblad Bladeren .

  6. Ga op het tabblad Bladeren naar installation_folder\Bin (waar installation_folder de map is waarin u MDT hebt geïnstalleerd). Selecteer de volgende bestanden en selecteer vervolgens 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

    Opmerking

    U kunt meerdere bestanden selecteren op het tabblad Bladeren door de CTRL-toets ingedrukt te houden terwijl u de bestanden selecteert.

  7. Ga in Solution Explorer naar SampleEditor/References.

  8. Controleer of er geen waarschuwingen of fouten staan in de referenties.

  9. Klik in Solution Explorer met de rechtermuisknop op het SampleEditor-project en selecteer vervolgens Eigenschappen.

    Het dialoogvenster Eigenschappenpagina's van Voorbeeldeditor wordt weergegeven.

  10. Selecteer in het dialoogvenster Eigenschappenpagina's van Voorbeeldeditor het tabblad Foutopsporing .

  11. Selecteer op het tabblad Foutopsporingde optie Extern programma starten.

  12. Typ installation_folder\Bin\UDIDesigner.exe (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd) in Extern programma starten) en selecteer vervolgens OK.

    Tip

    Selecteer de knop met het beletselteken (...) om naar de map te bladeren en selecteer UDIDesigner.exe.

  13. Selecteer in het menu Bestand de optie Alles opslaan.

  14. Kopieer het local_folder\SDK\SamplePage\SamplePage.dll.config bestand naar de map installation_folder\Bin\Config (waarbij local_folder de map is die u eerder in het configuratieproces op de ontwikkelcomputer hebt gemaakt eninstallation_folder de map is waarin u MDT hebt geïnstalleerd).

  15. Selecteer in Visual Studio 2010 in het menu Foutopsporingde optie Foutopsporing starten.

    De UDI Wizard Designer wordt gestart.

  16. Selecteer in UDI Wizard Designer op het lint de optie Openen.

    Het dialoogvenster Openen wordt weergegeven.

  17. Open in het dialoogvenster Openen het local_folder\SDK\SamplePage\SamplePage\Config.xml bestand (waarbij local_folder de map is die u eerder in het configuratieproces op de ontwikkelcomputer hebt gemaakt).

    Het Config.xml bestand wordt geopend en de aangepaste fasegroep wordt weergegeven in het detailvenster.

  18. Selecteer het tabblad Configureren in het detailvenster.

  19. Bekijk de configuratiegegevens voor het vak Locatie , met inbegrip van de volgende:

    • Ontgrendeld knop, waarmee u het locatievak in- of uitschakelt

    • Vak Standaardwaarde , waarin u een standaardwaarde invoert die in het vak Locatie moet worden weergegeven

    • Beschrijvende weergavenaam die zichtbaar is op de overzichtspagina, waarin u het onderschrift invoert voor de informatie die wordt weergegeven op de overzichtspagina

    • Keuzelijst met locaties , inclusief een lijst met mogelijke locaties

  20. Sluit de UDI Wizard Designer.

  21. Sluit Visual Studio 2010.

De voorbeelden van de UDI SDK bekijken

Bekijk de voorbeelden in de UDI SDK voordat u met de ontwikkeling begint. Gebruik de informatie in deze handleiding en de broncode in de voorbeelden om uw eigen aangepaste UDI-wizardpagina's en wizardpagina-editors te maken.

Bekijk de voorbeelden van de UDI SDK door het volgende te bekijken:

Controleer de inhoud van de SDK-map

Tijdens de configuratie van de UDI-ontwikkelomgeving hebt u de SDK-map gekopieerd van de map waarin u MDT hebt geïnstalleerd naar een andere map die u hebt gemaakt. Tabel 1 bevat de mappen direct onder de SDK-map en een korte beschrijving van elke map.

Tabel 1. Mappen in de UDI SDK

Map Deze map bevat
Inbegrepen De C++-headerbestanden die nodig zijn voor het maken van aangepaste wizardpagina's voor de UDI-wizard
Libs De C++-bibliotheekbestanden die worden gekoppeld aan uw aangepaste pagina; Er zijn 32-bits en 64-bits versies van de Static Link Libraries. Opmerking: Itanium-versies van de bibliotheken (IA-64) zijn niet beschikbaar.
Voorbeeldeditor Een Visual Studio-project voor het maken van een aangepaste editor voor het bewerken van de pagina Voorbeeldpagina in UDI Wizard Designer, die is geschreven in C#
Voorbeeldpagina Een Visual Studio-project voor het bouwen van een aangepaste UDI-wizardpagina, die is geschreven in Visual C++

Bekijk de SamplePage Visual Studio-oplossing

Voordat u begint met het maken van uw aangepaste wizardpagina's en editors voor wizardpagina's, voert u de volgende taken uit om de UDI-ontwikkelomgeving voor te bereiden:

De levenscyclus van de wizardpagina controleren

Een pagina van een UDI-wizard bevat methoden die overeenkomen met elke fase (of fase) van de levenscyclus van de pagina. Als onderdeel van het maken van uw aangepaste wizardpagina moet u deze methoden vervangen met uw code. Tabel 2 bevat de methoden die u moet overschrijven en een korte beschrijving van elke methode, inclusief wanneer u de methode moet gebruiken in de levenscyclus van de wizardpagina.

Tabel 2. Methoden in de levenscyclus van een wizardpagina

Methode Beschrijving
OnWindowCreated Deze methode wordt eenmaal aangeroepen, nadat het paginavenster is gemaakt.

Schrijf voor deze methode code waarmee de pagina voor de eerste keer wordt geïnitialiseerd. Deze code hoeft slechts één keer te worden uitgevoerd. Gebruik deze methode bijvoorbeeld om velden te initialiseren of om configuratiegegevens te lezen van de Setter-elementen in het configuratiebestand van de UDI-wizard.
OnWindowShown Deze methode wordt elke keer aangeroepen wanneer de pagina wordt weergegeven (weergegeven) in de UDI-wizard. Dit wordt aangeroepen wanneer de pagina de eerste keer wordt weergegeven en elke keer dat u naar de pagina navigeert door Volgende of Terug te selecteren in de wizard.

Schrijf voor deze methode code waarmee de pagina wordt voorbereid om te worden weergegeven, bijvoorbeeld het lezen van geheugenvariabelen, taakreeksvariabelen of omgevingsvariabelen, en vervolgens werkt u de pagina bij op basis van wijzigingen in deze variabelen.
OnCommonControlEvent Deze methode kan telkens worden aangeroepen wanneer de wizardpagina wordt weergegeven en een WM_NOTIFY bericht van een kind ontvangt (meestal algemene besturingselementen).

Schrijf voor deze methode code waarmee WM_NOTIFY worden verwerkt op basis van het meldingsbericht. Het kan bijvoorbeeld zijn dat u wilt reageren op gebeurtenissen van een gemeenschappelijk besturingselement, zoals reageren op selecties of dubbelklikken op gebeurtenissen voor een TreeView-besturingselement .
OnUnhandledEvent Deze methode wordt elke keer aangeroepen als er een bericht over een onverwerkt venster voor de wizardpagina verschijnt. Deze methode biedt de mogelijkheid om deze anders onverwerkte vensterberichten te onderscheppen en te verwerken.

Schrijf voor deze methode code die de vensterberichten verwerkt die relevant zijn voor uw wizardpagina. Meestal hoeft u deze methode niet te overschrijven.
OnNextSelected Deze methode wordt aangeroepen wanneer u Volgende selecteert in de wizard.

Schrijf voor deze methode code die eventuele benodigde acties uitvoert voordat u naar de volgende wizardpagina gaat, bijvoorbeeld het uitvoeren van validatie die lang kan duren. Als de validatie mislukt, kunt u de volgende aanvraag annuleren en een bericht weergeven.
OnWindowHidden Deze methode wordt aangeroepen telkens wanneer de pagina wordt verborgen wanneer de vorige of volgende wizardpagina wordt weergegeven.

Schrijf voor deze methode code die acties uitvoert voordat de pagina wordt verborgen voordat een andere pagina wordt weergegeven. Meestal hoeft u deze methode niet te overschrijven.

Bekijk het voorbeeld van Voorbeeldpagina

Bekijk het voorbeeld van SamplePage aan de hand van de volgende lijst, die de reeks gebeurtenissen weergeeft tijdens de levenscyclus van de wizardpagina in het VoorbeeldPagina-voorbeeld:

  1. De UDI-wizard leest OSDSetupWizard.exe de configuratiegegevens uit het configuratiebestand van de UDI-wizard in het voorbeeld (het Config.xml-bestand), zoals beschreven in Stap 1: De UDI-wizard (OSDSetupWizard.exe) leest het Config.xml bestand.

  2. De UDI-wizard laadt de DLL's die nodig zijn voor elke wizardpagina die wordt vermeld in het configuratiebestand van de UDI-wizard, zoals beschreven in Stap 2: De UDI-wizard laadt het DLL-bestand voor de aangepaste wizardpagina.

  3. De UDI-wizard geeft de aangepaste wizardpagina weer en zorgt voor de gewenste interactie met de besturingselementen, zoals beschreven in Stap 3: De UDI-wizard geeft de aangepaste wizardpagina weer.

  4. Wanneer de gegevens zijn verzameld door de aangepaste wizard, voert u de nodige taken uit voordat u Volgende selecteert om door te gaan naar de volgende wizard, zoals beschreven in stap 4: De knop Volgende is geselecteerd op de pagina van de aangepaste wizard.

Stap 1: De UDI-wizard (OSDSetupWizard.exe) leest het Config.xml bestand

Wanneer de UDI-wizard (OSDSetupWizard.exe) wordt gestart, wordt standaard het configuratiebestand van de UDI-wizard gelezen. Dit is het UDIWizard_Config.xml-bestand (het primaire configuratiebestand voor de UDI-wizard).

Opmerking

In het voorbeeld wordt het Config.xml-bestand als configuratiebestand gebruikt. In MDT is het standaardconfiguratiebestand het UDIWizard_Config.xml bestand, dat zich bevindt in de map Scripts in het pakket MDT Files voor configuratie.

U kunt het standaardconfiguratiebestand van de UDI-wizard overschrijven door de stap van de UDI-wizard-taakvolgorde te wijzigen in de parameter /definition . Zie 'Het configuratiebestand negeren dat door de UDI-wizard wordt gebruikt' voor meer informatie over het vervangen van het standaardconfiguratiebestand dat door de UDI-wizard wordt gebruikt.

De elementen op het hoogste niveau in het bestand Config.xml zijn de

  • DLL-element

  • Stijlelement

  • Pagina-element

  • StageGroups-element

    Voor meer informatie over het schema van het configuratiebestand van de UDI-wizard en elk van deze elementen, zie UDI Wizard Configuration File Schema Reference.

    De UDI-wizard scant het DLL-element op zoek naar de .dll bestanden die moeten worden geladen. In het voorbeeld worden twee .dll bestanden weergegeven: SamplePage.dll en SharedPages.dll. Deze .dll bestanden moeten zich in dezelfde map bevinden als OSDSetupWizard.exe: de map Extra\platform (waarbij platform x86 is voor de 32-bits versie of x64 voor de 64-bits versie).

    De wizard UDI scant het element Pagina's op zoek naar de pagina's die zijn gedefinieerd. In het voorbeeld zijn twee pagina's gedefinieerd: Custom en SummaryPage. Het typekenmerk van het element Pagina wordt gedefinieerd in het bestand PageClassIDs.h en definieert op unieke wijze het type aangepaste pagina.

    In het voorbeeld is het gedefinieerde type Microsoft.SamplePage.LocationPage. Vervang voor uw aangepaste pagina het volgende om mogelijke conflicten met andere pagina's die u in de toekomst maakt, te voorkomen:

  • De naam van uw organisatie in de plaats van Microsoft.

  • Uw projectnaam in de plaats van Voorbeeldpagina.

  • De naam van de aangepaste wizardpagina in plaats van LocationPage.

Stap 2: De wizard UDI laadt het DLL voor de aangepaste wizardpagina

Wanneer de UDI-wizard uw DLL laadt, wordt de functie RegisterFactories aangeroepen, die in uw .dll bestand moet worden geïmplementeerd. In het voorbeeld is deze functie geïmplementeerd in het bestand dllmain.ccp. Elke wizardpagina die u maakt, moet de functie RegisterFactories implementeren.

De functie RegisterFactories wordt gebruikt om de fabrieksklasse van uw wizardpagina te registreren bij het klassefabrieksregister voor de UDI-wizard. Klassenfabrieken zijn klassen die een exemplaar van een andere klasse kunnen creëren. De functie RegisterFactories maakt een nieuw exemplaar van een fabrieksklasse en geeft die klasse door aan het klasse fabrieksregister voor de UDI-wizard, die die fabrieksklasse beschikbaar maakt voor de wizard. De UDI-wizard zoekt naar een fabrieksklasse die is geregistreerd met een id die overeenkomt met het typekenmerk van het element Pagina voor de aangepaste wizardpagina.

In het voorbeeld is de id gedefinieerd als ID_Location in het bestand PageClassIds.h als Microsoft.SamplePage.LocationPage, wat overeenkomt met het kenmerk Type voor het element Page in het bestand Config.xml. ID_Location wordt doorgegeven als parameter in de functie RegisterFactories die is geïmplementeerd in het bestand dllmain.ccp.

U kunt een functie maken met behulp van de functiesjabloon Register_naam om het maken van een nieuw fabrieksexemplaar te vereenvoudigen en het zojuist gemaakte exemplaar te registreren. De naamwaarde die wordt opgegeven met behulp van de functiesjabloon Registreren, moet de iClassFactory-interface implementeren. De klasse ClassFactoryImpl verwerkt de meeste details voor het implementeren van een class factory.

U kunt de functie RegisterFactories ook gebruiken om taaktypen en validatortypen te registreren. Zie de volgende onderwerpen voor meer informatie:

Opmerking

Het voorbeeld bevat en registreert alleen die ene aangepaste wizardpagina. Het voorbeeld bevat geen aangepaste taken of validators en registreert dus geen aangepaste taken of validators.

Stap 3: De UDI-wizard geeft de aangepaste wizardpagina weer

De aangepaste wizardpagina in het voorbeeld is gedefinieerd in het LocationPage.cpp bestand. Wizardpagina's worden afgeleid van sjabloonklassen die veel van de functionaliteit van een pagina bieden. Alle pagina's van de wizard moeten zijn afgeleid van de sjabloonklasse WizardPageImpl, waarmee de interface IWizardPage wordt geïmplementeerd. Elke wizardpagina kan andere optionele sjabloonklassen en bijbehorende interfaces implementeren op basis van de behoeften van de pagina.

De sjabloonklasse WizardPageImpl heeft verschillende handige interfaces waarmee u aangepaste wizardpagina's kunt schrijven. Implementeer de sjabloonklasse WizardPageImpl als de basisklasse voor uw aangepaste wizardpagina.

Voor een lijst met de beschikbare:

  • Sjabloonklassen voor wizardpagina's, zie Helperklassen voor wizardpagina's

  • Interfaces voor de wizardpaginasjabloonklassen, zie Wizard Page Interfaces

    De aangepaste wizardpagina in het voorbeeld is afgeleid van de sjabloonklasse WizardPageImpl en implementeert de interface IWizardPage. Daarnaast wordt op de aangepaste wizardpagina de IFieldCallback-interface geïmplementeerd. Deze beide worden geïmplementeerd in het LocationPage.cpp bestand.

    De voorbeeld van een aangepaste wizardpagina overschrijft de volgende methoden:

  • OnWindowCreated. De methode OnWindowCreated op de pagina met de wizard Voorbeeld roept de volgende methoden aan:

    • AddField (Veld toevoegen). Met deze methode wordt het besturingselement IDC_COMBO_LOCATION vak in de IDD_LOCATION_PAGE resource gerelateerd aan het gegevenselementLocatie in het Config.xml bestand.

      Naast de AddField-methode kunt u de methoden AddRadioGroup en AddToGroup gebruiken ter ondersteuning van andere besturingselementen en gedragingen.

      Opmerking

      Zorg ervoor dat u de methode AddField, AddRadioGroup of AddToGroup aanroept voordat u de methode InitFields aanroept .

    • InitFields. Gebruik deze methode om de velden (besturingselementen) die u aan het formulier hebt toegevoegd, te initialiseren. De aanwijzer van de pagina is een parameter. In het voorbeeld wordt deze aanwijzer doorgegeven, die verwijst naar de huidige pagina.

      Opmerking

      Ter ondersteuning van het gebruik van deze aanwijzer moet u de IFieldCallback-interface implementeren naast de interfaces die de sjabloonklasse WizardPageImpl ondersteunt.

      De IFieldCallback-interface roept de methode SetFieldDefault aan, die wordt gebruikt om de standaardwaarden in te stellen voor andere besturingselementen dan tekstvak- en selectievakjes. In het voorbeeld wordt met de methode SetFieldDefault de initiële index van het besturingselement keuzelijst met invoervak ingesteld op basis van de standaardwaarde die is opgegeven in het element Default voor het element Veld in het Config.xml bestand.

      Met de methode OnWindowCreated wordt de formuliercontroller ingesteld met de IFormController-interface. Zie Het formulier instellen voor meer informatie over het instellen van de formuliercontroller.

  • InitLocations. Bij deze methode wordt de keuzelijst met invoervak gevuld met de lijst met locaties in het Config.xml bestand. Het element Data en de onderliggende DataItem-elementen van het Confg.xml bestand leveren de lijst met mogelijke waarden op.

  • OnNextSelected. Met deze methode worden de volgende taken uitgevoerd:

    • Updates van de TSLocation-taakreeksvariabele met de waarde die is geselecteerd in de keuzelijst met invoervak met behulp van de methode SaveFields

    • Hiermee voegt u informatie toe die wordt weergegeven op de pagina Overzicht met behulp van de methode SaveFields

Stap 4: De knop Volgende wordt geselecteerd op de pagina van de wizard Aangepast

Wanneer de gebruiker de velden op de aangepaste wizardpagina heeft voltooid, selecteren ze Volgende, waarmee de methode OnNextSelected wordt aangeroepen. Met de methode OnNextSelected worden alle noodzakelijke taken uitgevoerd voordat u doorgaat naar de volgende wizardpagina, zoals het vastleggen van eventuele configuratiewijzigingen op de aangepaste wizardpagina.

Voor de voorbeeld van een aangepaste wizardpagina wordt de overschrijving van de methode OnNextSelected geïmplementeerd in het bestand LocationPage.ccp. In de methode OnNextSelected op de voorbeeld van de aangepaste wizardpagina worden de volgende methoden genoemd:

  1. InitSection. Met deze methode initialiseert u de koptekst (onderschrift) voor de overzichtsgegevens die op de overzichtspagina worden weergegeven. Normaal gesproken kunt u deze waarde instellen met de functie DisplayName(). De gegevens die aan dit onderschrift zijn gekoppeld, worden opgeslagen met behulp van de methode SaveFields.

  2. SaveFields. Met deze methode worden veldwaarden opgeslagen in taakreeksvariabelen en in de gegevens die worden weergegeven op de overzichtspagina .

De SampleEditor Visual Studio-oplossing controleren

Voordat u uw eigen aangepaste wizardpagina's en editors voor wizardpagina's gaat maken, voert u de volgende stappen uit om de UDI-ontwikkelomgeving voor te bereiden:

De architectuur van de UDI-wizard voor Designer controleren

De UDI Wizard Designer is ontwikkeld met behulp van WPF, Prism en Unity. De UDI-Designer wordt gebruikt om het UDI-wizardconfiguratiebestand (UDIWizard_Config.xml) te bewerken, dat de UDI-wizard (OSDSetupWizard.exe) tijdens runtime leest. Het element Pagina's in het configuratiebestand van de wizard UDI bevat een lijst met pagina's met een afzonderlijk pagina-element voor elke wizardpagina.

Wanneer u de configuratie-instellingen voor een wizardpagina bewerkt, laadt de UDI Wizard Designer de aangepaste pagina-editor die overeenkomt met het paginatype van de wizard. De aangepaste wizardpagina-editors zijn ontwikkeld als WPF-gebruikersbesturingselementen. De aangepaste pagina's van de editor voor wizardpagina's gebruiken het MVVM-ontwerppatroon ( Model-View-ViewModel ) voor WPF.

Het MVVM-ontwerppatroon helpt de gebruikersinterface (UI; presentatie) te scheiden van de gepresenteerde gegevens. De gegevens vormen een façade over het element Page in het configuratiebestand van de UDI-wizard (het Config.xml-bestand in het voorbeeld), dat wordt geopend met behulp van de eigenschap CurrentPage van de IDataService-interface .

De UDI Wizard Designer gebruikt het DependencyAttribute om toegang te verkrijgen tot de DataService-klasse op basis van het dependency injection framework in Unity. Voor meer informatie over het afhankelijkheidsinterjectieraamwerk in Unity, zie Injecteer wat leven in uw toepassingen - Het Unity-toepassingsblok leren kennen.

Configureerbare onderdelen van een UDI-wizardpagina controleren

Als u de aangepaste wizardpagina maakt, worden sommige configuratie-instellingen mogelijk gecodeerd en kunnen deze niet meer worden gewijzigd nadat u de pagina hebt gecompileerd. Voor andere configuratie-instellingen moet u echter toestaan dat deze configuratie-instellingen worden gewijzigd met behulp van de UDI Wizard Designer.

De configuratie-instellingen die u wilt configureren met de UDI-wizard Designer worden meestal opgeslagen in het configuratiebestand van de UDI-wizard (het Config.xml-bestand in het voorbeeld). U kunt echter ook uw eigen afzonderlijke configuratiebestand maken als dat nodig is. Een voorbeeld van het gebruik van een afzonderlijk configuratiebestand is het bestand UDIWizard_Config.xml.app, dat wordt gebruikt in de taak Toepassingsdetectie en het paginatype Wizard ApplicationPage .

Hier volgt een lijst met de gebruikelijke configuratie-instellingen die u kunt beheren met de UDI Wizard Designer:

  • veld. Gebruikers kunnen invoer invoeren via velden. Velden worden weergegeven als veldelementen in het configuratiebestand van de UDI-wizard (UDIWizard_Config.xml), dat de configuratie-instellingen voor elk veld bevat. De bijbehorende editor voor de wizardpagina moet een methode bieden voor het bewerken van de veldconfiguratie-instellingen voor het veld met behulp van FieldElementControl.

  • Eigenschappen. Samenstellers helpen bij het maken van eigenschappen voor entiteiten op de pagina, zoals pagina's in het pagina-element , velden in het veldelement of gegevens in de elementen Gegevens of Gegevensitem . Eigenschappen configureert u in de Setter-elementen . Voeg een afzonderlijk Setter-element toe voor elke eigenschap die u wilt definiëren. U bewerkt de eigenschappen met behulp van SetterControl en configureert andere Setter-elementen met andere besturingselementen.

  • gegevens. Gegevens worden gebruikt om informatie op te slaan voor gebruik door de wizardpagina en andere onderdelen. U kunt gegevens voor pagina's of velden definiëren met de elementen Gegevens of Gegevensitem . De gegevens kunnen in een platte of hiërarchische structuur worden gedefinieerd door het juiste gebruik van de gegevens - of gegevensitemelementen . De Config.xml in het voorbeeld in de SDK laat zien hoe u platte gegevensstructuren kunt bouwen.

    De aangepaste editor voor wizardpagina's die u maakt, moet deze configuratie-instellingen kunnen beheren.

Bekijk het voorbeeld van EditorPage

Het EditorPage-voorbeeld wordt gebruikt om de configuratie-instellingen te configureren voor de wizardpagina Voorbeeldpagina in het configuratiebestand van de UDI-wizard. Het EditorPage-voorbeeld heeft de volgende primaire onderdelen:

  • Gebruikersinterface voor het configureren van de instellingen voor keuzelijsten met invoervak Locatie

  • Gebruikersinterface voor het toevoegen of bewerken van een locatie in de lijst met mogelijke locaties die worden weergegeven in de keuzelijst met invoervak Locatie

  • Configuratie-instellingen worden gelezen uit en opgeslagen in het configuratiebestand van de UDI-wizard

  • Ondersteunende code voor de andere onderdelen

    Bekijk het EditorPage-voorbeeld in Visual Studio door de volgende stappen uit te voeren:

  1. Controleer hoe de pagina-editor van de wizard Voorbeeldeditor wordt geladen en geïnitialiseerd in de UDI Wizard Designer, zoals is beschreven in Laden en initialiseren van de pagina-editor van de wizard Controleren.

  2. Controleer de gebruikersinterface die wordt gebruikt voor het bewerken van de keuzelijst met invoervak Locatie in de bestanden LocationPageEditor.xaml en LocationPageEditor.xaml.cs, zoals is beschreven in Bekijk de gebruikersinterface die wordt gebruikt om de keuzelijst met invoervak Locatie te configureren.

  3. Controleer de gebruikersinterface die wordt gebruikt om locaties toe te voegen aan of te bewerken aan de lijst in de bestanden AddEditLocationView.xaml en AddEditLocationView.xaml.cs, zoals is beschreven in Bekijk de gebruikersinterface die wordt gebruikt om de lijst met mogelijke locaties te wijzigen.

  4. Controleer de code die wordt gebruikt voor het beheren van configuratie-informatie die is opgeslagen in het configuratiebestand van de UDI-wizard, zoals is beschreven in Bekijk de code die wordt gebruikt om configuratie-informatie te beheren.

Laden en initialiseren van de pagina-editor van de wizard Controleren

Aangepaste editors voor tovenaarspagina's worden geladen zoals vereist door de UDI Wizard Designer. De configuratiebestanden van de UDI-wizard Designer worden geladen wanneer de UDI Wizard Designer wordt gestart. De UDI-wizard scant Designer de map install_folder\Bin\Config (waarbij install_folder de naam is van de map waarin MDT is geïnstalleerd) op bestanden met de bestandsextensie .config.

Tijdens de configuratie van de UDI-ontwikkelomgeving hebt u het bestand SamplePage.dll.confg gekopieerd naar de map install_folder\Bin\Config. Wanneer u de UDI-wizard Designer start, wordt het bestand SamplePage.dll.confg gevonden en geladen.

De UDI-wizard gebruikt Designer de volgende kenmerken van het element Page in het bestand SamplePage.dll.confg om het EditorPage-voorbeeld te laden en te initialiseren:

  • Designer Assembly. Dit kenmerk bepaalt de naam van het DLL-bestand dat moet worden geladen. Dit DLL-bestand moet in dezelfde map worden geplaatst als het UDIDesigner.exe-bestand, namelijk de map install_folder\Bin (waarbij install_folder de naam is van de map waarin MDT is geïnstalleerd).

  • DesignerType. Dit kenmerk is de Microsoft .NET-typenaam van de klasse die het WPF-gebruikersbesturingselement bevat.

  • Typen. Gebruik dit kenmerk om het paginatype te configureren van de aangepaste wizardpagina, die door de UDI-wizard wordt geladen. De UDI Wizard Designer gebruikt dit kenmerk om het juiste Pagina-element in het configuratiebestand van de UDI-wizard te vinden.

  • dll. Gebruik dit kenmerk om het DLL-element te configureren in het configuratiebestand van de UDI-wizard, dat door de UDI-wizard Designer wordt gemaakt.

  • Beschrijving. Gebruik dit kenmerk om informatie over de editor voor wizardpagina's op te geven. De waarde van dit kenmerk wordt weergegeven in het dialoogvenster Nieuwe pagina toevoegen in de UDI Wizard Designer, dat wordt gebruikt om de wizardpagina toe te voegen aan de Paginabibliotheek.

  • Weergavenaam. Gebruik dit kenmerk om de naam op te geven van de aangepaste wizardpagina die wordt weergegeven in UDI Wizard Designer. De waarde van dit kenmerk wordt weergegeven in het dialoogvenster Nieuwe pagina toevoegen in de UDI Wizard Designer, dat wordt gebruikt om de wizardpagina toe te voegen aan de Paginabibliotheek.

    In het voorbeeld is de aangepaste wizardpagina VoorbeeldpaginaMicrosoft.SamplePage.LocationPage, die wordt opgeslagen in het Config.xml bestand. Het Config.xml bestand bevindt zich in de map local_folder\SDK\SamplePage\SamplePage (waarbij local_folder de map is die u eerder in het configuratieproces hebt gemaakt op de ontwikkelcomputer).

Controleer de gebruikersinterface die wordt gebruikt om de keuzelijst met invoervak Locatie te configureren

Wanneer de pagina-editor van de wizard wordt geladen en geïnitialiseerd, wordt de pagina-editor van de wizard Voorbeeldeditor geladen wanneer een pagina met het type Microsoft.SamplePage.LocationPage wordt bewerkt. De gebruikersinterface voor de pagina-editor wordt opgeslagen in het bestand LocationPageEditor.xaml.

Als u de gebruikersinterface op het tabblad Ontwerpen en de code op het tabblad XAML bekijkt, ziet u de relatie tussen de grafische gebruikersinterface en de elementen en kenmerken in de XAML (Extensible Application Markup Language).

Als u bijvoorbeeld het element Controls:FieldElementControl in XAML bekijkt, ziet u hoe dit zich verhoudt tot de indeling van de bijbehorende gebruikersinterface. Gebruik het element Controls:FieldElementControl om het besturingselement FieldElementControl te definiëren.

De bindingsparameters in het XAML-bestand binden de velden in de voorbeeldpagina-editor aan de gegevens in het configuratiebestand van de UDI-wizard. Met de volgende code wordt bijvoorbeeld het tekstvak Standaardwaarde gekoppeld aan het element Standaardelement in het configuratiebestand van de UDI-wizard (Config.xml in het voorbeeld):

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

Zie Procedures: Gegevens beschikbaar maken voor binding in XAML voor meer informatie.

Gebruik het element Views:CollectionTControl.ColumnCollectionView in XAML om de lijst met beschikbare locaties in de rasterweergave te bewerken. Gebruik het besturingselement CollectionTControl om de rasterweergave weer te geven en de rasterweergave te koppelen aan het element Gegevens met de naam Locatie in het UDI-configuratiebestand.

De gebruikersinterface controleren die wordt gebruikt om de lijst met mogelijke locaties te wijzigen

De gebruikersinterface voor het wijzigen van de lijst met mogelijke locaties bestaat uit:

Contextgevoelige menu- en lintknoppen voor het wijzigen van de lijst met locaties controleren

Wanneer u met de rechtermuisknop in de keuzelijst met locaties klikt, wordt een contextafhankelijk menu weergegeven. Het lint bevat bijbehorende knoppen waarmee u dezelfde taken kunt uitvoeren. Het besturingselement Views:CollectionsTControl in het bestand LocationPageEditor.xaml definieert als volgt de aangeroepen methoden op basis van de ondernomen actie en de eigenschappen die u instelt:

  • SelectedItem. Deze aan gegevens gekoppelde eigenschap wordt geactiveerd wanneer de gebruiker een item in de lijst selecteert. Deze eigenschap is gekoppeld aan de eigenschap CurrentLocation in het weergavemodel, die zich in het LocationPageEditorViewModel.cs-bestand bevindt en door het besturingselement CollectionTControl wordt gebruikt om het geselecteerde item door te geven wanneer u een bestaand item bewerkt of verwijdert.

  • AddItemAction. Deze actie wordt uitgevoerd wanneer de gebruiker de optie Item toevoegen selecteert in het contextgevoelige menu of de bijbehorende knoppen op het lint. Er is een gegevensbinding met een eigenschap in het weergavemodel die het object AddLocationAction retourneert. Dit object is de AddLocationCallback-methode , die zich in het LocationPageEditorViewModel.cs-bestand bevindt, en geeft het dialoogvenster weer in het bestand AddEditLocationView.xaml.

  • EditItemAction. Deze actie wordt uitgevoerd wanneer de gebruiker de optie Item bewerken selecteert in het contextgevoelige menu. Er is een gegevensbinding met een eigenschap in het weergavemodel die het object EditLocationAction retourneert. Dit object is de EditLocationCallback-methode , die zich in het LocationPageEditorViewModel.cs-bestand bevindt, en geeft het dialoogvenster weer in het bestand AddEditLocationView.xaml.

  • RemoveAction. Deze actie wordt uitgevoerd wanneer de gebruiker de optie Item verwijderen selecteert in het contextgevoelige menu. Er is een gegevensbinding met een eigenschap in het weergavemodel die het object RemoveAction retourneert. Dit object is de EditLocationCallback-methode die zich in het LocationPageEditorViewModel.cs-bestand bevindt, en er wordt een bericht weergegeven waarin het verwijderen van de locatie wordt bevestigd.

Het dialoogvenster voor het toevoegen of bewerken van locaties controleren

Als u een nieuwe locatie aan de lijst met locaties toevoegt of een bestaande locatie bewerkt, wordt een bericht weergegeven dat zich in het bestand AddEditLocationView.xaml bevindt. Het bericht wordt weergegeven met behulp van de methode ShowDialogWindow in het LocationPageEditorViewModel.cs bestand.

De gebruikersinterface in het bestand AddEditLocationView.xaml bestaat uit:

  • Een dialoogvensterframe met de naam DialogFrame, dat de volgende elementen bevat:

    • Een titel die u configureert met behulp van het kenmerk DialogTitle van het dialoogvensterframe

    • Een knop OK , waarmee de retourstatus voor de eigenschap Approved wordt ingesteld op Waar (de retourstatus wordt gecontroleerd met de methode AddLocationCallback in het LocationPageEditorViewModel.cs bestand om te bepalen of de gebruiker OK heeft geselecteerd.)

    • Een knop Annuleren , waarmee de retourstatus voor de eigenschap Goedgekeurd wordt ingesteld op Onwaar (de retourstatus wordt gecontroleerd bij de methode AddLocationCallback in het LocationPageEditorViewModel.cs bestand om te bepalen of de gebruiker Annuleren heeft geselecteerd.)

  • Een WPF-element dat het volgende bevat:

    • Een label, dat u configureert met behulp van het kenmerk Inhoud

    • Een tekstvak dat is gebonden aan het element Gegevens met de naam Locatie in het UDI-configuratiebestand (het Config.xml-bestand in het voorbeeld)

Controleer de code die wordt gebruikt om configuratiegegevens te beheren

De configuratiegegevens voor de aangepaste wizardpagina worden opgeslagen in het configuratiebestand van de UDI-wizard. Dit is:

  • Config.xml bestand in het voorbeeld dat bij de UDI SDK wordt geleverd (dit bestand bevat alleen de configuratie-instellingen voor het voorbeeld.)

  • UDIWizard_Config.xml bestand dat bij MDT wordt geleverd, opgeslagen in de map installation_folder\Templates\Distribution\Scripts (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd); Dit bestand bevat de configuratie-instellingen voor alle ingebouwde pagina's en stadia van de wizard

    In het voorbeeld SampleEditor helpt de routine Locations bij het beheren van de configuratiegegevens en bevindt deze zich in het LocationPageEditorViewModel.cs-bestand. De routine Locaties retourneert een lijst met de locaties uit het configuratiebestand van de UDI-wizard. De geretourneerde lijst bevat een item voor elk DataItem-element in het configuratiebestand van de UDI-wizard.

Aangepaste UDI-wizardpagina's maken

Het algemene proces voor het maken van aangepaste UDI-wizardpagina's is als volgt:

  1. Maak een kopie van de SamplePage-oplossing als uitgangspunt.

  2. Plaats de gewenste besturingselementen (velden) op het formulier.

  3. Schrijf code om de juiste taken uit te voeren wanneer de wizardpagina wordt geladen (overschrijft de methode OnWindowShared ), met inbegrip van de volgende stappen:

    1. Initialiseer het formulier.

    2. Geheugenvariabelen, taakreeksvariabelen, omgevingsvariabelen of gegevens van XML-bestanden (zoals Setter-eigenschappen ) lezen.

  4. Schrijf een code om de juiste taken uit te voeren wanneer de pagina wordt weergegeven (overschrijft de methode OnWindowShown ), met inbegrip van de volgende stappen:

    1. Schakel besturingselementen in of uit op basis van informatie die is gelezen toen de pagina werd geladen in stap 3.

    2. De besturingselementen bijwerken op basis van informatie die wordt gelezen bij het laden van de pagina in stap 3, zoals de populatie besturingselementen op basis van de gelezen informatie.

  5. Schrijf code om de juiste taken uit te voeren terwijl de gebruiker met de wizardpagina werkt.

  6. Schrijf een code om de juiste taken uit te voeren wanneer de gebruiker Volgende selecteert in de UDI-wizard (overschrijft de methode OnNextSelected ), met inbegrip van de volgende stappen:

    1. Werk geheugenvariabelen, taakreeksvariabelen, omgevingsvariabelen of XML-bestandsinformatie bij.

    2. Overzichtspaginagegevens bijwerken (indien niet uitgevoerd door de velden op de pagina).

  7. Bouw de oplossing.

    Zorg ervoor dat de versie van de DLL die u maakt hetzelfde processorplatform is als de installatie van MDT, met name het processorplatform voor Windows Preinstallation Environment (Windows PE). De UDI-wizard kan worden uitgevoerd in:

    • Het bestaande besturingssysteem op de doelcomputer. U kunt 32-bits versies van uw wizardpagina uitvoeren op een 32-bits of 64-bits Windows-besturingssysteem. U kunt echter alleen 64-bits versies van uw wizardpagina uitvoeren op een 64-bits Windows-besturingssysteem.

    • Windows PE op de doelcomputer. Windows PE biedt geen ondersteuning voor het uitvoeren van 32-bits toepassingen op een 64-bits versie van Windows PE. U moet dus een versie voor uw wizardpagina hebben gemaakt voor elke processorarchitectuur van Windows PE die u wilt gebruiken.

  8. Kopieer de DLL voor uw aangepaste wizardpagina naar de platformmap installation_folder\Templates\Distribution\Tools\ (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en het platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie).

  9. Voer de stappen uit voor het maken van een aangepaste pagina-editor.

Aangepaste editors voor wizardpagina's maken

Het algemene proces voor het maken van aangepaste editors voor UDI-tovenaarspagina's is als volgt:

  1. Maak een kopie van de SampleEditor-oplossing als uitgangspunt.

  2. Maak de primaire gebruikersinterface van de pagina-editor in een XAML-bestand.

  3. Voeg indien nodig exemplaren van het besturingselement FieldElementControl toe zoals vereist door de wizardpagina om te worden geconfigureerd.

  4. Voeg indien nodig exemplaren van het SetterControl-besturingselement toe zoals vereist door de wizardpagina om te worden geconfigureerd.

  5. Voeg indien nodig exemplaren van het besturingselement CollectionTControl toe zoals vereist door de wizardpagina om te worden geconfigureerd.

  6. Voeg de IDataService-interface toe.

  7. Schrijf de juiste code om het configuratiebestand van de UDI-wizard bij te werken op basis van de configuratie-instellingen die moeten worden geconfigureerd met behulp van de aangepaste editor voor de wizardpagina.

  8. Maak onderliggende dialoogvensters in een XAML-bestand en roep ze aan vanuit de primaire pagina-editor met behulp van de IMessageBoxService-interface , zoals vereist door de wizardpagina die moet worden geconfigureerd.

  9. Voeg de juiste interfaces toe aan het lint UDI Wizard Designer op basis van de vereisten van de wizardpagina die moet worden geconfigureerd.

  10. Bouw de oplossing.

    Opmerking

    Zorg ervoor dat de versie van de DLL die u maakt hetzelfde processorplatform is als de installatie van MDT. Als u bijvoorbeeld de 64 bitsversie van MDT installeert, moet u een 64 bitsversie van uw aangepaste pagina-editor maken.

  11. Maak een UDI-wizard Designer configuratiebestand om de benodigde DLL's te laden en wijs de editor voor de wizardpagina toe aan de bijbehorende wizardpagina (het SamplePage.dll.config bestand in het voorbeeld).

    Zie DesignerMappings-element , onderliggende elementen en bijbehorende kenmerken voor meer informatie over de elementen die nodig zijn voor de toewijzing tussen de wizardpagina en de editor voor de wizardpagina.

  12. Kopieer de UDI-wizard Designer configuratiebestand dat u in de vorige stap hebt gemaakt naar de map installation_folder\Bin\Config (waar installation_folder de map is waarin u de MDT-versie hebt geïnstalleerd).

  13. Kopieer het DLL-bestand van uw aangepaste wizardpagina-editor naar de map installation_folder\Bin (waarin installation_folder de map is waarin u MDT hebt geïnstalleerd).

Aangepaste UDI-taken maken

UDI-taken zijn DLL's geschreven in C++ die de ITask-interface implementeren. U registreert het DLL-bestand bij de UDI-wizard Designer taakbibliotheek door een UDI-wizard Designer configuratiebestand (.config-bestand) te maken en dit in de map installation_folder\Bin\Config te plaatsen (waarin installation_folder map is waarin u MDT hebt geïnstalleerd).

Opmerking

U kunt een DLL maken die wizardpagina's, taken en validators in hetzelfde .dll bestand bevat. U kunt ook één UDI-wizard Designer configuratiebestand (.config) maken dat de configuratie-instellingen bevat voor de wizardpagina's, taken en validators in de DLL.

Aangepaste UDI-taken maken

  1. Schrijf code die de ITask Interface en de volgende methoden implementeert:

    • Init. Deze methode wordt aangeroepen om uw taak te initialiseren.

    • Uitvoeren. Deze methode wordt aangeroepen om uw taak uit te voeren.

  2. Code schrijven waarmee de aangepaste taakklasse factory wordt geregistreerd bij het fabrieksregister.

  3. Bouw de oplossing voor uw aangepaste taak.

    Opmerking

    Zorg ervoor dat de versie van de DLL die u maakt hetzelfde processorplatform is als de installatie van MDT. Als u bijvoorbeeld de 64-bits versie van MDT installeert, maakt u een 64-bits versie van uw aangepaste UDI-taak.

  4. Maak een taakelement onder het element TaskLibrary in het configuratiebestand UDI Wizard Designer, zoals in het volgende fragment:

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

    Opmerking

    Alle taakelementen moeten de parameter BitmapFilename bevatten. Geef alle andere parameters op die voor de taak vereist zijn. In het vorige fragment wordt de logboekparameter bijvoorbeeld gebruikt om een parameter op te geven voor de locatie van een logboekbestand.

  5. Kopieer de UDI-wizard Designer configuratiebestand dat u in de vorige stap hebt gemaakt naar de map installation_folder\Bin\Config (waarin installation_folder de map is waarin u MDT hebt geïnstalleerd).

  6. Kopieer het DLL-bestand voor uw aangepaste taak naar de platformmap installation_folder\Templates\Distribution\Tools\ (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en het platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie).

Aangepaste UDI-validators maken

UDI-validators zijn DLL's geschreven in C++ die de IValidator-interface implementeren. U registreert het DLL bij de UDI-wizard Designer validatorbibliotheek door een UDI-wizard Designer configuratiebestand (.config bestand) te maken en dit in de map installation_folder\Bin\Config te plaatsen (waarin installation_folder de map is waarin u MDT hebt geïnstalleerd).

Aangepaste UDI-validators maken

  1. Code schrijven waarmee een subklasse van de klasse BaseValidator wordt gemaakt en de volgende methoden worden geïmplementeerd:

    • Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). De formuliercontroller roept het Init-lid aan om de validator te initialiseren. Deze methode moet de Init-methode aanroepen voor de klasse BaseValidator . Meestal worden alle ingestelde eigenschappen voor de validator uit het configuratiebestand van de UDI-wizard gelezen. De validator InvalidCharactersValidator haalt bijvoorbeeld met deze methode de waarde van de eigenschap InvalidChars op.

    • IsGeldig. De formuliercontroller roept deze methode aan om te zien of het besturingselement geldige tekst bevat. Hieronder volgt een voorbeeld van de IsValidate-methode voor een validator die controleert of het veld niet leeg is:

      BOOL IsValid(LPBSTR pMessage)
      {
          __super::IsValid(pMessage);
      
          _bstr_t text;
          m_pText->GetText(text.GetAddress());
          return (text.length() > 0);
      }
      
    • Init(IControl *pControl, LPCTSTR-bericht). De formuliercontroller roept dit lid aan voor elke toetsaanslag en andere gebeurtenissen, zodat de validator de inhoud van het besturingselement en bijgewerkte berichten onderaan de wizardpagina kan valideren (of wissen).

      Meestal zijn dit de enige methoden die u moet negeren. Afhankelijk van de validator kan het echter zijn dat u andere methoden in de subklasse van de BaseValidator-klasse die u maakt, moet negeren. Zie de klasse BaseValidator voor meer informatie over deze andere methoden.

  2. Code schrijven waarmee de aangepaste taakklasse bij Registry Factory wordt geregistreerd.

  3. Bouw de oplossing voor uw aangepaste taak.

    Opmerking

    Zorg ervoor dat de versie van de DLL die u maakt hetzelfde processorplatform is als de installatie van MDT. Als u bijvoorbeeld de 64-bits versie van MDT installeert, maakt u een 64-bits versie van uw aangepaste UDI-taak.

  4. Maak een Validator-element onder het ValidatorLibrary-element in het configuratiebestand UDI Wizard Designer, vergelijkbaar met het volgende fragment:

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

    Waarschuwing

    Alle validatorelementen moeten de berichtparameter bevatten. Specificeer alle andere parameters zoals vereist door de validator. In het vorige fragment wordt de parameter NamedPattern bijvoorbeeld gebruikt om een parameter op te geven voor de naam van een vooraf gedefinieerd regulier expressiepatroon.

  5. Kopieer de UDI-wizard Designer configuratiebestand dat u in de vorige stap hebt gemaakt naar de map installation_folder\Bin\Config (waarin installation_folder de map is waarin u MDT hebt geïnstalleerd).

  6. Kopieer het DLL-bestand voor uw aangepaste taak naar de platformmap installation_folder\Templates\Distribution\Tools\ (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en het platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie).

Naslaginformatie over UDI-wizard

Onderdelen van wizardpagina

U kunt een van de verschillende vooraf gebouwde onderdelen gebruiken om uw aangepaste pagina's te maken.

Onderdeelexemplaren maken

De UDI-wizard gebruikt class factories om nieuwe exemplaren van objecten voor u te maken. Deze fabrieken zijn geregistreerd bij een fabrieksregister, met een string als sleutel tot de fabriek. Het onderdeel WmiRepository wordt bijvoorbeeld geïdentificeerd door de tekenreeks 'Microsoft.Wizard.WmiRepository', die beschikbaar is in het IWmiRepository-headerbestand als ID_WmiRepository.

Ervan uitgaande dat u uw pagina hebt geschreven als een subklasse van WizardPageImpl, kunt u een nieuw exemplaar van een WmiRepoistory als volgt maken:

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

De functie CreateInstance is een typeveilige sjabloonfunctie voor het maken van nieuwe exemplaren van componenten. PWmiRepository is een slimme aanwijzer, dus het behandelt het tellen van referenties voor u.

Maakbare componenten

Er is een set onderdelen die u bij het register kunt registreren. De eerste set onderdelen wordt altijd geregistreerd, omdat dit wordt geleverd door het uitvoerbare hoofdbestand van de UDI-wizard. De andere twee sets componenten worden geleverd in "optionele" DLL's. Deze onderdelen zijn pas beschikbaar als de DLL's zijn vermeld in de sectie DLL's van het .config XML-bestand. De code hoeft niet te weten welk uitvoerbaar bestand een specifiek onderdeel bevat.

De lijst met component-ID's voor componenten (de componentnaam is hetzelfde als de ID, maar zonder de initiële ID_) die zijn geregistreerd bij het fabrieksregister (gedefinieerd in OSDSetupWizard) wordt weergegeven in tabel 3.

Tabel 3. Onderdeel-id's

Id Beschrijving
ID_ACPowerTask (ITask, IWizardComponent) Een preflight-taak die ervoor zorgt dat uw computer niet alleen op batterijstroom werkt
ID_AppDiscoveryTask (ITask, IWizardComponent) Een gespecialiseerde taak om te bepalen welke software-items u op uw computer hebt geïnstalleerd
ID_BackgroundTask (IBackgroundTask, IWizardComponent) Kan worden gebruikt om een taak uit te voeren op een andere thread
ID_CopyFilesTask (ITask, IWizardComponent) Een taak om een of meer bestanden te kopiëren
ID_FormController (IFormController) U hoeft zelf geen exemplaar te maken, omdat uw pagina een eigen exemplaar krijgt
ID_InvalidCharactersValidator (IValidator) Zorgt ervoor dat geen enkel tekstveld tekens bevat uit een lijst die aan de validator is verstrekt
ID_Logger (ILogger) U hoeft zelf geen exemplaar te maken, omdat uw pagina een verwijzing naar het gedeelde exemplaar ontvangt
ID_NonEmptyValidator (IValidator) Een validator die ervoor zorgt dat geen enkel veld leeg is
ID_PasswordValidator (IValidator) Een validator die ervoor zorgt dat twee tekstvelden niet dezelfde inhoud hebben
ID_Regex (IRegEx) Evalueert reguliere expressies, zoeken naar overeenkomsten
ID_RegExValidator (IValidator) Een validator die valideert op basis van een reguliere expressie of een bekend patroon
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) Biedt een eenvoudige manier om eigenschappen naar taken te verzenden zonder XML te gebruiken
ID_ShellExecuteTask (ITask, IWizardComponent) Een extern programma uitvoeren
ID_SummaryBag (ISummaryBag) Indirect beschikbaar vanaf uw pagina via de formuliermethode
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) Beheert het uitvoeren van een set taken en de gebruikersinterface
ID_WmiRepository (IWmiRepository, IWizardComponent) Hiermee kunt u WMI-query's (Windows Management Instrumentation) uitvoeren
ID_IXmlDocument (IXmlDocument) Biedt een façade voor het lezen en schrijven van XML-documenten

De gedefinieerde OSDRefreshWizard.dll, gedeelde pagina's en andere besturingselementen worden weergegeven in tabel 4 en tabel 5.

Tabel 4. Directory Controls

Id Beschrijving
ID_Directory (IDirectory) Een façade voor het ophalen van mapgegevens uit het bestandssysteem

Tabel 5. Gedefinieerde SharedPages.dll

Id Beschrijving
ID_ADHelper (IADHelper) Biedt een façade voor een beperkt aantal functies in Active Directory® Domeinservices (AD DS)
ID_CpuInfo (ICpuInfo) Hiermee bepaalt u of uw CPU 32- of 64-bits is
ID_DomainJoinValidator (IDomainJoinValidator) Heeft enkele methoden om te controleren of een set referenties is toegestaan om lid te worden van een domein
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Gebruikt WMI om een lijst met stations op uw computer te verkrijgen
ID_WiredNetworkTask (ITvraag) Een taak waarmee wordt gecontroleerd of u met een bekabelde netwerkadapter (in plaats van draadloos) met het netwerk bent verbonden

Onderdelen van het besturingselement

U communiceert met de besturingselementen op de pagina via de sjabloonfunctie GetControlRopper , die toegang biedt tot een van de typen onderdelen die worden vermeld in tabel 6.

Tabel 6. Onderdelen

Typen dialoogbesturingselementen Beschrijving
CONTROL_CHECK_BOX (ICheckBox) Een façade voor het werken met besturingselementen voor selectievakjes
CONTROL_COMBO_BOX (IComboBox) Een façade voor besturingselementen voor keuzelijsten met invoervak
CONTROL_GENERIC (IControl) Hiermee kunt u met de meeste besturingselementen werken om de ingeschakelde en zichtbare status te bepalen
CONTROL_LIST_VIEW (IListView) Een façade die toegang biedt tot de functies van een besturingselement voor lijstweergave
CONTROL_PROGRESS_BAR (IProgressBar) Een façade voor het werken met de positie van een voortgangsbalkbesturingselement
CONTROL_RADIO_BUTTON (IRadioButton) Een façade voor het werken met keuzerondjes
CONTROL_STATIC_TEXT (IStaticText) Een façade die lees-/schrijfmachtigingen biedt aan de tekst van een besturingselement, zoals een label of tekstvak
CONTROL_TREE_VIEW (ItreeView) Een façade voor het werken met een besturingselement voor structuurweergave

Onderdeel Afbeeldingslijst

Dit onderdeel is de façade voor een ImageList-besturingselement op uw pagina. U maakt een afbeeldingenlijst via de IListView- of ITreeView-interface .

FormController-onderdeel

De wizard maakt dit onderdeel voor u en geeft het door aan uw pagina. U opent het formulier vanaf de pagina met de methode Formulier , die wordt geïmplementeerd door de basisklasse WizardPageImpl .

InvalidCharacterValidator-onderdeel

Dit is een type validator dat u op een pagina kunt opnemen. De id is ID_InvalidCharactersValidator (gedefinieerd in IValidator.h), die de tekstwaarde 'Microsoft.Wizard.Validation.InvalidChars' heeft.

Deze validator zoekt naar een enkele eigenschap (een Setter-element in het .config-bestand) met de naam InvalidChars, een lijst met tekens die niet zijn toegestaan. Het controleert de tekens in een tekstvak; Als de tekst tekens uit deze lijst bevat, rapporteert het onderdeel een fout.

NonEmptyValidator-onderdeel

Dit is een type validator dat u op een pagina kunt opnemen. De id is ID_NonEmptyValidator (gedefinieerd in IValidator.h), die de tekstwaarde 'Microsoft.Wizard.Validation.NonEmpty' heeft.

Deze validator meldt een fout als het tekstvak (of een ander besturingselement dat IStaticText ondersteunt) een lege tekenreekswaarde heeft.

PasswordValidator-onderdeel

Dit is een type validator dat u op een pagina kunt opnemen. De id is ID_PasswordValidator (gedefinieerd in IValidator.h), die de tekstwaarde 'Microsoft.Wizard.Validation.Password' heeft.

Deze validator werkt met twee verschillende tekstbesturingselementen (besturingselementen die IStaticText ondersteunen) en rapporteert fouten als deze niet dezelfde waarden bevatten. Met andere woorden, de functie mislukt als de tekstvakken Wachtwoord en Wachtwoord bevestigen niet overeenkomen.

Omdat deze validator twee besturingselementen nodig heeft, heeft hij meer instellingen nodig dan andere validators. De configuratie kan er ongeveer als volgt uitzien:

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);

Eerst definieert u het besturingselement Wachtwoord bevestigen als een 'kind' van het besturingselement Wachtwoord . Als de formuliercontroller dan het wachtwoordbeheer uitschakelt, wordt ook het besturingselement Wachtwoord bevestigen uitgeschakeld. Voeg vervolgens een wachtwoordvalidator toe aan het formulier. Geef ten slotte de wachtwoordvalidator de interface naar het besturingselement Wachtwoord bevestigen .

Omdat er twee besturingselementen nodig zijn, moet u code gebruiken in plaats van het .config XML-bestand in te stellen voor deze validator.

RegExValidator-onderdeel

Dit is een type validator dat u op een pagina kunt opnemen. De id is ID_RegExValidator (gedefinieerd in IValidator.h), die de tekstwaarde 'Microsoft.Wizard.Validation.RegEx' heeft.

Deze validator vergelijkt de inhoud van een tekstbesturingselement (een besturingselement dat IStaticText ondersteunt) met een reguliere expressie en mislukt als de tekst niet overeenkomt met de reguliere expressie.

Je kunt deze validator ook gebruiken met een vooraf gedefinieerd benoemd patroon. Als u een reguliere expressie wilt gebruiken, moet de XML een settereigenschap genaamd Pattern bevatten. Als u in plaats daarvan een benoemd patroon wilt gebruiken, gebruikt u een setter met de naam BenoemdPatroon die is ingesteld op een van de waarden in tabel 7.

Tabel 7. Benoemde patroonzetters

Patroon Beschrijving
Gebruikersnaam Hiermee wordt gecontroleerd of de tekst afkomstig is van het formulierdomein\gebruiker of user@domain
ComputerName De naam moet tussen 1 en 15 tekens lang zijn en mag geen reeks tekens bevatten (zoals : en ?)
Workgroup De naam moet tussen 1 en 15 tekens lang zijn en mag geen reeks tekens bevatten (zoals =, +, en ?)

FactoryRegistry-onderdeel

Dit onderdeel houdt alle klassenfabrieken en diensten bij. Het implementeert de IFactoryRegistry-interface en is indirect beschikbaar via de Container-methode van uw pagina. Bovendien worden extensie-DLL's door het register geladen. Nadat een DLL is geladen, zoekt het register naar een geëxporteerde functie met de naam RegisterFactories. Je moet deze functie implementeren en daarin de class factories registreren voor je pagina's, taken en validators (en alle andere class factories die je wilt registreren). Hier ziet u een voorbeeld van het voorbeeldproject:

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

Logger-onderdeel

Dit onderdeel is beschikbaar voor de pagina via de Logger-methode (geïmplementeerd door WizardPageImpl). Deze methode gebruikt u om vermeldingen naar het logboekbestand te schrijven. De inhoud van het logboekbestand is handig voor het diagnosticeren van problemen die gebruikers mogelijk hebben bij het uitvoeren van de UDI-wizard.

PropertyBag-onderdeel

De eigenschap bag is een container voor geheugenvariabelen. Deze is beschikbaar op uw pagina via Container()->Properties(). Geheugenvariabelen zijn handig om tijdelijke gegevens door te geven aan verschillende pagina's.

TSVariableBag- en TSRepository-componenten

Met het onderdeel TSVariableBag kunt u taakreeksvariabelen lezen en schrijven. De waarden worden in het geheugen bewaard totdat de gebruiker Voltooien selecteert (standaard). U hebt toegang tot de TSVariable-tas via de TSVariables-methode van de pagina (geïmplementeerd door de WizardPageImpl-basisklasse ). Deze onderdelen registreren alle lees- en schrijfbewerkingen van taakreeksvariabelen.

WmiRepository-onderdeel

Dit onderdeel bevat een façade voor het werken met WMI-query's. U kunt de CreateInstance helperfunctie aanroepen met ID_WmiRepository om een exemplaar van dit onderdeel te verkrijgen, dat de IWmiRepository interface ondersteunt. Dit onderdeel retourneert resultaatrecords via de IWmiIterator-interface .

Helperklassen voor wizardpagina's

U kunt aangepaste UDI-wizardpagina's maken met ingebouwde helperklassen die bij de UDI SDK worden geleverd. Tabel 8 bevat de helperklassen die u kunt gebruiken om aangepaste wizardpagina's te maken.

Tabel 8. Helper klassen

Helperklasse Beschrijving
ClassFactoryImpl-klasse Dit is een handige basisklasse voor het maken van een class factory die u vervolgens kunt registreren bij het fabrieksregister.
Klasse Interfacesjabloon Gebruik deze sjabloonklasse als u een onderdeel wilt bouwen dat meerdere interfaces implementeert.
Padhulpklasse Deze klasse biedt algemene bewerkingen voor bestanden/mappen.
Klasse aanwijzersjabloon Deze klasse biedt referentietellingen voor levensduurbeheer in COM-componenten. Het is belangrijk om interfaces vrij te geven wanneer u hiermee klaar bent. Deze sjabloonklasse verwerkt de levensduur automatisch.
Bekende klasse Deze klasse is een slimme aanwijzer specifiek voor de IUnknown interface. Voor alle andere interfaces gebruikt u de sjabloonklasse Aanwijzer.
StringUtil Helper-klasse Deze cursus biedt hulpermethoden waarmee u gemakkelijker met tekenreeksen kunt werken.
SubInterfacesjabloonklasse Deze basisklasse maakt het gemakkelijker om een onderdeel te implementeren dat een interface ondersteunt die zelf een andere interface overneemt.
OnbekendeImpl sjabloonklasse Deze klasse behandelt de meeste details van het maken van een COM-onderdeel.
Wizardonderdeelsjabloonklasse Deze basisklasse wordt gebruikt voor het maken van onderdelen die toegang tot de wizardservices nodig hebben, zoals het maken en registreren van onderdelen.
WizardPageImpl-sjabloonklasse Deze basisklasse moet worden gebruikt als de basisklasse voor alle aangepaste wizardpagina's

ClassFactoryImpl-klasse

Dit is een handige basisklasse voor het maken van een class factory die u vervolgens kunt registreren bij het fabrieksregister.

Hieronder volgt een fragment uit het bestand LocationPage.h in het voorbeeldproject om de klasse ClassFactoryImpl te definiëren.

#pragma once

#include "ClassFactoryImpl.h"

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

Hieronder ziet u een fragment uit het LocationPage.cpp bestand in de voorbeeldwizard dat wordt gebruikt om de class factory voor de pagina te definiëren.

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

Klasse Interfacesjabloon

Gebruik deze sjabloonklasse als u een onderdeel wilt bouwen dat meerdere interfaces implementeert, bijvoorbeeld:

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

Met deze code wordt een basisklasseketen gemaakt die ondersteuning biedt voor zowel IFieldCalback als de interfaces die WizardPageImpl ondersteunt (dit is toevallig IWizardPage).

Padhulpklasse

Deze klasse bevat algemene bewerkingen voor bestanden/mappen:

static inline std::wstring GetModulePath(HINSTANCE hModule)

Daarnaast wordt het volledige pad naar het .exe of .dll bestand geretourneerd met de exemplaargreep die u voor deze methode hebt opgegeven:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)

De klasse retourneert het volledige pad en de bestandsnaam van de .exe en .dll bestand met de exemplaargreep die u voor deze methode hebt opgegeven:

static inline std::wstring GetDirectoryName(LPCWSTR fullName)

. . . Of alleen het pad bij het verwijderen van de bestandsnaam:

static inline std::wstring GetFileName(LPCWSTR fullName)

Gegeven een pad met een bestandsnaam, retourneert de padhelperklasse alleen de bestandsnaam:

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

Ten slotte retourneert de klasse een nieuwe tekenreeks die het gecombineerde pad en de bestandsnaam (of een ander pad) is.

Klasse aanwijzersjabloon

Deze klasse wordt gedefinieerd in Pointer.h. Omdat COM-onderdelen referentietellingen gebruiken voor levensduurbeheer, is het belangrijk dat u interfaces altijd vrijgeeft wanneer u hiermee klaar bent. Microsoft biedt een sjabloonklasse die de levensduur automatisch verwerkt. Als u bijvoorbeeld een slimme aanwijzer wilt voor een XML-interface, kunt u zoiets als dit schrijven:

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

De eerste regel definieert de slimme aanwijzer. Op de tweede regel ziet u het ophalen van een slimme aanwijzer via een andere oproep. Met de operator & wordt altijd een bestaande interface vrijgegeven als deze een interface bevat en wordt het adres van de interne aanwijzer geretourneerd. Wanneer u een aanwijzer zoals deze hebt opgehaald, wordt Loslaten aangeroepen wanneer de variabele buiten het bereik valt. Microsoft raadt u aan om slimme aanwijzers te gebruiken in plaats van AddRef en Release handmatig aan te roepen.

Daarnaast roept de slimme aanwijzerklasse van de aanwijzerQueryInterface aan om andere interfaces voor u op te halen. Wanneer bijvoorbeeld met het fabrieksregister een nieuw exemplaar van een onderdeel wordt gemaakt, bevat het de volgende code:

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

De eerste regel roept achter de schermen QueryInterface aan om de IWizardComponent-interface aan te vragen. De resulterende slimme aanwijzer is gelijk aan nullptr als het onderdeel die interface niet ondersteunt.

Bekende klasse

Deze klasse is een slimme aanwijzer specifiek voor de IUnknown interface. Voor alle andere interfaces gebruikt u de sjabloonklasse Aanwijzer .

StringUtil Helper-klasse

Deze klasse is gedefinieerd in Utilities.h en biedt helpermethoden die het gemakkelijker maken om met strings te werken:

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)

Bij deze methode worden twee tekenreeksen vergeleken zonder hoofdletters en kleine letters te negeren (zie tabel 9).

Tabel 9. StringUtil Helper-klasse

Retourneren Beschrijving
0 Tekenreeksen komen overeen, waarbij hoofdletters en kleine letters worden genegeerd
<0 Eerste < seconde
>0 Eerste > seconde

Hier volgt een voorbeeld:

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

Deze methoden lijken een beetje op de Microsoft . NET-indelingsmethoden in die zin dat parameters de vorm hebben van {0}. Ze voeren echter geen formattering van de invoer uit, alleen vervanging:

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)

Dit zijn wrappers rond de StringCchPrintf die een wstring retourneren zodat je niet zelf geheugen hoeft toe te wijzen voor strings of buffers.

SubInterfacesjabloonklasse

Deze basisklasse maakt het gemakkelijker om een onderdeel te implementeren dat een interface ondersteunt die zelf een andere interface overneemt. De ICheckBox-interface neemt bijvoorbeeld over van IControl. Hier is hoe deze klasse wordt gebruikt om de CheckBoxWrapper te definiëren:

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

De basisinterface is de eerste parameter, terwijl de afgeleide interface de tweede parameter is.

OnbekendeImpl sjabloonklasse

Deze klasse is gedefinieerd in UnknownImpl.h en behandelt de meeste details voor het maken van een COM-component. Hier volgt een voorbeeld van hoe u deze basisklasse zou gebruiken:

classDirectory :public UnknownImpl<IDirectory>

Deze code definieert een klasse die de interface IDirectory ondersteunt.

Wizardonderdeelsjabloonklasse

Deze klasse is gedefinieerd in IWizardComponent.h en is een handige basisklasse voor het maken van onderdelen die toegang tot de wizardservices nodig hebben, zoals het maken en registreren van onderdelen.

Het onderdeel CopyFilesTask wordt bijvoorbeeld als volgt gedefinieerd:

classCopyFilesTask :public WizardComponent<ITask>
{
    ...

De parameter voor deze sjabloonklasse is de "hoofd"-interface die u wilt gebruiken voor uw onderdeel, wat in het geval van taken ITask is. Het gebruik van WizardComponent betekent dat uw onderdeel zowel de interface ondersteunt die u opgeeft (ITask in dit voorbeeld) als IWizardComponent.

Wanneer u het klasse-fabrieksregister gebruikt om een nieuw onderdeel te maken, roept het register de methode IWizardComponent-SetContainer> van het onderdeel aan om uw onderdeel toegang te geven tot de wizardservices.

WizardPageImpl-sjabloonklasse

Gebruik deze klasse als de basisklasse voor uw aangepaste pagina's, bijvoorbeeld:

class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>

De parameter is de resource-id voor de dialoogvenstersjabloon.

Wizardpagina-interfaces

De UDI-wizard gebruikt interfaces om toegang te krijgen tot de verschillende besturingselementen op uw pagina. Op uw pagina gebruikt u de functie GetControlWrapper om een control wrapper op te halen. Hier volgt een voorbeeld:

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

Hier is PStaticText een slimme aanwijzer naar de IStaticText-interface . Slimme aanwijzers roepen automatisch de methode COM Release() aan wanneer ze buiten het bereik vallen of als u het adres van een variabele (zoals &pFormat) doorgeeft aan een methode.

IADHelper-interface

__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)

Initialiseer dit onderdeel en geef het door aan de logger, zodat het informatie kan registreren.

HRESULTValidLogon(LPCTSTR-gebruikersnaam, LPCTSTR-wachtwoord, LPCTSTR-domein)

Met deze methode wordt gecontroleerd of een set referenties geldig is, zoals wordt weergegeven in tabel 10.

Tabel 10. HResultValidLogon

HResult Beschrijving
S_OK Referenties zijn geldig
S_FALSE Referenties zijn niet geldig
E_FAIL Kan de domeincontroller niet vinden; Controleer logboeken voor details
HRESULT HasAccess(LPCTSTR-gebruikersnaam, LPCTSTR-wachtwoord, LPCTSTR-domein, LPCTSTR computernaam, LPCTSTR accountdomein)

Met deze methode wordt gecontroleerd of een set referenties lees-/schrijftoegang heeft tot het computerobject in AD DS, zoals wordt weergegeven in tabel 11.

Tabel 11. HResult HasAccess

HRESULT Beschrijving
S_OK De gebruiker heeft toegang
E_FAIL De gebruiker heeft geen toegang. Controleer het logboekbestand voor meer informatie.

IBackgroundTask Interface

__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);
};
Overzicht

De pagina Voortgang gebruikt deze klasse om taken uit te voeren op een aparte thread. U kunt deze klasse ook gebruiken wanneer u bewerkingen wilt uitvoeren op een afzonderlijke thread. Taken zijn elke klasse die de ITask-interface ondersteunt.

Deze interface wordt geïmplementeerd door het onderdeel ID_BackgroundTask ('Microsoft.Wizard.BackgroundTask'), gedefinieerd in de interface IBackgroundTask.h.

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

Deze interface initialiseert de component, zoals weergegeven in tabel 12.

Tabel 12. HRESULT Init

Parameter Beschrijving
pTask Pointer naar de klasse met de code die u wilt uitvoeren voor een andere thread
Identiteitskaart Een getal dat u kunt gebruiken in de methode Voltooid van de callback om aan te geven welke taak is voltooid. Handig als u meerdere taken start met dezelfde callbackmethode
pCallback Een klasse die de methode Voltooid implementeert, die wordt aangeroepen wanneer een taak is voltooid; de aanroep naar de methode Voltooid vindt plaats in de achtergrondthread, niet in de UI-thread
void Start(void)

Met deze methode start u de taak op een achtergrondthread en worden de elementen geretourneerd die worden weergegeven in tabel 13.

Tabel 13. Achtergrondthread retourneren

Retourneren Beschrijving
E_INVALIDARG De taak wordt al uitgevoerd, dus u kunt er nu niet aan beginnen.
E_FAIL Er is een probleem opgetreden bij het starten van de thread.
S_OK De thread was gestart.
BOOL Running()

Deze methode retourneert WAAR als de achtergrondtaak momenteel wordt uitgevoerd en ONWAAR als deze niet wordt uitgevoerd.

HRESULT Wait(DWORD, waitMilliseconds)

Met deze methode wordt gewacht totdat de thread stopt of het aantal milliseconden is verstreken.

HRESULT Terminate(DWORD, exitCode)

Deze methode doodt de thread die wordt uitgevoerd (zie tabel 14 en tabel 15). Het kan even duren voordat dit proces is voltooid nadat deze methode is gevonden.

Tabel 14. HRESULT afsluitcode beëindigen

Parameter Beschrijving
exitCode De afsluitcode die wordt verzonden naar de Voltooide callback-methode, die ook beschikbaar is via de GetExitCode-methode .

Tabel 15. Beëindigingscodes

Retourneren Beschrijving
E_FAIL De aanroep om te beëindigen is mislukt.
S_OK Het verzoek om de thread te beëindigen is geslaagd.
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)

Gebruik deze methode om de resultaten van het uitvoeren van de taak op de achtergrondthread te krijgen (zie tabel 16).

Tabel 16. Resultaatcodes

Parameter Beschrijving
pCode Pointer naar een DWORD dat wordt ingesteld bij return of nullptr als u de retourwaarde niet nodig hebt. Bij het afsluiten is deze parameter ingesteld op STILL_ACTIVE als de thread wordt uitgevoerd, de code die wordt geretourneerd door de uitvoeringsmethode van de taak of de waarde die wordt doorgegeven aan de methode Beëindigen als u die methode hebt aangeroepen.
pHresult Pointer naar een HRESULT die wordt ingesteld bij return of nullptr als u de HRESULT-waarde niet nodig hebt.
HRESULT Sluiten(leegte)

Bij deze methode wordt de achtergrondthread vrijgegeven. Hiermee wordt E_INVALIDARG geretourneerd of de thread momenteel wordt uitgevoerd en S_OK anders.

ICheckBox-interface

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

Stel de status van het selectievakje in. Wanneer de methode WAAR is, is het selectievakje ingeschakeld. als de methode ONWAAR is, is het selectievakje uitgeschakeld.

BOOL IsButtonChecked()

Hiermee wordt de huidige status van een selectievakje gerapporteerd.

IComboBox-interface

__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();
};
Overzicht

Deze interface wordt geïmplementeerd door het onderdeel CheckBoxRopper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_COMBO_BOX.

HRESULT Bind([in] IBindableList *pList)

Gebruik deze methode wanneer u een gegevensbron hebt die de interface IBindableList implementeert. Met de keuzelijst initialiseert u de inhoud met de bijschriften uit deze lijst.

HRESULT Select(int-index)

Selecteer het item in de keuzelijst met invoervak bij de index.

int Selected(void)

Deze methode retourneert de index van het geselecteerde item of - 1 als er niets is geselecteerd.

void Add([in] LPCTSTR-onderschrift)

Handmatig een item toevoegen aan de keuzelijst met invoervak.

HRESULT GetText([out, retval] LPBSTR pText)

De tekenreeks van het item dat momenteel is geselecteerd in de keuzelijst met invoervak ophalen.

void Clear()

Verwijder alle items uit de keuzelijst met invoervak.

IControl-interface

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

Deze interface wordt geïmplementeerd door het onderdeel ControlWrapper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_GENERIC.

HRESULT SetEnable(BOOL enable)

Schakel het besturingselement in of uit.

BOOL IsEnabled(void)

Retourneert WAAR als het besturingselement is ingeschakeld, en ONWAAR als dat niet het geval is.

HRESULT SetVisible(BOOL visible)

Het besturingselement weergeven of verbergen.

ICpuInfo-interface

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

U verkrijgt deze interface door een nieuw ID_CpuInfo onderdeel te maken. De enkele methode rapporteert of de CPU 32- of 64-bits is. Houd er rekening mee dat als u een 32-bits besturingssysteem op een 64-bits computer hebt, deze methode WAAR retourneert, omdat alleen de breedte van de CPU wordt gerapporteerd (niet het besturingssysteem).

IDirectory Interface
__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);
};
Overzicht

Het onderdeel Directory , dat u maakt met behulp van ID_Directory, fungeert als façade voor het werken met mappen in het bestandssysteem.

BOOL FileExists(LPCWSTR-naam)

Deze methode retourneert TRUE als een bestand bestaat met de naam die u opgeeft.

BOOL FindFirst([in] LPCWSTR-naam)

Met deze methode wordt gezocht naar een eerste overeenkomst met de naam die u opgeeft. Het ondersteunt jokertekens en retourneert zowel bestands- als mapnamen. De methode retourneert WAAR als er een overeenkomst is gevonden, anders ONWAAR.

HRESULT FoundName([out, retval] LPBSTR-naam)

Met deze methode wordt de naam opgehaald van het bestand dat is gevonden met een aanroep van FindFirst of FindNext.

DWORD FoundAttributes(void)

Met deze methode wordt het kenmerk voor het laatst gevonden bestand of de meest recent gevonden map geretourneerd. U kunt de code als volgt gebruiken om te testen of het een adreslijst is:

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

Zoek de volgende. Deze methode retourneert WAAR als een andere overeenkomst is gevonden, anders ONWAAR.

void FinishFind(void)

Bij deze methode worden bronnen vrijgegeven die worden gebruikt voor de zoekbewerking.

IDomainJoinValidator-interface

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

U verkrijgt een exemplaar van deze interface met behulp van de waarde ID_DomainJoinValidator voor de sjabloonfunctie CreateInstance .

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

Initialiseer het exemplaar, zoals wordt weergegeven in tabel 17.

Tabel 17. HRESULT Init - Initialisatie van exemplaar

Parameter Beschrijving
pLogger De logger-instantie, die beschikbaar is voor uw pagina via de Logger-methode van de pagina
pContainer Hiermee worden de resultaten van de containermethode van uw pagina doorgegeven
pUsername Het tekstvak met de te valideren gebruikersnaam
pPassword Het tekstvak met het wachtwoord dat moet worden gevalideerd
PComputerName Het tekstvak met de naam van de computer die uiteindelijk aan het domein wordt gekoppeld
HRESULT IsUsernameValid(LPCWSTR domeinnaam)

Deze methode maakt gebruik van de IADHelper-ValidLogon-methode> om het werk uit te voeren. Bekijk deze methode voor meer informatie.

BOOL CanModifyComputerAdEntry(LPCWSTR domeinnaam)

Controleer of de gebruiker rechten heeft om de computervermelding te wijzigen. Het meeste werk wordt gedaan door IADHelper-HasAccess>. Als het resultaat van deze methode FALSE is, controleert u het logboekbestand voor details.

IDriveList Interface

__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)

Roep deze methode aan voordat u andere onderdelen aanroept. U moet een nieuwe WmiRepository maken voordat u deze methode aanroept.

HRESULT SetWhereClause(LPCTSTR whereClause)

Met deze methode kunt u tekst toevoegen die als een 'waar'-component wordt weergegeven in de query. De volgende regel retourneert bijvoorbeeld alleen USB-stations:

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

Stel in bytes het minimaliseren van de stationsgrootte in voor stations die worden geretourneerd uit de query.

HRESULT Update(void)

Voer de query uit. De stationslijst die beschikbaar is na het aanroepen van deze methode is gesorteerd op stationsletter.

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

Met deze methode worden de namen toegevoegd van aanvullende eigenschappen die u beschikbaar wilt maken in de queryresultaten. Roep deze methode aan voordat u Update aanroept. Tabel 18 geeft een overzicht van drie van de nuttige eigenschappen.

Tabel 18. HRESULT AddProperty: nuttige eigenschappen

Sectie Eigenschap Beschrijving
DISKQUERY_LOGICALDISK Grootte De grootte, in bytes, die wordt weergegeven als een tekenreeks
DISKQUERY_DISKPARTITION DiskIndex Het schijfnummer als een geheel getal, beginnend met 0
DISKQUERY_LOGICALDISK VolumeName Het volumelabel
size_t Aantal(void)

Het aantal records dat de query als resultaat geeft. Roep Bijwerken voordat u deze methode aanroept.

HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT-waarde)

Met deze methode wordt de waarde van een eigenschap opgehaald uit de queryresultaten, zoals wordt weergegeven in tabel 19.

Tabel 19. HRESULT GetProperty

Parameter Beschrijving
Index Op nul gebaseerde index naar de resultaatrecord
propName Naam van de eigenschap, zoals 'Grootte'
Value Het resultaat hiervan is dat deze parameter een variantwaarde van de eigenschap bevat
HRESULT GetCaption(size_t index, LPBSTR pCaption)

Met deze methode wordt het onderschrift voor een record opgehaald dat hetzelfde is als de eigenschap Bijschrift.

IImageList Interface

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

Deze interface wordt geïmplementeerd door het onderdeel ImageList . U haalt een exemplaar van dit onderdeel op uit de IListView-interface .

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

Maak een nieuwe lijst met afbeeldingen, die door dit onderdeel wordt beheerd. Deze methode slechts eenmaal aanroepen.

HImageList GetImageList(void)

Met deze methode wordt de ingang voor de lijst met afbeeldingen geretourneerd voor het geval u andere bewerkingen op de lijst met afbeeldingen moet uitvoeren.

int AddImage(HInstance hInstance, int resourceId)

Een nieuwe afbeelding toevoegen aan de lijst met afbeeldingen van een bron, zoals wordt weergegeven in tabel 20.

Tabel 20. HRESULT IImageList Interface

Parameter Beschrijving
hInstance Exemplaargreep van de module die de bitmapbron bevat
resourceId Id van de resource die in de lijst met installatiekopieën moet worden geladen

IListView-interface

__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);
};
Overzicht

Deze interface wordt geïmplementeerd door het onderdeel ControlWrapper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_LIST_VIEW.

int AddItem([in] LPCTSTR-tekst)

Voeg een nieuwe rij toe aan de keuzelijst. De methode retourneert de index van het item dat zojuist is toegevoegd.

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

Een nieuwe kolom toevoegen aan de lijstweergave.

HRESULT SetSubItem(int-index, int-kolom, [in] LPCTSTR-tekst)

Stel de tekst in een andere kolom in dan de eerste kolom van de keuzelijst, zoals wordt weergegeven in tabel 21.

Tabel 21. HRESULT SetSubItem

Parameter Beschrijving
inhoudsopgave De index van het lijstitem dat u wilt wijzigen
kolom De index van de kolom die u wilt bijwerken; de eerste kolom wordt ingesteld met AddItem, kolommen twee en volgende worden ingesteld met deze methode
Tekst De tekenreeks die in de kolom moet worden weergegeven
int GetWidth(void)

Met deze methode wordt de breedte van het hele tekstvak als resultaat gegeven.

void SetExtendedStyle(DWORD-stijl)

Met deze methode kunt u uitgebreide stijlen instellen voor de keuzelijst, bijvoorbeeld:

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

Met deze methode wordt de index geretourneerd van het item in de lijstweergave dat momenteel is geselecteerd.

HRESULT SelectItem(int-index)

Stel het geselecteerde item in de lijst in op deze index.

BOOL IsItemChecked(int-index)

Het resultaat van deze methode is WAAR als een item in de lijst is geselecteerd. Voor deze methode moet u SetExtendedStyle aanroepen om de stijl van het selectievakje in te stellen.

int GetItemCount(void)

Met deze methode wordt het aantal items in de lijstweergave geretourneerd.

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

Maak een nieuwe lijst met afbeeldingen en koppel deze aan de lijstweergave.

int AddImage(HINSTANCE hInstance, int resourceId)

Een afbeelding toevoegen aan de lijst met afbeeldingen in de lijstweergave. U moet eerst CreateImageList aanroepen.

HRESULT SetImage(int index, int imageIndex)

Stel de afbeelding in die voor een bepaald lijstweergave-item aan de linkerkant wordt weergegeven.

HRESULT Clear(void)

Alle items verwijderen uit de lijstweergave.

IProgressBar Interface

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

Deze interface wordt geïmplementeerd door het onderdeel ProgressBarWrapper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_PROGRESS_BAR.

HRESULT SetPercentage(int-positie)

Stel de positie van de voortgangsbalk in met een getal tussen 0 en 100. Standaard hebben nieuwe Win32-voortgangsbalken® een maximumbereik van 100.

int GetPercentage(void)

Met deze methode wordt de huidige positie van de voortgangsbalk als resultaat gegeven.

IRadioButton-interface

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

Deze interface wordt geïmplementeerd door het onderdeel RadioButtonRopper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_RADIO_BUTTON.

void SetGroup(int firstId, int lastId)

Voorzie de wrapper van het bereik van keuzerondjes die als groep moeten worden behandeld. Roep deze methode aan voordat u CheckRadio belt.

void CheckRadio(int-id)

Stel het specifieke keuzerondje in als de enige knop in de geselecteerde groep keuzerondjes. Roep SetGroup aan voordat u deze methode aanroept.

BOOL IsButtonChecked(int id)

Deze methode retourneert WAAR als het keuzerondje momenteel is geselecteerd, anders ONWAAR.

void EnableRadio(int id, BOOL enable)

Met deze methode schakelt u een keuzerondje in of uit.

IStaticText Interface

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

Deze interface wordt geïmplementeerd door het onderdeel StaticTextHopper . U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_STATIC_TEXT.

HRESULT SetText([in] LPCTSTR pText)

Stel de tekst voor het besturingselement in.

HRESULT GetText([out, retval] LPBSTR pText)

Met deze methode wordt de huidige waarde van de tekst voor het besturingselement geretourneerd.

ITask Interface

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

Implementeer deze interface als u wilt dat het onderdeel beschikbaar is als taak op de preflight-pagina of als u het onderdeel BackgroundTask wilt gebruiken om te werken aan een achtergrondthread.

Hier zijn componenten die de ITask-interface implementeren:

  • ID_ShellExecuteTask, L"Microsoft.Wizard.ShellExecuteTask"

  • ID_CopyFilesTask, L"Microsoft.Wizard.CopyFilesTask"

  • ID_ACPowerTask, L"Microsoft.OSDRefresh.ACPowerTask"

  • ID_WiredNetworkTask, L"Microsoft.SharedPages.WiredNetworkTask"

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

Als u een taak schrijft voor de Preflight-pagina, roept u deze methode aan om uw taak te initialiseren. Het .config bestand bevat XML die er ongeveer als volgt uit kan zien:

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

De parameter pProperties biedt toegang tot de drie setterwaarden, terwijl de parameter pTaskSettings toegang biedt tot het element Taak en onderliggende items. De meeste taken hoeven alleen gegevens te lezen uit de parameter pProperties .

Uitvoeren
HRESULT Execute(LPDWORD pReturnCode)

Hier schrijft u de code waarmee de taak wordt uitgevoerd. Met deze methode wordt een S_OK geretourneerd als er geen fouten zijn en er kan een ander HRESULT worden geretourneerd als er een fout is opgetreden terwijl de taak wordt uitgevoerd. Als u de Preflight-pagina gebruikt, worden andere waarden dan S_OK die met deze methode worden geretourneerd, vergeleken met <> foutelementen in de <sectie Afsluitcodes>.

De parameter pReturnCode moet worden bijgewerkt met een getal dat de status van de taak aangeeft. Deze waarden worden door de preflights-pagina gekoppeld aan <Afsluitcode-elementen> .

ITreeView-interface

__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);
};
Overzicht

Deze interface wordt geïmplementeerd door de TreeViewWrapper component. U haalt een exemplaar van dit onderdeel op met de helperfunctie GetControlWrapper met het type CONTROL_TREE_VIEW.

void EnableCheckboxes(void)

Bij deze methode worden selectievakjes in het besturingselement voor de structuurweergave ingeschakeld door de stijl van de TVS_CHECKBOXES in te stellen.

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

Een nieuwe lijst met afbeeldingen toevoegen aan het besturingselement voor de structuurweergave De parameter vlaggen wordt doorgegeven in de aanroep van de functie ImageList_Create Win32.

int AddImage(HINSTANCE hInstance, int resourceId)

Voeg een afbeelding toe aan de lijst met afbeeldingen vanuit een resource (resourceId) in de module met de exemplaarhandle hInstance.

HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)

Voeg een knooppunt toe aan de structuurweergave. Het nieuwe knooppunt wordt op het hoogste niveau toegevoegd als het bovenliggende item NULL is. Geef anders de greep aan het bovenliggende item waar u het nieuwe item wilt toevoegen. Met deze methode wordt de greep naar het nieuwe item teruggebracht.

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

Stel de afbeelding in die u wilt gebruiken voor een item in de structuurweergave. U kunt zowel de normale als de uitgevouwen afbeelding instellen.

void Wissen(void)

Alle items verwijderen uit de structuurweergave.

BOOL SetFirstVisible(HTREEITEM-item)

Controleer of het item in de structuurweergave zichtbaar is. De structuurweergave wordt indien nodig verschoven om dit item zichtbaar te maken.

BOOL SelectItem(HTREEITEM-item)

Stel het geselecteerde item in op het item dat u opgeeft. U kunt hierna SetFirstVisible aanroepen om ervoor te zorgen dat het zojuist geselecteerde item zichtbaar is.

void CheckItem(HTREEITEM-item, UINT checkState)

De methode stelt in feite de afbeelding in die wordt weergegeven voor het selectievakje in de structuurweergave. Deze afbeeldingen bevinden zich in een afzonderlijk ImageList-besturingselement dat door de structuurweergave wordt beheerd. Deze lijst met afbeeldingen bevat standaard drie afbeeldingen, zoals wordt weergegeven in tabel 22.

Table 22.void CheckItem Image List Default

checkState Beschrijving
0 Leeg
1 Gewist
2 Geselecteerd
HTREEITEM SelectedItem(void)

Met deze methode wordt de greep van het item in de structuurweergave geretourneerd dat momenteel is geselecteerd.

int SetItemHeight(SHORT height)

Met deze methode stelt u de hoogte van alle items in het besturingselement voor de structuurweergave in pixels in. Hiermee wordt de vorige hoogte in pixels als resultaat gegeven.

HRESULT EnableItem(HTREEITEM-item, BOOL enable)

Met deze methode schakelt u één item in de boomstructuur in of uit. Als u een item met kinderen uitschakelt, worden de kinderen niet uitgeschakeld.

void Expand(HTREEITEM, hItem, BOOL expand)

Met deze methode wordt een knooppunt in de boomstructuur uitgevouwen of samengevouwen.

HTREEITEM: GetChild(HTREEITEM, hParent)

Met deze methode wordt het eerste onderliggende item van een structuurweergave-item geretourneerd of NULL als er geen onderliggende items zijn.

HTREEITEM: GetParent(HTREEITEM, hNode)

Met deze methode wordt de ingang van het bovenliggende element voor een knooppunt in de structuurweergave geretourneerd, of NULL als het knooppunt zich op het hoogste niveau bevindt.

HTREEITEM, GetNextItem(HTREEITEM, hPrevious)

U kunt deze methode aanroepen met een handle die GetChild retourneert om alle onderliggende items van een knooppunt te doorlopen. Deze methode retourneert de volgende broer of zus in de stamboom die dezelfde ouder heeft.

UINT IsChecked(HTREEITEM-item)

Deze methode retourneert 0 als het knooppunt in de structuurweergave niet is geselecteerd en 1 als dit wel het geval is.

BOOL IsEnabled(HTREEITEM-item)

Deze methode retourneert WAAR als het knooppunt in de structuurweergave is ingeschakeld, anders ONWAAR.

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

Deze methode is alleen voor intern gebruik.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

Roep deze methode aan als u een melding wilt ontvangen wanneer het geselecteerde item wordt gewijzigd of wanneer de gebruiker de controlestatus van een item in de structuurweergave wijzigt. U moet de ITreeViewEvent in uw onderdeel implementeren om deze callbacks te ontvangen.

void SetSelectedBackColor(COLORREF color)

Stel de achtergrondkleur in die wordt gebruikt voor het geselecteerde item.

IWmiIteration-interface

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

U gebruikt deze interface, samen met IWmiRepository, meestal wanneer u met WMI-aanroepen werkt. Met de IWmiIteration-interface kunt u de waarden die door een query worden geretourneerd, herhalen.

HRESULT Next(void)

Naar het volgende item in de queryresultaten gaan, zoals wordt weergegeven in tabel 23.

Tabel 23. HRESULT Volgende (void) query geeft als resultaat

HRRESULT Beschrijving
S_OK Verplaatst naar het volgende resultaat; kunt u GetProperty gebruiken om eigenschappen van dat resultaat op te halen.
S_FALSE De lijst bevat geen items meer.
E_NOT_SET Er zijn geen queryresultaten
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)

Met deze methode wordt de waarde van een eigenschap opgehaald uit de huidige resultaatrecord, zoals wordt weergegeven in tabel 24 en tabel 25.

Tabel 24. HRESULT GetProperty

Parameter Beschrijving
propertyName De naam van de eigenschap die u wilt ophalen
pValue Verwijst naar een VARIANT-structuur die als resultaat de eigenschapswaarde bevat

Tabel 25. HRESULT GetProperty Result

HRESULT Beschrijving
S_OK De waarde van het onroerend goed is opgehaald.
WBEM_E_NOT_FOUND Er is geen eigenschap met de naam.
E_NOT_VALID_STATE Er is momenteel geen record.

Opmerking

De methode GetProperty kan andere WMI-foutcodes retourneren dan die in tabel 25 worden vermeld. De weergegeven waarden zijn de algemene resultaten die worden geretourneerd.

IWmiRepository-interface

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

Deze interface wordt geïmplementeerd door de WmiRepository-component (ID_WmiRepository).

HRESULT SetNamespace(LPCWSTR namespaceName)

Met deze methode wordt de WMI-naamruimte ingesteld die voor de query wordt gebruikt. Roep deze methode aan voordat u ExecQuery aanroept. Als u deze methode niet aanroept, wordt de naamruimte root\cimv2. Deze methode retourneert altijd S_OK.

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

Voer een query uit op de WMI-naamruimteset met een aanroep naar SetNamespace, zoals weergegeven in tabel 26 en tabel 27.

Tabel 26. HRESULT ExecQuery

Parameter Beschrijving
Query De tekenreeks voor de WMI-query die u wilt uitvoeren
ppIterator Geef een aanwijzer door aan een interfaceaanwijzer, die bij terugkomst wordt gevuld met een interface waarmee u toegang krijgt tot de queryresultaten

Tabel 27. Resultaat van HRESULT-query

HRESULT Beschrijving
S_OK Query geslaagd
Overige Als de query niet is geslaagd, wordt een WMI-HRESULT geretourneerd

IFormController-interface

__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);
 };
Overzicht

Elke pagina in de UDI-wizard heeft een eigen formuliercontroller die deze interface implementeert. U gebruikt deze controller om de veldgegevens in het .config XML-bestand te koppelen aan de besturingselementen op de pagina. De formuliercontroller verwerkt vervolgens veel van de gegevens voor u.

Het formulier instellen

Stel de formuliercontroller meestal in op de methode OnWindowCreated van uw pagina. Dit doet u meestal door de methoden aan te roepen die worden weergegeven in tabel 28.

Tabel 28. Methode OnWindowCreated

Methode Beschrijving
Init Initialiseert de formuliercontroller
AddField Hiermee zorgt u voor een verbinding tussen een veld in het .config XML-bestand dat een tekenreeksnaam is en een besturingselement in het dialoogvenster van de pagina dat een id is
AddRadioGroup Wordt gebruikt om een keuzerondje te verbinden met zowel een groep als een besturingselement in het dialoogvenster
AddToGroup Hiermee kunt u "onderliggende" besturingselementen gebruiken die samen met hun bovenliggende element zijn in- of uitgeschakeld of op basis van welke keuzerondje is geselecteerd
InitFields Bel nadat u alle methoden voor toevoegen hebt aangeroepen om het formulier in te stellen
Valideren De eerste validatie wordt uitgevoerd
Formuliergebeurtenissen verwerken

Voeg de volgende aanroep toe aan de OnControlEvent-methode :

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

Met deze aanroep worden gebeurtenissen doorgegeven aan de formuliercontroller, zodat deze formuliergerelateerde gebeurtenissen kan verwerken.

Formuliergegevens opslaan

Roep bij de methode OnNextSelected de formuliermethoden aan die worden weergegeven in tabel 29.

Tabel 29. Methode OnNextSelected

Methode Beschrijving
InitSection Hiermee wordt de naam opgegeven van de sectie die wordt weergegeven op de overzichtspagina voor deze pagina
SaveFields Veldwaarden opslaan in taakreeksvariabelen en op de pagina Overzicht
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)

U noemt deze methode meestal aan het begin van de pagina OnWindowCreated methode. De opdracht moet er ongeveer als volgt uitzien:

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

Deze methode wordt intern genoemd, en je moet het niet zelf noemen. Hiermee wordt de XML van de pagina geleverd voor de formuliercontroller.

Valideren
HRESULT Validate(void)

Met deze methode worden alle validators uitgevoerd die aan besturingselementen zijn gekoppeld. Als een validator niet slaagt, geeft de formuliercontroller een waarschuwingsbericht weer en schakelt de knop Volgende uit en stopt vervolgens met het verwerken van validators. Meestal hoeft u deze methode alleen aan het einde van uw OnWindowCreated-methode aan te roepen; Het retourneert altijd S_OK.

AddToGroup
AddToGroup(int groupControlId, int controlId)

Bij deze methode wordt een besturingselement toegevoegd als een 'onderliggend' element van een selectievakje of keuzerondje, zoals wordt weergegeven in tabel 30. Al deze onderliggende besturingselementen worden uitgeschakeld wanneer het bovenliggende besturingselement niet is geselecteerd. De methode retourneert altijd S_OK.

Tabel 30. AddToGroup

Parameter Beschrijving
groupControlId De id van het selectievakje of keuzerondje waarmee u de inschakelstatus van het onderliggende besturingselement kunt bepalen
Controlld De id van het besturingselement dat u wilt toevoegen als een onderliggend element
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)

Met deze methode wordt de in- of uitschakelstatus van de onderliggende besturingselementen van een groep bijgewerkt op basis van de status van het bovenliggende besturingselement. In het algemeen hoeft u deze methode niet zelf aan te roepen, omdat deze wordt opgeroepen door de formuliercontroller.

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

Roep deze methode alleen aan als u een validator hebt die u in code wilt maken in plaats van met XML. Deze methode retourneert altijd S_OK.

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

Roep deze methode alleen aan als u een validator hebt die u in code wilt maken in plaats van met XML.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)

Roep deze methode aan om de validator expliciet uit te schakelen voor een besturingselement of om de normale validatie te herstellen, zoals weergegeven in tabel 31. Deze methode is bijvoorbeeld handig wanneer u regels hebt in- of uitgeschakeld voor besturingselementen die niet worden gedekt door formuliervalidatie en als u validatie voor een besturingselement wilt uitschakelen. Met andere woorden, u zou deze methode normaal gesproken niet noemen. Deze methode retourneert altijd S_OK.

Tabel 31. HRESULT DisableValidation

Parameter Beschrijving
controlId Het besturingselement waarvoor u validatie wilt in- of uitschakelen
Uitschakelen Stel in op WAAR om validatie uit te schakelen en op ONWAAR om de normale validatie te herstellen
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)

Voeg een besturingselementtoewijzing toe tussen de naam in een veldelement van het .config XML-bestand en de besturingselement-id in het dialoogvenster van de pagina, zoals wordt weergegeven in tabel 32. U moet deze methode aanroepen vóór de aanroep van InitFields, omdat deze informatie door InitFields wordt gebruikt. Deze methode retourneert altijd S_OK.

Tabel 32. HRESULT AddField

Parameter Beschrijving
Veldnaam Naam van het veld zoals weergegeven in de XML van uw pagina
controlId De id van het besturingselement in de dialoogvenstersjabloon van uw pagina
onderdrukken Stel in op WAAR als u niet wilt dat de waarden uit dit veld naar het logboekbestand worden geschreven; stel deze parameter altijd in op WAAR voor wachtwoord- of pincodevelden
Type Het type besturingselement. Dit is een van de volgende opties:

- 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)

Met deze methode voegt u een besturingselement toe aan een benoemde groep keuzerondjes, zoals wordt weergegeven in tabel 33. U moet dit aanroepen vóór de methode InitFields , omdat bij deze methode attributen op het element RadioGroup worden gebruikt om instellingen te beheren voor alle besturingselementen van keuzerondjes in de groep. Keuzerondjes kunnen bijvoorbeeld worden vergrendeld zodat alle keuzerondjes zijn uitgeschakeld, maar onderliggende knoppen kunnen alleen worden in- of uitgeschakeld op basis van welk keuzerondje is geselecteerd. Deze methode retourneert altijd S_OK.

Tabel 33. HRESULT AddRadioGroup

Parameter Beschrijving
groupName Een tekenreeks die een groep keuzerondjes op deze pagina definieert
radioControlId De id van één keuzerondje dat moet worden toegevoegd aan deze groep
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)

Met deze methode kunt u een hele groep keuzerondjes in- of uitschakelen. Als u een keuzerondje groep uitschakelt, worden alle besturingselementen voor keuzerondjes in de groep uitgeschakeld, evenals eventuele onderliggende elementen van de keuzerondjes die zijn toegevoegd met AddToGroup. Zie tabel 34 en tabel 35.

Tabel 34. EnableRadioGroup

Parameter Beschrijving
groupName Naam van een keuzerondjesgroep die u al hebt gedefinieerd met een aanroep van AddRadioGroup
Inschakelen Stel in op WAAR om het keuzerondje groep in te schakelen en ONWAAR om de groep uit te schakelen

Tabel 35. HRESULT EnableRadioGroup

HRESULT Beschrijving
S_OK Groep ingeschakeld of uitgeschakeld
E_INVALIDARG Er bestaat geen keuzerondje met de naam die u hebt opgegeven
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)

Voordat u deze methode aanroept, moet u AddField aanroepen voor elk veld dat door XML kan worden beheerd. Deze methode retourneert altijd S_OK.

De parameter pFieldCallback is optioneel. Als u deze opgeeft, roept de formuliercontroller SetFieldDefault aan voor besturingselementen die niet CONTROL_STATIC_TEXT of CONTROL_CHECK_BOX. Hierdoor kunt u een standaardwaarde ophalen uit de XML en deze zelf instellen in het besturingselement.

SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)

Met deze methode worden veldwaarden opgeslagen in taakreeksvariabelen en in de overzichtsgegevens die op de pagina Samenvatting worden weergegeven. pFieldCallback biedt een aanwijzer voor het opslaan van waarden voor besturingselementen die geen ondersteuning bieden voor CONTROL_STATIC_TEXT.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)

Met deze methode kunt u bepalen of een veld is uitgeschakeld in XML.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)

Met deze methode initialiseren de overzichtsgegevens die op de pagina Overzicht worden weergegeven, zoals wordt weergegeven in tabel 36. Roep deze methode aan in uw OnNextSelected-methode voordat u SaveFields aanroept. Deze methode retourneert altijd S_OK.

Tabel 36. HRESULT InitSection

Parameter Beschrijving
Sleutel Deze parameter moet uniek zijn voor uw pagina. Dit wordt gebruikt om ervoor te zorgen dat elke pagina zijn eigen overzichtsinformatie heeft.
sectionCaption De kop die op de overzichtspagina wordt weergegeven voor de overzichtsinformatie van deze pagina. Meestal gebruikt u DisplayName() als de waarde voor deze parameter.
Samenvattingsitem toevoegen
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)

Met deze methode kunt u overzichtsitems aan de overzichtspagina toevoegen die verder gaan dan de items die met XML zijn ingesteld. Zie tabel 37.

Tabel 37. HRESULT AddSummaryItem

Parameter Beschrijving
Eerste Het onderschrift voor het samenvattingsitem, dat links wordt weergegeven
Tweede De waarde die aan de rechterkant wordt weergegeven
Logwaarde onderdrukken
HRESULT SuppressLogValue(LPCWSTR tsVariableName)

Roep deze methode aan voor takenreeksvariabelen waarvoor u niet wilt dat de waarden naar het logboekbestand worden weggeschreven. Roep deze methode aan voor takenreeksvariabelen waarin wachtwoorden, pincodes of andere gevoelige waarden worden opgeslagen die een gebruiker kan invoeren.

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

Bij deze methode wordt de waarde van een tekstbesturingselement opgeslagen in zowel een taakreeksvariabele als de samenvattingssectie. U hoeft deze methode meestal niet zelf aan te roepen, omdat de formuliercontroller dit voor alle velden doet. Zie tabel 38.

Tabel 38. HRESULT SaveText

Parameter Beschrijving
controlId De id van het tekstvak met de waarde die u wilt opslaan (of een ander besturingselement dat tekst kan retourneren)
tsVariableName Naam van de taakreeksvariabele die u wilt wijzigen
summaryCaption Het onderschrift voor deze waarde op de overzichtspagina
Tekst laden
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)

Met deze methode wordt de waarde van een taakreeksvariabele gelezen en wordt het tekstvak ingesteld op deze waarde.

ControlEvent
void ControlEvent(WORD eventId, WORD controlId)

Roep deze methode aan op uw OnControlEvent-methode om ervoor te zorgen dat de formuliercontroller besturingsgebeurtenissen kan verwerken, wat nodig is om correct te functioneren. De waarden die u aan deze methode doorgeeft, zijn dezelfde waarden die worden doorgegeven aan de methode OnControlEvent .

IsValid
BOOL IsValid(void)

Met deze methode wordt de status van de meest recente validatie van het formulier geretourneerd. Als een van de controlevalidators een fout heeft gerapporteerd, retourneert deze methode FALSE. Met andere woorden, het resultaat is alleen WAAR als resultaat als alle besturingselementen op de pagina geldig zijn.

IValidator Interface

__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);
};
Overzicht

Validators zijn componenten die een enkel besturingselement op uw pagina kunnen valideren. De eenvoudigste manier om een validator te implementeren, is door er een subklasse van de BaseValidator-klasse van te maken, die is gedefinieerd in het BaseValidator.h-headerbestand.

HRESULT Init(IControl *pControl, LPCTSTR-bericht)

Als je een validator in code maakt, kun je deze methode aanroepen om de validator te initialiseren. Zie tabel 39.

Tabel 39. HRESULT Init

Parameter Beschrijving
pControl Het besturingselement dat uw validator moet valideren
Bericht Het bericht dat op de pagina moet worden weergegeven als het besturingselement niet geldig is
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)

De formuliercontroller roept deze methode aan om validators te initialiseren die worden gemaakt op basis van XML van de pagina. Zie tabel 40.

Tabel 40. HRESULT Init-methode

Parameter Beschrijving
pControl Het besturingselement dat uw validator moet valideren
pContainer Voor het geval uw validator toegang nodig heeft tot de logger of andere componenten moet maken
pProperties Geeft toegang tot de eigenschappen (setterelementen) voor je validator
BOOL, IsValid(LPBSTR pMessage)

Deze methode resulteert in WAAR als het besturingselement geldig is of ONWAAR als het besturingselement ongeldig is. Als u pMessage retourneert, moet u een nieuwe BSTR bevatten die het bericht bevat dat moet worden weergegeven wanneer het besturingselement niet geldig is.

HRESULT SetProperty(int propertyId, LPVARIANT pValue)

U kunt deze methode implementeren als u extra waarden nodig hebt die niet in XML beschikbaar zijn.

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

U kunt deze methode implementeren als u extra waarden nodig hebt die niet in XML beschikbaar zijn.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

U kunt deze methode implementeren als u extra waarden nodig hebt die niet in XML beschikbaar zijn.

IRegEx-interface

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

Deze methode wordt geïmplementeerd door het onderdeel ID_Regex (IRegex.h) en biedt ondersteuning voor de verwerking van reguliere expressies.

BOOL MatchesRegex(LPCTSTR-ingang, LPCTSTR-regex)

Bij deze methode wordt de reguliere expressie uitgevoerd op de invoertekst. Het gebruikt de regex_match-functie van de C++-standaardbibliotheek om het eigenlijke werk te doen. De methode retourneert WAAR als er overeenkomsten waren, anders ONWAAR.

HRESULT GetMatch(size_t index, LPBSTR pValue)

Met deze methode kunt u de overeenkomsten van de meest recente MatchesRegex-aanroep ophalen. Houd er rekening mee dat er geen sprake is van foutverwerking bij deze methode en dat S_OK wordt geretourneerd of een uitzondering wordt gegenereerd.

ISummaryInfo-interface

__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);
};

U hoeft deze interface niet rechtstreeks te gebruiken. Gebruik in plaats daarvan IFormController.

ISummaryBag

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

U hoeft deze interface niet rechtstreeks te gebruiken. Gebruik in plaats daarvan IFormController.

ITSVariableBag-interface

__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);
};

Deze interface biedt toegang tot taakreeksvariabelen. U kunt toegang krijgen tot deze interface via de TSVariables()- methode van uw pagina.

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

Met deze methode wordt de waarde van een taakreeksvariabele gelezen.

Opmerking

Waarden worden na de eerste leesbewerking in de cache opgeslagen.

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

Met deze methode stelt u de waarde van een taakreeksvariabele in. Deze waarde wordt in het geheugen opgeslagen. Taakreekswaarden worden weggeschreven nadat u Voltooien hebt geselecteerd in de UDI-wizard.

void Wissen(void)

Bij deze methode verwijdert u alle taakreekswaarden die in het geheugen zijn opgeslagen.

HRESULT Remove([in] LPCTSTR variableName)

Met deze methode verwijdert u een bepaalde taakreekswaarde uit het geheugen. De volgende keer dat u GetValue met dezelfde naam aanroept, probeert de methode deze op te halen uit de takenreeks.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Wanneer taakreeksvariabelen worden geschreven, bijvoorbeeld wanneer u Voltooien selecteert in de UDI-wizard, worden de namen en waarden weggeschreven naar het logboekbestand. Roep deze methode aan als u wilt voorkomen dat gevoelige waarden voor een specifieke taakvolgvariabele worden vastgelegd, zoals wachtwoorden of pincodes.

void Save(void)

Bij deze methode worden alle taakreekswaarden opgeslagen die zijn ingesteld met aanroepen naar SetValue.

ITSVariableRepository-interface

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

Deze interface is voor intern gebruik door TSVariableBag voor het lezen en schrijven van taakreeksvariabelen.

IWizardFinish Interface

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

Deze interface is handig in geavanceerde scenario's waarin u extra verwerking wilt uitvoeren wanneer u Voltooien of Annuleren selecteert in de UDI-wizard. De UDI-wizard bevat een eindtaak waarmee taakreeksvariabelen worden opgeslagen wanneer u Voltooien selecteert. Als u de wizard annuleert, wordt door de taak alleen de taakreeksvariabele OSDSetupWizCancelled ingesteld op TRUE en worden wijzigingen in andere taakreeksvariabelen niet opgeslagen.

Als u uw eigen afwerkingscomponent maakt, moet u deze registreren met de volgende code:

Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);

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

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

pService->Register(pFinish);

IBindableList Interface

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

Implementeer deze interface als u een gegevensbroncomponent hebt die u wilt koppelen aan een keuzelijst met invoervak door de bijbehorende bindingsmethode aan te roepen.

size_t Aantal(void)

Met deze methode wordt het aantal items in de lijst geretourneerd.

HRESULT GetCaption(size_t index, LPBSTR pCaption)

Met deze methode wordt het onderschrift van het item bij een bepaalde index geretourneerd.

IDataNodes-interface

__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);
};

Deze interface biedt toegang tot hiërarchische gegevens die op een pagina kunnen worden opgeslagen. U verkrijgt deze interface via methoden in de interface ISettingsProperties , die voor uw pagina beschikbaar is via de methode Instellingen .

Gegevens in de XML van een pagina kunnen er bijvoorbeeld zo uitzien

      <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) geeft u een IDataNodes-exemplaar> met twee gegevensitems (die elk weer twee eigenschappen hebben).

size_t Count()

Met deze methode wordt het aantal gegevensitemelementen geretourneerd.

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

Het onderdeel dat deze interface ondersteunt, biedt ook ondersteuning voor IBindableList, waardoor een keuzelijst met invoervak eenvoudig kan worden gevuld met gegevens uit de XML van de pagina. Met deze methode wordt bepaald welke eigenschap (setter) in elk gegevensitemelement wordt gebruikt voor deze binding. U kunt deze methode bijvoorbeeld aanroepen met DisplayName en deze eigenschap gebruiken voor het binden van gegevens. De keuzelijst met invoervak bevat dan Openbaar team en Ontwikkelaarsteam als items.

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

Deze methode haalt een eigenschap op van een van de elementen van het gegevensitem . Zie tabel 41 en tabel 42.

Tabel 41. DataItem GetProperty

Parameter Beschrijving
Index De indexwaarde (beginnend met 0) van het gegevensitem waarvoor u een eigenschapswaarde wilt ophalen
propertyName De naam van de eigenschap Setter waarvoor u een waarde wilt ophalen
propertyValue Bevat bij retour de tekenreekswaarde van een eigenschap

Tabel 42. HRESULT GetProperty

HRESULT Beschrijving
S_OK Het pand werd teruggevonden.
E_INVALIDARG De index is voorbij het einde van de matrix.
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)

Deze methode is vergelijkbaar met GetProperty, maar in plaats van één waarde uit een gegevensitem te retourneren, wordt het hele gegevensitem geretourneerd dat is ingepakt in een ISettingsProperties-interface . Zie tabel 43 en tabel 44.

Tabel 43. HRESULT GetNode

Parameter Beschrijving
Index De indexwaarde (beginnend met 0) van het gegevensitem waarvoor u een eigenschapswaarde wilt ophalen
ppNode Bij afsluiten, de ISettingsProperties-interface die het knooppunt DataItem omhult

Tabel 44. HRESULT GetNode-resultaten

HRESULT Beschrijving
S_OK Het knooppunt is opgehaald.
E_INVALIDARG De index is voorbij het einde van de matrix.

IFactoryRegistry-interface

__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);
};
Overzicht

Wanneer u een nieuwe aangepaste pagina maakt, moet u op z'n minst een Page Factory maken, een klasse die IClassFactory implementeert. (U kunt ClassFactoryImpl gebruiken als een basisklasse voor uw fabriek.)

void Register (LPCTSTR-type, IClassFactory *pFactory)

Met deze methode wordt een class factory geregistreerd bij het register. Zie tabel 45.

Tabel 45. IClassFactory ongeldig Registreren

Parameter Beschrijving
Type Een tekenreeks die de fabriek identificeert die u registreert; Over het algemeen moet deze parameter de naam van uw bedrijf in de tekenreeks bevatten om ervoor te zorgen dat deze uniek is
pFactory Een pointer naar uw Class Factory-exemplaar
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)

Deze methode is alleen voor intern gebruik.

BOOL bevat (LPCTSTR-type)

Deze methode is over het algemeen voor intern gebruik. Er wordt gecontroleerd of een klassefabriek voor een type is geregistreerd.

HRESULT GetFactory (LPCTSTR-type, IClassFactory **ppFactory)

Met deze methode kunt u de class factory ophalen. Meestal zou u CreateInstance aanroepen. Als u echter een groot aantal van hetzelfde onderdeel gaat maken, is het efficiënter om de fabriek op te halen en deze vervolgens te vragen de instanties voor u te maken.

HRESULT CreateInstance(LPCTSTR-type, IUnknown **ppInstance)

Met deze methode wordt een nieuw exemplaar van een onderdeel gemaakt, gegeven het type. Gebruik in plaats daarvan de CreateInstance sjabloonmethode, waarmee objecten kunnen worden gemaakt die veilig zijn voor typen.

HRESULT SetContainer(IWizardPageContainer *pContainer)

Deze methode is alleen voor intern gebruik.

HRESULT RegisterService(REFGUID iid, IUnknown *pService)

Services zijn enkelvoudige exemplaren van een onderdeel dat op meerdere plaatsen kan worden gebruikt. U kunt deze methode gebruiken om een service op een pagina te registreren en datzelfde exemplaar vervolgens op te halen van een andere pagina.

HRESULT GetService(REFGUID iid, IUnknown **ppService)

Met deze methode wordt een service opgehaald die eerder is geregistreerd met een aanroep naar RegisterService.

HRESULT SetLanguage(LANGID languageId)

Met deze methode wordt de taal van de UDI-wizard ingesteld op de taalaanduiding die u hebt opgegeven in de parameter languageId .

LANGID GetLanguage()

Deze methode retourneert de waarde van de taal-id die u hebt opgegeven bij de /locale-opdrachtregelparameter voor de UDI-wizard. Met deze methode wordt een van de volgende waarden geretourneerd:

  • De waarde van de taalaanduiding die u hebt gekregen bij de parameter /locale op de opdrachtregel

  • 0, als u de opdrachtregelparameter /locale niet hebt opgegeven

ILogger-interface

__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);
};
Overzicht

De UDI-wizard registreert gegevens in een logboekbestand, zodat u problemen in het veld kunt oplossen. Het is handig om gegevens op uw pagina's te registreren. U kunt vanuit uw pagina een verwijzing naar deze interface verkrijgen met behulp van de methode Logger() van de pagina. Regels in het logboekbestand bevatten een niveau voor fout-, normale, uitgebreide of foutopsporingsberichten.

Opmerking

Foutopsporingsberichten worden niet opgeslagen in het logboekbestand, tenzij ondersteuning voor foutopsporing is ingeschakeld. U kunt ondersteuning voor foutopsporing inschakelen door de volgende regel toe te voegen aan het stijlelement in het .config bestand:

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

Deze methode is alleen voor intern gebruik.

Logboek verplaatsen
HRESULT MoveLog(LPCWSTR logFilename)

Deze methode is alleen voor intern gebruik.

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

Deze methode is alleen voor intern gebruik.

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

Deze methode is alleen voor intern gebruik.

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

Roep deze methode aan om informatie over een fout vast te leggen. Zie tabel 46.

Tabel 46. HRESULT-fout

Parameter Beschrijving
Fout De foutcode die wordt geretourneerd door een oproep (deze code wordt als een nummer weergegeven in de logboekvermelding.)
Component Een tekenreeks die de bron van de fout aangeeft. Dit is meestal de pagina of het onderdeel dat u hebt geschreven
Bericht Het bericht waarin wordt uitgelegd wat de oorzaak is van de fout
Fout2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)

Deze methode lijkt op de methode Fout , maar hiermee kunt u een bericht in twee delen verzenden. Het uiteindelijke bericht bevat 'bericht' en vervolgens 'bericht2' in het uitvoerbestand. Dit is gewoon een gemaksmethode.

Normaal
HRESULT Normal(LPCTSTR component, LPCTSTR message)

Met deze methode wordt een normaal bericht in een logboek vastgelegd. Zie de beschrijving van de foutmethode voor parameters.

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

Met deze methode wordt een normaal bericht in een logboek vastgelegd. Zie de beschrijving van de methode Error2 voor parameters.

Uitgebreid
HRESULT Verbose(LPCTSTR component, LPCTSTR message)

Bij deze methode wordt een uitgebreid bericht in een logboek vastgelegd. Zie de beschrijving van de foutmethode voor parameters.

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

Bij deze methode wordt een uitgebreid bericht in een logboek vastgelegd. Zie de beschrijving van de methode Error2 voor parameters.

Fouten opsporen
HRESULT Debug(LPCWSTR component, LPCWSTR message)

Bij deze methode wordt een foutopsporingsbericht in een logboek vastgelegd. Zie de beschrijving van de foutmethode voor parameters. Foutopsporingsberichten worden alleen in het bestand opgeslagen als ze zijn ingeschakeld. Zie de sectie Overzicht voor meer informatie.

EnableDebug
HRESULT EnableDebug(BOOL debug)

Deze methode is alleen voor intern gebruik.

Sluiten
HRESULT Close(void)

Deze methode is alleen voor intern gebruik.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)

Met deze methode wordt de naam van het logboekbestand opgehaald.

IOrientation Interface

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

Deze interface is alleen voor intern gebruik.

ISettings Interface

__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);
};

Deze interface is alleen voor intern gebruik.

ISettingsProperties Interface

__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);
};
Overzicht

Deze interface biedt toegang tot paginagegevens. Als u naar het hoogste niveau met paginagegevens wilt gaan, gebruikt u de methode Instellingen() van de pagina.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

Met deze methode kunt u de waarden ophalen van kenmerken op het hoofdknooppunt, wat het knooppunt Pagina is wanneer u de methode Settings() van de pagina gebruikt.

IStringProperties * Properties()

Deze methode biedt toegang tot de eigenschapswaarden van de setter onder het hoofdknooppunt. Voor een pagina zijn dit de eigenschappen op het hoogste niveau.

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

Roep deze methode aan als u rechtstreeks een lijst met XML-knooppunten wilt ophalen met behulp van een XPath-expressie. Het is beter om indien mogelijk een van de andere methoden te gebruiken. Gebruik deze methode alleen als u geen andere manier bij knooppunten kunt bereiken.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

Roep deze methode aan als u één XML-knooppunt rechtstreeks wilt ophalen met behulp van een XPath-expressie. Het is beter om indien mogelijk een van de andere methoden te gebruiken. Gebruik deze methode alleen als u op geen enkele andere manier bij een knooppunt kunt komen.

HRESULT GetDataNode(LPCTSTR-naam, ISettingsProperties **ppNode)

Haal een gegevenselement op op basis van het naamkenmerk van dat element.

HRESULT GetDataNodes(IDataNodes **ppNodes)

Met deze methode wordt een lijst met gegevensitemelementen onder het huidige knooppunt opgehaald. Roep vanaf het paginaniveau GetDataNode aan om een ISettingseigenschap-interface voor de gegevens op te halen. Roep vervolgens in dat geval GetDataNodes aan om de lijst met records op te halen. Gegeven deze 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)

Deze methode biedt een snelle manier om bij de set DataItem-knooppunten onder een specifiek gegevensknooppunt te komen. Met behulp van de XML uit het GetDataNodes-voorbeeld doet de volgende code precies hetzelfde als de vier regels code in het voorbeeld onder GetDataNodes , maar met foutcontrole:

ISimpleStringProperties Interface

ISimpleStringProperties Interface

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

Deze interface is op zichzelf mogelijk niet nuttig. Het wordt echter geïmplementeerd door het onderdeel ID_SimpleStringProperties , dat ook de interface IStringProperties implementeert. U kunt dit onderdeel gebruiken in gevallen waarin u een set eigenschappen moet doorgeven aan een ander onderdeel, zoals een taak, maar u waarden programmatisch wilt toevoegen in plaats van waarden uit XML te gebruiken. Hier volgt een voorbeeld van hoe u deze interface zou gebruiken:

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);
};

Deze interface biedt eenvoudige toegang tot een set setterelementen die afkomstig zijn van XML. Deze interface is beschikbaar voor de eigenschappen van een pagina met behulp van Settings()->Properties().

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

Met deze methode wordt één eigenschapswaarde opgehaald. Zie tabel 47 en tabel 48.

Tabel 47. IHRESULT Get Property Value

Parameter Beschrijving
propertyName De naam van de eigenschap die u wilt lezen
pPropValue Bevat bij afsluiten de eigenschapswaarde als een tekenreeks (deze waarde is nullptr als een dergelijke eigenschap ontbreekt.)

Tabel 48. IHRESULT Resultaten van de waarde van onroerend goed ophalen

HRESULT Beschrijving
S_OK De waarde van de eigenschap wordt opgehaald.
E_INVALIDARG Er is geen eigenschap met de naam die u hebt opgegeven.

ITaskManager-interface

__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);
}

Deze interface wordt geïmplementeerd door het onderdeel TaskManager (ID_TaskManager in ITaskManager.h), het onderdeel dat taken uitvoert op de preflight-pagina. U kunt de preflight-pagina rechtstreeks gebruiken, wat u meestal doet, of uw eigen pagina maken, waarbij u dit onderdeel het meeste werk laat doen.

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

U moet deze methode aanroepen voordat u een andere methode aanroept. Hiermee initialiseert u het onderdeel Taakbeheer . Zie tabel 49.

Tabel 49. HRESULT Init

Parameter Beschrijving
pPageView Hiermee krijgt u toegang tot de pagina waarop taken worden uitgevoerd (Deze pagina moet een specifieke set besturingselementen hebben, die worden beschreven in de volgende parameters.)
idListView De besturingselement-id van een ListView-besturingselement waarmee de lijst met taken en de status van die taken wordt weergegeven
idMessage De besturings-id van een tekstvak dat wordt gebruikt om een bericht weer te geven voor de taak die u selecteert
idRetryButton De besturingselement-id van een knop die u kunt selecteren om de taken opnieuw uit te voeren
pPageInfo Een wrapper rond de XML van de pagina (TaskManager laadt de set taken die vanuit deze XML moeten worden uitgevoerd.)
pCallback Kan null zijn (als deze parameter niet null is, roept TaskManager de methode Started aan wanneer een taak wordt gestart en de methode Finished voor elke taak die wordt voltooid.)
HRESULT SetFailMessage(LPCWSTR-bericht)

Met deze methode stelt u het bericht in dat wordt weergegeven als een of meer taken mislukken.

HRESULT Start(void)

Met deze methode start u alle taken. Elke taak wordt gestart in een afzonderlijke thread.

HRESULT GetTaskMessage(size_t index, LPBSTR-bericht)

Deze methode is alleen voor intern gebruik. Hiermee wordt het huidige bericht voor een taak opgehaald op basis van de index in de takenlijst.

HRESULT GetResultType)(size_t index, LPBSTR-type)

Met deze methode wordt het huidige 'type' voor een taak opgehaald. Tabel 50 geeft een overzicht van de beschikbare typen.

Tabel 50. HRESULT GetResultType

Type Beschrijving
0 Vertegenwoordigt een taak die is geslaagd
1 Vertegenwoordigt taken die een waarschuwing hebben geretourneerd
-1 Vertegenwoordigt een mislukte taak

Het type wordt opgehaald door naar de afsluit- of foutcode van de taak te kijken en een overeenkomst te zoeken in het <XML-element Afsluitcodes> van de taak.

HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR-waarde)

Deze methode wordt gebruikt door de voortgangspagina's en Preflight-pagina's om de eigenschap BitmapFilename setter op te halen, zodat er een afbeelding kan worden weergegeven naast het bericht voor de taak die u markeert. U kunt dus een aangepaste setter toevoegen aan de XML van de taak en deze met deze methode ophalen.

int GetSelectedIndex(void)

Deze methode haalt de index van de momenteel geselecteerde taak op, wat handig is als u aanvullende informatie over de taak wilt ophalen (zie GetProperty methode) om weer te geven voor de geselecteerde taak. Op de voortgangspagina's en Preflight-pagina's wordt deze methode gebruikt om een afbeelding voor de geselecteerde taak weer te geven.

HRESULT Wait(DWORD, waitMilliseconds)

Deze methode helpt vooral bij unit tests, zodat de test ervoor kan zorgen dat taken klaar zijn voordat de unit test wordt afgesloten. Normaal gesproken zou u deze methode niet noemen. De opdracht keert terug wanneer alle taken zijn uitgevoerd of wanneer de wachttijd is verstreken.

size_t FailedCount(void)

Met deze methode wordt het aantal taken geretourneerd dat momenteel als mislukt is gemarkeerd.

size_t WarningCount(void)

Met deze methode wordt het aantal taken geretourneerd dat op dat moment als waarschuwing is gemarkeerd.

size_t SucceedCount(void)

Met deze methode wordt het aantal taken geretourneerd dat op dit moment als voltooid is gemarkeerd.

size_t RunningCount(void)

Met deze methode wordt het aantal taken geretourneerd dat momenteel wordt uitgevoerd.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

Roep deze methode aan vanaf OnCommonControlEvent van uw pagina, zodat de Taakbeheer gebeurtenissen kan verwerken die het nodig heeft.

void OnControlEvent(WORD eventId, WORD controlId)

Roep deze methode aan vanuit het OnControlEvent van uw pagina, zodat de Taakbeheer gebeurtenissen kan verwerken die het nodig heeft.

void EnableButtons(BOOL enable)

Deze methode is alleen voor intern gebruik.

IWizardComponent Interface

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

Normaal gesproken implementeert u deze interface niet rechtstreeks, maar via de sjabloonklasse WizardComponent . Als uw component deze interface implementeert en u een class factory bij het register hebt geregistreerd, ontvangt uw component een pointer naar het IWizardPageContainer-exemplaar wanneer dit wordt gemaakt. Zo krijgt u bijvoorbeeld toegang tot de logger of het register voor het maken van andere onderdelen die uw onderdeel mogelijk nodig heeft.

IWizardDialogController-interface

__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);
};

Deze interface is alleen voor intern gebruik.

IWizardDialogView-interface

__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);
};

Deze interface is alleen voor intern gebruik.

IWizardPage Interface

__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);
};
Overzicht

Deze interface wordt geïmplementeerd door WizardPageImpl, dus u hoeft dit meestal niet zelf te implementeren. De wizard roept al deze methoden voor u aan bij interactie met uw aangepaste pagina's.

IWizardPageContainer Interface

__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);
};
Overzicht

Deze interface is beschikbaar voor uw pagina via de Container-methode (geïmplementeerd door WizardPageImpl) en geeft u toegang tot verschillende services van de wizard.

ILogger * Logger (void)

Gebruik deze methode om berichten naar het logboekbestand te schrijven, bijvoorbeeld:

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

Deze methode biedt toegang tot 'geheugenvariabelen'. Dit zijn eigenschappen die alleen in het geheugen aanwezig zijn wanneer de wizard UDI wordt uitgevoerd. Deze eigenschappen zijn beschikbaar voor andere pagina's, hetzij in code, hetzij in de XML met behulp van de syntaxis $memoryVarName$ .

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

Met deze methode kunt u een nieuw exemplaar maken van elk onderdeel dat is geregistreerd. Het is echter beter om de sjabloonfunctie CreateInstance te gebruiken, omdat deze sterk getypeerd is.

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

Met deze methode kunt u een geregistreerde service ophalen. Het is echter beter om de GetService-sjabloonfunctie aan te roepen, die sterk wordt getypeerd (in plaats van IUnknown te gebruiken).

HRESULT ReplaceVariables(LPCTSTR-bron, [uit] LPBSTR pDest)

Deze methode werkt met variabelen binnen tekenreekswaarden. Het ondersteunt de notaties die worden weergegeven in tabel 51 en tabel 52.

Tabel 51. HRESULT ReplaceVariables

Formaat Beschrijving
$Name$ Hiermee wordt de waarde van een geheugenvariabele vervangen door deze naam (als er geen geheugenvariabele met de naam is, wordt het 'token' verwijderd.)
%Naam% Een taakreeksvariabele of een omgevingsvariabele. De volgorde is als volgt:

1. Gebruik de waarde van een taakreeksvariabele, indien aanwezig.
2. Gebruik de waarde van een omgevingsvariabele, indien aanwezig.
3. Anders verwijdert u deze tekst uit de tekenreeks.

Tabel 52. HRESULT-parameter

Parameter Beschrijving
Source De invoertekenreeks, die elke combinatie van $ and-variabelen % of helemaal geen variabelen kan bevatten
pDest Bevat een nieuwe tekenreeks waarvan alle tokens zijn vervangen volgens tabel 51
HRESULT GotoPage(LPCTSTR pageName)

Deze methode is niet volledig getest. Het idee is dat u rechtstreeks naar een specifieke pagina kunt gaan op basis van de naam van de pagina zoals gedefinieerd in het .config XML-bestand. Als u deze methode aanroept, wordt de OnNextSelected op uw pagina overgeslagen. Bovendien is het gedrag van deze methode aan verandering onderhevig, dus gebruik het op eigen risico.

int ShowMessageBox(LPCTSTR-bericht, LPCTSTR lpCaption, UINT uType)

Hiermee wordt een berichtvak weergegeven met de tekst en het onderschrift die u opgeeft. De parameter uType is elke waarde die u kunt opgeven voor de functie Berichtvak Win32.

BOOL InPreview(void)

Deze methode retourneert TRUE als u de wizard in de 'preview'-modus hebt gestart door de schakeloptie /preview op te geven. In de voorbeeldmodus is de knop Volgende nooit uitgeschakeld. Met deze methode kunt u bijvoorbeeld in de voorbeeldmodus code overslaan die problemen kan veroorzaken wanneer u geen geldige gegevens op de pagina hebt.

HWND GetHwnd(void)

Met deze methode wordt de HWND voor het hoofddialoogvenster geretourneerd. Gebruik deze methode met zorg. Over het algemeen is de UDI Wizard-applicatieprogrammeerinterface zo ontworpen dat u nooit rechtstreeks met raamgrepen werkt.

IWizardPageView-interface

__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);
};

Deze interface is beschikbaar voor de code op de pagina via de weergavemethode (geïmplementeerd door WizardPageImpl).

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

De UDI-wizard gebruikt wrappers, wat in feite façades zijn voor interactie met de besturingselementen op uw pagina. Het gebruik van deze gevels in plaats van de daadwerkelijke bedieningselementen maakt het veel gemakkelijker om tests voor uw pagina te schrijven, omdat u nepgevels van uw tests kunt leveren.

In plaats van deze methode rechtstreeks te gebruiken, kunt u beter de sjabloonmethode GetControlWrapper gebruiken, die sterk wordt getypeerd, bijvoorbeeld:

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

Met deze methode wordt de venstergreep voor de pagina geretourneerd. In het algemeen hebt u geen toegang nodig tot deze venstergreep.

HWND GetControl(int itemId)

U kunt deze methode aanroepen om de venstergreep voor een besturingselement op de pagina te verkrijgen. (Het is beter om de sjabloonfunctie GetControlWrapper aan te roepen).

HRESULT Show (void)

Deze methode is alleen voor intern gebruik.

HRESULT verbergen(void)

Deze methode is alleen voor intern gebruik.

HRESULT Focus(int itemId)

Stel de invoerfocus in op een specifiek besturingselement.

IWizardPage * Page(void)

Deze methode is alleen voor intern gebruik.

IFormController * Form(void)

Deze methode is alleen voor intern gebruik.

HRESULT FocusWizardButton(WizardButtons-knop)

Hiermee stelt u de focus in op een van de knoppen van de wizard. WizardButtons heeft twee waarden: TerugKnop en VolgendeKnop.

HRESULT SetEnable(WizardButtons button, BOOL enable)

Vraag of een van de knoppen van de wizard wordt in- of uitgeschakeld. De knop komt mogelijk niet overeen met de status die u hebt aangevraagd. Als u de wizard UDI bijvoorbeeld met de schakeloptie /preview uitvoert, zijn de knoppen altijd ingeschakeld. WizardButtons heeft twee waarden: TerugKnop en VolgendeKnop.

void ShowWarningMessage(LPCTSTR-bericht)

Bij deze methode wordt onder aan het gebied pagina-inhoud een waarschuwing weergegeven. Dit bericht kan elke gewenste tekst zijn.

void HideWarningMessage(void)

Een waarschuwingsbericht verbergen dat u hebt weergegeven bij een aanroep van ShowWarningMessage.

IXmlDocument Interface

__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);
};
Overzicht

Deze interface wordt geïmplementeerd door de ID_IXmlDocument component, een façade die is ontworpen om het gemakkelijker te maken om met XML-documenten in C++ te werken.

HRESULT Load(LPCTSTR-bestandsnaam)

Bij deze methode wordt een XML-document geladen vanuit een extern bestand. Er wordt S_OK geretourneerd als het bestand zonder fouten is geladen of S_FALSE als er een fout is opgetreden. Als er een fout optreedt, kunt u het foutbericht krijgen door GetParseErrorMessage aan te roepen.

HRESULT LoadXml(LPCTSTR xml)

Bij deze methode wordt een XML-document geladen vanuit een tekenreeks in plaats van een extern bestand. Behalve de bron voor het lezen van XML is het gedrag hetzelfde als bij de laadmethode .

HRESULT Save(LPCWSTR-bestandsnaam)

Bij deze methode wordt het XML-document in het geheugen opgeslagen in een extern bestand.

HRESULT GetParseErrorMessage(LPBSTR pMessage)

Deze methode retourneert een nieuwe tekenreeks met het foutbericht van het laden van het XML-document, indien aanwezig. Het retourneert altijd S_OK.

HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)

Met deze methode kunt u een XPath-expressie gebruiken om een verzameling knooppunten op te halen uit het document. Het retourneert altijd S_OK.

HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)

Met deze methode kunt u een XPath-expressie gebruiken om één knooppunt op te halen uit het document. Het retourneert altijd S_OK.

HRESULT AddSchema(LPCTSTR-bestandsnaam, LPCTSTR ns)

Met deze methode wordt de naam toegevoegd van een extern schemabestand dat wordt gebruikt om het schema van het XML-document te valideren wanneer dit wordt geladen. De opgegeven naamruimte is de tekenreeks die u kunt gebruiken in XPath-query's, hoewel dit nog niet is getest.

HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR-naam, LPCWSTR-waarde)

Met deze methode wordt een nieuw kenmerk toegevoegd aan een bestaand knooppunt in het XML-document. Zie tabel 53.

Tabel 53. HRESULT AddAttribute

Parameter Beschrijving
pNode Het knooppunt waaraan u een kenmerk wilt toevoegen
Naam Naam van het nieuwe kenmerk
Value De waarde voor het nieuwe kenmerk
HRESULT CreateNode(DOMNodeType-type, LPCWSTR-naam, LPCWSTR ns, IXMLDOMNode **ppNode)

Roep deze methode aan om een nieuw knooppunt te maken:

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

Wanneer u een nieuw knooppunt hebt gemaakt, kunt u dit als een onderliggend knooppunt toevoegen aan een ander knooppunt door de methode appendChild van de ouder aan te roepen.

Helperfuncties

CreateInstance Template, functie

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

Deze functie is gedefinieerd in IWizardPageContainer.h en biedt een typeveilige wrapper over de IWizardPageContainer-CreateInstance> methode, bijvoorbeeld:

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

Deze code maakt een nieuwe ID_Directory component om de IDirectory-interface van dat onderdeel op te halen.

GetService-sjabloon, functie

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

Deze functie is gedefinieerd in IWizardPageContainer.h en biedt een typeveilige wrapper over de IWizardPageContainer-GetService-methode>, bijvoorbeeld:

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

Met deze functie wordt het taakreeksonderdeel opgehaald, dat de ITSVariableBag-interface ondersteunt. (Voor ITSVariableBag kunt u in plaats daarvan de TSVariables-methode van de klasse WizardPageImpl gebruiken.)

UDI Wizard Designer Configuration File Schema Reference

Dit bestand wordt gebruikt door de UDI Wizard Designer. Er wordt een apart bestand gemaakt voor elk aangepast .dll bestand, dat aangepaste editors voor wizardpagina's, aangepaste taken of aangepaste validators kan bevatten. Het bestand moet eindigen op .config en zich bevinden in de map installation_folder\Bin\Config (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd).

Tabel 54 bevat de elementen in het configuratiebestand UDI Wizard Designer en hun beschrijvingen. Het element DesignerConfig is het hoofdknooppunt voor deze verwijzing.

Tabel 54. Elementen in het configuratiebestand UDI Wizard Designer en hun beschrijvingen

Elementnaam Beschrijving
DesignerConfig Hiermee geeft u de hoofdmap voor alle andere elementen op
Designer-toewijzingen Hiermee groepeert u een set pagina-elementen
Pagina Hiermee wordt een editor voor een wizardpagina opgegeven die moet worden geladen in de UDI Wizard Designer, die wordt gebruikt om de configuratie-instellingen voor een wizardpagina te bewerken
Param Specificeert een parameter die wordt doorgegeven aan de bovenliggende taak of het validatie-element en die overeenkomt met een setterelement in het configuratiebestand van de UDI-wizard Opmerking: De kenmerken voor dit element verschillen als het bovenliggende element het taak - of validatie-element is.
Taak Hiermee geeft u een taak in de taakbibliotheek op
Taakitem Hiermee geeft u een groep parameters op die aan de taak worden doorgegeven
TaskLibrary groepeert een set taakelementen
Validator Hiermee geeft u een validator binnen de validatiebibliotheek op
Validator-bibliotheek groepeert een set validatie-elementen

DesignerConfig

Dit element geeft de hoofdletter voor alle andere elementen aan.

Informatie over elementen

Tabel 55 bevat informatie over het element DesignerConfig .

Tabel 55. Informatie over DesignerConfig Element

Kenmerk Value
Aantal exemplaren Eén: Dit element is vereist.
Bovenliggende elementen Geen
Inhoud DesignerMappings, TaskLibrary, ValidatorLibrary
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

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

Designer-toewijzingen

Met dit element wordt een set pagina-elementen gegroepeerd.

Informatie over elementen

Tabel 56 bevat informatie over het element DesignerMappings.

Tabel 56. Informatie over DesignerMappings-elementen

Kenmerk Value
Aantal exemplaren Nul of één binnen het element DesignerConfig (Dit element is optioneel als er geen aangepaste wizardpagina in de DLL aanwezig is die overeenkomt met dit configuratiebestand van de UDI-wizard Designer.)
Bovenliggende elementen DesignerConfig
Inhoud Pagina
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld
<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

Dit element specificeert een wizardpagina-editor die moet worden geladen in de UDI Wizard Designer, die op zijn beurt wordt gebruikt om de configuratie-instellingen voor een wizardpagina te bewerken.

Informatie over elementen

Tabel 57 bevat informatie over het pagina-element .

Tabel 57. Informatie over pagina-elementen

Kenmerk Value
Aantal exemplaren Een of meer voor elke wizardpagina die is gedefinieerd in het element DesignerMappings
Bovenliggende elementen Designer-toewijzingen
Inhoud Elke juist opgemaakte XML-inhoud
Kenmerken van elementen

Tabel 58 bevat de kenmerken van het element Page en een beschrijving voor elk element.

Tabel 58. Kenmerken en bijbehorende waarden voor het pagina-element

Kenmerk Beschrijving
Beschrijving Tekst met informatie over de parameter, die wordt weergegeven in UDI Wizard Designer
DesignerAssembly Hiermee geeft u de naam op van het .dll-bestand dat is gekoppeld aan de pagina-editor van de wizard (Het .dll-bestand moet aanwezig zijn in de map installation_folder\Bin (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd.)
DesignerType Hiermee wordt de naam opgegeven van de editor voor de wizardpagina in het .dll bestand dat is opgegeven in het kenmerk DesignerAssembly (dit is het Microsoft .NET-type voor de editor voor de wizardpagina-editor, met de volledige naamruimte van Microsoft .NET.)
DisplayName Hiermee geeft u de gebruiksvriendelijke naam van de pagina-editor op, die wordt weergegeven in UDI Wizard Designer
DLL Hiermee geeft u de naam op van het .dll bestand dat is gekoppeld aan de wizardpagina (Het .dll bestand moet aanwezig zijn in de map installation_folder\Templates\Distribution\Tools\platform (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie.) Opmerking: Zorg ervoor dat de DLL-processorarchitectuur overeenkomt met de geïnstalleerde MDT-processorarchitectuur. Als u bijvoorbeeld een 32-bits versie van MDT hebt geïnstalleerd, moet u ervoor zorgen dat u een 32-bits DLL gebruikt voor de wizardpagina.
Afbeelding Hiermee geeft u de naam op van een afbeelding van de pagina in PNG-indeling (Portable Network Graphics) (het .png bestand moet aanwezig zijn in de map installation_folder\Bin\Images (waarin installation_folder de map is waarin u MDT hebt geïnstalleerd.)
Type Hiermee geeft u de pagina-editor van de wizard op en moet overeenkomen met de naam die werd gebruikt toen de aangepaste pagina werd geregistreerd
Opmerkingen

De UDI Wizard Designer gebruikt het element Pagina, net als een sjabloon, om de eerste XML voor een nieuwe wizard te maken. De UDI Wizard Designer voert schemavalidatie uit om te controleren of de pagina en de onderliggende elementen een geldige indeling hebben. Dit element zorgt voor een koppeling tussen het paginatype van de UDI-wizard en de gegevens die de UDI-wizard Designer nodig heeft om dit soort pagina's te bewerken en te maken met een aangepaste pagina-editor.

Voorbeeld

Geen.

Param

Dit element specificeert een parameter die wordt doorgegeven aan de bovenliggende taak of het validatie-element en komt overeen met een Setter-element in het configuratiebestand van de UDI-wizard.

Opmerking

De kenmerken voor dit element verschillen als het bovenliggende element het taak- of validatorelement is.

Informatie over elementen

Tabel 59 bevat informatie over het Param-element .

Tabel 59. Informatie over paramelement

Kenmerk Value
Aantal exemplaren Een of meer voor elk bovenliggend element TaskItem of Validator
Bovenliggende elementen TaskItem, Validator
Inhoud Elke juist opgemaakte XML-inhoud
Kenmerken van elementen

Tabel 60 geeft een overzicht van de kenmerken van het Param-element en een beschrijving van elke element.

Tabel 60. Kenmerken en bijbehorende waarden voor het paramelement

Kenmerk Beschrijving
Beschrijving Tekst met informatie over de parameter, die wordt weergegeven in de UDI-wizard Designer Opmerking: Dit kenmerk geldt alleen voor het validatie-element.
DisplayName Hiermee geeft u de gebruiksvriendelijke naam op van de validatorparameter, die wordt weergegeven voor de juiste UDI-wizardpagina in de UDI Wizard Designer (deze naam is meestal beschrijvender dan het naamkenmerk.) Opmerking: Dit kenmerk is alleen geldig voor het Validator-element.
Naam Hiermee wordt de naam opgegeven van de parameter die wordt doorgegeven aan de taak of validator, afhankelijk van het bovenliggende element (dit kenmerk wordt het kenmerk Eigenschap in een Setter-element in het configuratiebestand van de UDI-wizard.) Opmerking: Deze parameter wordt gebruikt voor zowel TaskItem - als Validator-bovenliggende elementen.
Opmerkingen

Geen.

Voorbeeld

Geen.

Taak

Met dit element wordt een taak in de taakbibliotheek aangegeven.

Informatie over elementen

Tabel 61 bevat informatie over het taakelement.

Tabel 61. Informatie over taakelementen

Kenmerk Value
Aantal exemplaren Een of meer elementen in het TaskLibrary-element (Dit element is niet optioneel als het TaskLibrary-element is opgegeven.)
Bovenliggende elementen TaskLibrary
Inhoud Taakitem
Kenmerken van elementen

Tabel 62 bevat een overzicht van de kenmerken van het element Taak en een beschrijving hiervan.

Tabel 62. Kenmerken en bijbehorende waarden voor het taakelement

Kenmerk Beschrijving
Beschrijving Tekst met informatie over de taak, die wordt weergegeven in UDI Wizard Designer
DLL Hiermee geeft u de naam op van het .dll bestand dat aan de taak is gekoppeld (het .dll bestand moet aanwezig zijn in de map installation_folder\Templates\Distribution\Tools\platform (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en het platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie.)
Naam Hiermee geeft u de naam van de taak op, die wordt weergegeven op de juiste pagina van de UDI-wizard en in de UDI-wizard Designer
Type Hiermee geeft u het taaktype op, dat wordt geregistreerd in het fabrieksregister en wordt gebruikt om een bepaalde taak in een .dll bestand aan te roepen
Opmerkingen

Geen.

Voorbeeld

Geen.

Taakitem

Dit element specificeert een groep parameters die aan de taak worden doorgegeven.

Informatie over elementen

Tabel 63 bevat informatie over het element Taakitem .

Tabel 63. Informatie taakitemelement

Kenmerk Value
Aantal exemplaren Een of meer voor elk taakelement
Bovenliggende elementen Taak
Inhoud Param
Kenmerken van elementen

Tabel 64 bevat de kenmerken van het element TaskItem en een beschrijving hiervan.

Tabel 64. Kenmerk en bijbehorende waarden voor het element TaskItem

Kenmerk Beschrijving
Type Hiermee geeft u het elementtype op dat wordt gemaakt in het configuratiebestand van de UDI-wizard. Er wordt een XML-element gemaakt dat overeenkomt met de waarde van dit kenmerk. Als de waarde voor dit kenmerk bijvoorbeeld Bestand is, wordt er een bestandselement gemaakt in het configuratiebestand van de UDI-wizard.

Momenteel worden alleen de volgende waarden ondersteund:

- Bestand, waarvoor twee ondergeschikte Param-elementen zijn vereist (één onderliggend Param-element waarvoor het kenmerk Name is ingesteld op Source en een ander Sub Param-element waarvoor het kenmerk Name is ingesteld op Dest)
- Setter, waarvoor één onderliggend Param-element is vereist
Opmerkingen

Geen.

Voorbeeld

Geen.

TaskLibrary

Met dit element wordt een set taakelementen gegroepeerd.

Informatie over elementen

Tabel 65 bevat informatie over het element TaskLibrary .

Tabel 65. Informatie over TaskLibrary-element

Kenmerk Value
Aantal exemplaren Nul of één binnen het element DesignerConfig (Dit element is optioneel als er geen aangepaste taken in de DLL zijn die overeenkomen met dit configuratiebestand van de UDI-wizard Designer.)
Bovenliggende elementen DesignerConfig
Inhoud Taak
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

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

Validator

Dit element specificeert een validator binnen de validatorbibliotheek.

Informatie over elementen

Tabel 66 bevat informatie over het Validator-element .

Tabel 66. Informatie over validatorelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen het ValidatorLibrary-element (Dit element is optioneel.)
Bovenliggende elementen Validator-bibliotheek
Inhoud Param
Kenmerken van elementen

Tabel 67 geeft een overzicht van de kenmerken van het Validator-element en geeft een beschrijving van elk.

Tabel 67. Kenmerken en bijbehorende waarden voor het validatorelement

Kenmerk Beschrijving
Beschrijving Tekst met informatie over de validator, die wordt weergegeven in UDI Wizard Designer
DisplayName Hiermee geeft u de gebruikersvriendelijke naam op van de validator die wordt weergegeven in de UDI Wizard Designer (deze naam is meestal beschrijvender dan het naamkenmerk.)
DLL Hiermee geeft u de naam op van het .dll bestand dat is gekoppeld aan de validator (het .dll bestand moet aanwezig zijn in de map installation_folder\Templates\Distribution\Tools\platform (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd en het platformx86 is voor de 32-bits versie of x64 voor de 64-bits versie.)
Naam Hiermee geeft u de naam van de validator op, die wordt weergegeven op de juiste pagina van de UDI-wizard en in de UDI-wizard Designer
Type Specificeert het type validator, dat wordt geregistreerd met de registerfactor en wordt gebruikt om een specifieke validator in een .dll bestand aan te roepen
Opmerkingen

Geen.

Voorbeeld

Geen.

Validator-bibliotheek

Dit element groepeert een set Validator-elementen .

Informatie over elementen

Tabel 68 geeft informatie over het ValidatorLibrary-element .

Tabel 68. Informatie over ValidatorLibrary-element

Kenmerk Value
Aantal exemplaren Nul of één in het element DesignerConfig (Dit element is optioneel als er geen aangepaste validators in de DLL zijn die overeenkomen met dit configuratiebestand van de UDI-wizard Designer.)
Bovenliggende elementen DesignerConfig
Inhoud Validator
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Vereist tekst in een veld" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Staat niet toe dat bepaalde tekens in een veld staan" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Moet een vooraf gedefinieerd patroon volgen" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Vereisen dat de inhoud overeenkomt met een reguliere expressie" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>

Naslaginformatie UDI Wizard Designer

Besturingselementen

De besturingselementen die worden gebruikt om aangepaste editors voor tovenaarspagina's te maken voor gebruik in de UDI Wizard Designer zijn WPF UserControl-exemplaren. Tabel 69 bevat de besturingselementen waarmee u aangepaste editors voor wizardpagina's kunt maken.

Tabel 69. Besturingselementen die kunnen worden gebruikt om aangepaste editors voor wizardpagina's te maken

Besturingselement Beschrijving
CollectionTControl Dit besturingselement wordt gebruikt om gegevens te bewerken die zijn opgeslagen in het element Gegevens binnen een pagina-element .
FieldElementControl Dit besturingselement wordt gebruikt om een veld te bewerken, dat meestal is gekoppeld aan een tekstvak op de XAML-pagina.
SetterControl Dit besturingselement wordt gebruikt om de waarde van een setterelement in het configuratiebestand van de UDI-wizard te wijzigen.

CollectionTControl

Dit besturingselement biedt tal van mogelijkheden voor het bewerken van gegevens. De beste manier om te leren hoe u dit besturingselement gebruikt, is door het voorbeeld te bekijken, waarin u kunt zien hoe gegevens onder het gegevenselement van een pagina kunnen worden bewerkt. In het voorbeeld ziet u met name hoe u items in dit besturingselement toevoegt, verwijdert en bewerkt.

FieldElementControl

Gebruik dit besturingselement om een veld te bewerken, dat meestal is gekoppeld aan een tekstvak op de XAML-pagina.

Voorbeeld

Het volgende fragment uit een XAML-bestand illustreert het gebruik van FieldElementControl om de standaardwaarde voor een veld op een wizardpagina te configureren met behulp van een onderliggend tekstvakbesturingselement :

<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>
Eigenschappen
Veldgegevens

Deze tekenreekseigenschap bevat gegevens over het verbinden van FieldElementControl met de onderliggende XML van het veld. De verbinding wordt gemaakt met een eigenschap van de interface van de pagina-editor. Het volgende fragment uit een XAML-bestand illustreert het gebruik van de eigenschap FieldData :

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

In dit fragment wordt de interface van de pagina-editor ControlRoot genoemd en opgegeven in de parameter ElementName . De binding wordt uitgevoerd met de eigenschap DataContext.Location van de ControlRoot-pagina-editorinterface . DataContext is een weergavemodel dat verwijst naar het element Pagina in het configuratiebestand van de UDI-wizard. Locatie is een eigenschap van de weergave die een lijst met de mogelijke locaties retourneert. Deze eigenschap wordt gedefinieerd door een element Gegevens in het configuratiebestand van de UDI-wizard. Elke locatie wordt gedefinieerd door een DataItem-element in het configuratiebestand van de UDI-wizard.

HeaderText

Met deze tekenreekseigenschap kunt u een koptekst opgeven voor het besturingselement FieldElementControl . De koptekst fungeert als titel voor het besturingselement en is opgemaakt als vetgedrukte, oranje tekst direct boven het besturingselement.

Instructietekst

Met deze tekeneigenschap kunt u informatieve tekst opgeven voor het besturingselement FieldElementControl . De tekst wordt meestal gebruikt om een korte beschrijving van het veld te geven en uit te leggen wat de invloed van de configuratie van het veld is op de bijbehorende wizardpagina.

HideEnableButton

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de knop die van ontgrendeld en vergrendeld (ingeschakeld of uitgeschakeld) verandert. Indien ingesteld op:

  • Klopt, de knop is niet zichtbaar

  • Onwaar, de knop is zichtbaar (Dit is de standaardwaarde.)

HideDefaultTab

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de sectie met het besturingselement dat wordt gebruikt om de standaardwaarde in te stellen. Hoewel de eigenschap naar een tabblad verwijst, is er geen tabblad in het FieldElementControl, maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Toegegeven, de sectie is niet zichtbaar

  • Onwaar, de sectie is zichtbaar (dit is de standaardwaarde.)

Hide Border

Met deze Booleaanse eigenschap kunt u de zichtbaarheid van de rand rond het veldbesturingselement bepalen. Indien ingesteld op:

  • De rand is weliswaar niet zichtbaar

  • Onwaar, de rand is zichtbaar (dit is de standaardwaarde.)

Afbeelding verbergen

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de afbeelding die door de eigenschap FieldImageSource wordt geconfigureerd. Indien ingesteld op:

  • Toegegeven, de afbeelding is niet zichtbaar

  • Onwaar, de afbeelding is zichtbaar (dit is de standaardwaarde.)

HideValidatieTab

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de sectie waar de lijst met validators wordt beheerd. Hoewel de eigenschap naar een tabblad verwijst, is er geen tabblad in het FieldElementControl, maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Toegegeven, de sectie is niet zichtbaar

  • Onwaar, de sectie is zichtbaar (dit is de standaardwaarde.)

Tabblad SamenvattingVerbergen

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de sectie waarin u het onderschrift van het veldoverzicht configureert. Het onderschrift en de bijbehorende waarde van het veld worden weergegeven op een wizardpagina Samenvattingspagina in een fasestroom. Hoewel de eigenschap naar een tabblad verwijst, is er geen tabblad in het FieldElementControl, maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Toegegeven, de sectie is niet zichtbaar

  • Onwaar, de sectie is zichtbaar (dit is de standaardwaarde.)

HideTaskSequenceTab

Met deze Booleaanse eigenschap kunt u de zichtbaarheid bepalen van de sectie waarin u de takenreeksvariabele configureert die overeenkomt met het veld. Hoewel de eigenschap naar een tabblad verwijst, is er geen tabblad in het FieldElementControl, maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Toegegeven, de sectie is niet zichtbaar

  • Onwaar, de sectie is zichtbaar (dit is de standaardwaarde.)

SetterControl

Gebruik dit besturingselement om de waarde van een Setter-element in het configuratiebestand van de UDI-wizard te wijzigen. Dit besturingselement bevat een onderliggend besturingselement waarmee de waarde van het setterelement kan worden gewijzigd.

Voorbeeld

Het volgende fragment uit een .xaml-bestand illustreert het gebruik van de SetterControl om een Setter-element met de naam KeyLocationSetter te wijzigen met behulp van een onderliggend tekstvakbesturingselement.

<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>
Eigenschappen
SetterData

U moet dit binden aan een eigenschap van uw weergave of weergavemodel dat verbinding maakt met de setter. Dit werkt op dezelfde manier waarop u een veld zou binden, zoals is beschreven voor FieldElementControl.

HeaderText

Met deze eigenschap kunt u de tekst instellen die in de koptekst van het besturingselement wordt weergegeven. U kunt deze eigenschap zien als een titel voor het besturingselement; Standaard wordt dit weergegeven als vetgedrukte, oranje tekst.

Instructietekst

Stel deze eigenschap in op de tekst die u onder de koptekst wilt weergeven, meestal instructietekst waarmee de gebruiker van uw aangepaste editor wordt geïnformeerd wanneer en waarom hij of zij het gedrag van het veld wil aanpassen.

Raakvlakken

Tabel 70 bevat de interfaces die u kunt gebruiken om aangepaste editors voor wizardpagina's te maken.

Tabel 70. Interfaces die kunnen worden gebruikt om aangepaste editors voor wizardpagina's te maken

Koppel Beschrijving
IDataService Gebruik deze interface om velden te verbinden met de gegevenselementen in het configuratiebestand van de UDI-wizard.
IMessageBoxService Deze interface biedt toegang tot methoden die u kunt gebruiken om berichtvensters weer te geven.

IDataService

Deze interface bevat verschillende eigenschappen en methoden, maar er is slechts één eigenschap die u graag nodig hebt. Deze eigenschap is de enige die hier is gedocumenteerd.

U kunt afhankelijkheidsinjectie gebruiken om een verwijzing naar deze interface te verkrijgen met behulp van code zoals deze in uw klas:

[Dependency]
public IDataService DataService { get; set; }
Eigenschappen

Tabel 71 bevat de eigenschappen van de IDataService-interface .

Tabel 71. Eigenschappen voor de IDataService-interface

Koppel Beschrijving
CurrentPage Deze eigenschap biedt toegang tot de XML-elementen, -kenmerken en -waarden onder de context van de huidige pagina die wordt bewerkt in het configuratiebestand van de UDI-wizard
CurrentPage
XElement CurrentPage { get; set; }

Deze eigenschap biedt toegang tot de XML voor de huidige pagina. U mag deze eigenschap nooit instellen, maar het staat u vrij om de XML voor uw pagina te wijzigen. In de voorbeeldpagina-editor ziet u voorbeelden van het wijzigen van de XML. U gebruikt deze eigenschap voornamelijk wanneer u aangepaste gegevens hebt. Voor velden en eigenschappen (samenstellers) kunt u ingebouwde besturingselementen gebruiken die voor alle details zorgen.

IMessageBoxService

Deze interface biedt toegang tot methoden die u kunt gebruiken om berichtvensters weer te geven. U vraagt zich misschien af waarom u een interface nodig hebt om een berichtvenster weer te geven. De realiteit is dat u dat niet doet: Microsoft gebruikt deze interface met in-code, omdat het helpt bij het schrijven van geautomatiseerde tests voor ontwerppagina's.

Het gebruik van deze methoden biedt echter één nuttig voordeel: De dialoogvensters hebben altijd de "eigenaar" ingesteld op de UDI-wizard, die ervoor zorgt dat het dialoogvenster correct wordt gegroepeerd met het hoofdvenster.

U kunt afhankelijkheidsinjectie gebruiken om een verwijzing naar deze interface te verkrijgen met behulp van code zoals deze in uw klas:

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

Tabel 72 geeft een overzicht van de methoden voor de IMessageBoxService-interface .

Tabel 72. Methoden voor de IMessageBoxService-interface

Methode Beschrijving
Berichtvak weergeven Deze overbelaste methode wordt gebruikt om een berichtvenster weer te geven met de volgende leden:

- ShowMessageBox(tekenreeksbericht, tekenreeks-onderschrift, pictogram MessageBoxImage)
- ShowMessageBox (tekenreeksbericht, tekenreeks-onderschrift, knop Berichtvakknop, pictogram Berichtvakafbeelding)
- ShowMessageBox(uitzonderingsuitzondering)
ShowDialogWindow Gebruik deze methode om een nieuw dialoogvenster te maken.
ShowWizardWindow Gebruik deze methode om een aangepaste editor weer te geven in een dialoogvenster met de knoppen Volgende en Terug voor navigatie.
Berichtvak weergeven

Met deze methode wordt een berichtvak weergegeven dat een onderliggende afbeelding is van de aangepaste editor voor tovenaarspagina's. Dit lid is overbelast: Tabel 73 bevat een lijst van de leden en een korte beschrijving van elk. Zie de sectie die overeenkomt met elk lid voor volledige informatie (inclusief syntaxis, gebruik en voorbeelden).

Tabel 73. Overbelaste leden voor de ShowMessagBox-methode

Lid Beschrijving
ShowMessageBox(tekenreeksbericht, tekenreeks-onderschrift, pictogram MessageBoxImage) Hiermee wordt een berichtvak weergegeven met een pictogram en een knop OK
ShowMessageBox (tekenreeksbericht, tekenreeks-onderschrift, knop Berichtvakknop, pictogram Berichtvakafbeelding) Hiermee wordt een berichtvak weergegeven met een pictogram en verschillende mogelijke combinaties van knoppen
ShowMessageBox(uitzonderingsuitzondering) Hiermee wordt een berichtvenster met informatie over een uitzondering en de knop OK weergegeven
ShowMessageBox(tekenreeksbericht, tekenreeks-onderschrift, pictogram MessageBoxImage)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);

Bij deze methode wordt een berichtvak met een knop OK weergegeven. Zie tabel 74.

Tabel 74. Parameters voor de methode ShowMessageBox(tekenreeksbericht, tekenreeksonderschrift, pictogram MessageBoxImage)

Parameter Beschrijving
bericht Het bericht dat in het inhoudsgebied van het berichtvak moet worden weergegeven
onderschrift De tekst die moet worden weergegeven op de titelbalk van het dialoogvenster
pictogram Het type pictogram dat in het berichtvak moet worden weergegeven
ShowMessageBox (tekenreeksbericht, tekenreeks-onderschrift, knop Berichtvakknop, pictogram Berichtvakafbeelding)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);

Bij deze methode wordt een berichtvenster weergegeven met de set knoppen die u wilt weergeven en wordt gemeld welke knop u hebt geselecteerd. Zie tabel 75.

Tabel 75. Methode ShowMessageBox(tekenreeksbericht, tekenreeks-onderschrift, knop Berichtvakknop, pictogram Berichtvakafbeelding)

Parameter Beschrijving
bericht Het bericht dat in het inhoudsgebied van het berichtvak moet worden weergegeven
onderschrift De tekst die moet worden weergegeven op de titelbalk van het dialoogvenster
knop Welke knoppen moeten worden weergegeven
pictogram Het type pictogram dat in het berichtvak moet worden weergegeven
ShowMessageBox(uitzonderingsuitzondering)
void ShowMessageBox(Exception exception);

Bij deze methode wordt een berichtvak weergegeven met informatie over een uitzondering. Dit berichtvenster bevat één knop OK . Zie tabel 76.

Tabel 76. Parameters voor de methode ShowMessageBox(Exception, exception)

Parameter Beschrijving
uitzondering De uitzondering die u wilt rapporteren (In het dialoogvenster wordt uitzondering gebruikt . Bericht als de inhoud.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);

Met deze methode maakt u een nieuw dialoogvenster, waarvan de inhoud bestaat uit de tekst die u invoert in de viewType-parameter . UDI Designer maakt een nieuw exemplaar van dit type en plaatst dit in een dialoogvenster met de knoppen OK en Annuleren.

U geeft gegevens door aan uw besturingselement met behulp van de parameter dialogPayload. De SampleEditor-oplossing in de SDK-directory bevat een voorbeeld van hoe u deze functionaliteit kunt gebruiken.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);

Met deze methode kunt u een aangepaste editor weergeven in een dialoogvenster met de knoppen Volgende en Terug voor navigatie. Microsoft heeft geen voorbeeld verstrekt voor het gebruik van deze methode.

UDI Wizard Configuration File Schema Reference

Dit bestand wordt gebruikt door de UDI-wizard en geconfigureerd door de UDI-wizard Designer. Dit bestand wordt gebruikt voor het configureren van de:

  • Wizardpagina's weergegeven in de UDI-wizard

  • De volgorde van de wizardpagina's in de UDI-wizard

  • Instellingen voor de velden op elke wizardpagina

  • Beschikbare StageGroups in de UDI Wizard Designer

  • Beschikbare stadia binnen elke implementatiewizard in de UDI Wizard Designer

    77 vermeldt de elementen in het configuratiebestand van de UDI-wizard en hun beschrijvingen. Het Wizard-element is het hoofdknooppunt voor deze verwijzing.

Tabel 77. Elementen in het configuratiebestand van de UDI-wizard en hun beschrijvingen

Naam van element Beschrijving
Data Hiermee groepeert u de afzonderlijke gegevensitemelementen binnen een pagina-element en krijgt de naam het kenmerk Naam .
Gegevensitem Hiermee groepeert u de afzonderlijke Setter elementen binnen een pagina-element . U kunt hiërarchische gegevens maken door een of meer gegevenselementen in een gegevensitemelement op te nemen. Elk gegevensitemelement vertegenwoordigt een afzonderlijk item. Een lijst met beschikbare stations kan bijvoorbeeld een DataItem voor de weergavenaam en een ander DataItem-element voor de bijbehorende stationsletter bevatten.
Standaard Hiermee wordt een standaardwaarde opgegeven voor het veld dat is opgegeven in het bovenliggende veld of radiogroepelement . De standaardwaarde is ingesteld op de waarde tussen haakjes van dit element.
DLL Hiermee geeft u een DLL op die moet worden geladen en waarnaar moet worden verwezen door de UDI-wizard en de UDI-wizard Designer.
DLL's Hiermee groepeert u de afzonderlijke DLL-elementen .
Fout Hiermee wordt een mogelijke foutcode opgegeven die een taak kan retourneren. De waarde van de foutcode wordt geretourneerd door het HRESULT van de taak en wordt opgesloten door dit element om meer specifieke foutinformatie te verschaffen.
Code afsluiten Hiermee wordt een mogelijke afsluitcode voor een taak aangegeven. De afsluitcodes zijn retourcodes die de taak verwacht. Maak een ExitCode-element voor elke mogelijke afsluitcode. Anders kunt u een sterretje (*) opgeven in het waardekenmerk voor het verwerken van codes die niet worden weergegeven in andere ExitCode-elementen .
Afsluitcodes Hiermee groepeert u een set afsluitcode- en foutelementen voor een taakelementof foutelement .
Veld Hiermee wordt een exemplaar van een besturingselement in een pagina-element opgegeven dat wordt gebruikt om aanpassingen te bieden met XML. Niet alle besturingselementen staan aanpassing met XML toe, alleen besturingselementen die gebruikmaken van het element Veld .
Velden Hiermee groepeert u de afzonderlijke veldelementen binnen een pagina-element .
Bestand Hiermee geeft u de bron en bestemming op voor een bewerking voor het kopiëren van een bestand met het taaktype Microsoft.Wizard.CopyFilesTask . U kunt een afzonderlijk Bestand-element opnemen om meer dan één bestand in één taak te kopiëren.
Pagina Hiermee geeft u een exemplaar van een pagina op met alle configuratie-instellingen voor de pagina.
PageRef Hiermee geeft u een verwijzing op naar een exemplaar van een pagina in een stadium binnen een fasegroep.
Pagina's Hiermee groepeert u de afzonderlijke pagina-elementen .
RadioGroep Hiermee geeft u een groep keuzerondjes binnen een veldelement op.
StageGroup Hiermee geeft u een groep van een of meer fasen aan.
StageGroups Hiermee wordt een set fasegroepen gegroepeerd binnen een configuratiebestand van de UDI-wizard.
Spelverdeler Hiermee geeft u een eigenschapsinstelling op van een waarde voor een eigenschap die in de eigenschap Eigenschap wordt genoemd.
Fase Hiermee geeft u een fase in een stagegroep aan die een of meer PageRef-elementen bevat.
Stijl Hiermee worden de afzonderlijke setterelementen gegroepeerd waarmee het uiterlijk van de UDI-wizard wordt geconfigureerd, inclusief de titel bovenaan de wizard en de bannerafbeelding die op de UDI-wizard wordt weergegeven.
Taak Geeft een taak op die moet worden uitgevoerd op de pagina die is opgegeven in het bovenliggende pagina-element .
Taken Hiermee groepeert u een takenset voor een pagina-element .
Validator Hiermee geeft u een validator op voor het veldbesturingselement dat is opgegeven in het bovenliggende veldelement .
Wizard Hiermee geeft u de hoofdmap voor alle andere elementen op.

Gegevens

Dit element groepeert de afzonderlijke DataItem-elementen binnen een pagina-element en wordt benoemd met het naamkenmerk.

Informatie over elementen

Tabel 78 bevat informatie over het element Gegevens .

Tabel 78. Informatie over gegevenselementen

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk pagina-element (Dit element is optioneel.)
Bovenliggende elementen Pagina, Gegevensitem
Inhoud DataItem, Setter
Kenmerken van elementen

Tabel 79 bevat een overzicht van de kenmerken van het element Data en een beschrijving hiervan.

Tabel 79. Kenmerken en bijbehorende waarden voor het gegevenselement

Kenmerk Beschrijving
Naam Hiermee geeft u de naam van het element Gegevens op
Opmerkingen

Met het naamkenmerk kan code een specifieke set gegevens ophalen.

Voorbeeld

Geen.

Gegevensitem

Dit element groepeert de afzonderlijke Setter-elementen binnen een pagina-element . U kunt hiërarchische gegevens maken door een of meer gegevenselementen in een gegevensitemelement op te nemen. Elk gegevensitemelement vertegenwoordigt een afzonderlijk item. Een lijst met beschikbare stations kan bijvoorbeeld een DataItem voor de weergavenaam en een ander DataItem-element voor de bijbehorende stationsletter bevatten.

Informatie over elementen

Tabel 80 bevat informatie over het gegevensitemelement .

Tabel 80. Informatie over gegevensitemelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk gegevenselement (Dit element is optioneel.)
Bovenliggende elementen Data
Inhoud Gegevens, Spelverdeler
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Standaard

Dit element geeft een standaardwaarde aan voor het veld dat is opgegeven in het bovenliggende veld of element Radiogroep . De standaardwaarde is ingesteld op de waarde die dit element tussen vierkante haken plaatst.

Informatie over elementen

Tabel 81 bevat informatie over het standaardelement .

Tabel 81. Standaardelementgegevens

Kenmerk Value
Aantal exemplaren Nul of meer binnen een veld - of radiogroepelement (Dit element is optioneel.)
Bovenliggende elementen Veld, Radiogroep
Inhoud Kan elke juist opgemaakte XML-inhoud zijn, maar is meestal standaardtekst
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

In het volgende voorbeeld is de standaardinstelling voor het veld Tijdzone ingesteld op 'Pacific Standard Time':

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

DLL

Dit element geeft een DLL aan voor de UDI Wizard en UDI Wizard Designer om te laden en naar te verwijzen.

Informatie over elementen

Tabel 82 bevat informatie over het DLL-element .

Tabel 82. Informatie DLL-element

Kenmerk Value
Aantal exemplaren Een of meer elementen in het DLL-element
Bovenliggend element DLL's
Inhoud Geen inhoud toegestaan voor dit element
Kenmerken van elementen

Tabel 83 geeft een overzicht van de kenmerken van het DLL-element en een beschrijving van elk element.

Tabel 83. Kenmerken en bijbehorende waarden voor het DLL-element

Kenmerk Beschrijving
Naam Hiermee geeft u de naam op van het DLL-bestand voor de UDI-wizard en UDI Wizard Designer waarnaar wordt verwezen
Opmerkingen

Geen.

Voorbeeld
<DLLs>
  <DLL Name="OSDRefreshWizard.dll" />
  <DLL Name="SharedPages.dll" />
</DLLs>

DLL's

Dit element groepeert de afzonderlijke DLL-elementen .

Informatie over elementen

Tabel 84 bevat informatie over het DLL-element .

Tabel 84. Informatie over DLL-elementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud DLL
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld
<DLLs>
   <DLL Name="OSDRefreshWizard.dll" />
   <DLL Name="SharedPages.dll" />
</DLLs>

Error

Dit element geeft een mogelijke foutcode aan die een taak kan retourneren. De waarde van de foutcode wordt als resultaat gegeven en opgesloten in het HRESULT van de taak om specifiekere foutinformatie te verschaffen.

Informatie over elementen

Tabel 85 bevat informatie over het element Fout .

Tabel 85. Informatie over foutelementen

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk ExitCode-element (dit element is optioneel.)
Bovenliggende elementen Afsluitcodes
Inhoud Elke juist opgemaakte XML-inhoud
Kenmerken van elementen

Tabel 86 bevat een overzicht van de kenmerken van het element Fout en een beschrijving van elke kenmerken.

Tabel 86. Informatie over foutelementen

Kenmerk Beschrijving
Status Hiermee geeft u de retourstatus op van een taak waarbij een fout is opgetreden. Meestal is de waarde voor dit kenmerk ingesteld op Fout. Deze waarde wordt weergegeven in de kolom Staat op de wizardpagina in de wizard UDI.
Tekst Hiermee geeft u de beschrijvende tekst op over de foutvoorwaarde die zich bij de taak heeft voorgedaan.
Type Hiermee geeft u op of dit element een fout, waarschuwing of succes vertegenwoordigt. De waarde die is opgegeven bijType moet uniek zijn binnen een ExitCodes-element . Hieronder volgen geldige waarden voor dit element:

- **0.**Het element vertegenwoordigt een succes.
- 1. Het element vertegenwoordigt een waarschuwing.
- -1. Het element vertegenwoordigt een fout.
Value Hiermee geeft u de waarde van de code op die door de taak wordt geretourneerd als numerieke waarde. Het opgeven van de waarde van een sterretje (*) geeft het standaardelement aan voor retourcodes die niet worden weergegeven in andere foutelementen .
Opmerkingen

Geen.

Voorbeeld

Geen.

Code afsluiten

Dit element geeft een mogelijke afsluitcode voor een taak aan. De afsluitcodes zijn retourcodes die de taak verwacht. Maak een ExitCode-element voor elke mogelijke afsluitcode. Anders kunt u een sterretje (*) opgeven in het waardekenmerk voor het verwerken van codes die niet worden weergegeven in andere ExitCode-elementen .

Informatie over elementen

Tabel 87 bevat informatie over het ExitCode-element .

Tabel 87. Informatie over exitCode-element

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk ExitCodes-element (dit element is optioneel.)
Bovenliggende elementen Afsluitcodes
Inhoud Ten minste één ExitCode-element en nul of meer foutelementen
Kenmerken van elementen

Tabel 88 geeft een overzicht van de kenmerken van het ExitCode-element en een beschrijving van elke element.

Tabel 88. Kenmerken en bijbehorende waarden voor het ExitCode-element

Kenmerk Beschrijving
Status Hiermee geeft u de retourstatus van een taak op. De waarde van dit kenmerk wordt weergegeven in de kolom Staat op de bijbehorende wizardpagina in de UDI-wizard. U kunt voor dit kenmerk elke waarde gebruiken die zinvol is voor uw taak. Hieronder volgen typische waarden die voor dit kenmerk worden gebruikt:

- Succes
- Waarschuwing
- Fout
Tekst Hiermee geeft u de beschrijvende tekst op over de bestaande code van de taak.
Type Hiermee geeft u op of dit element een fout, waarschuwing of succes vertegenwoordigt. De waarde die is opgegeven bij type, moet uniek zijn binnen een ExitCodes-element . Hieronder volgen geldige waarden voor dit element:

- 0. Het element staat voor een succes.
- 1. Het element vertegenwoordigt een waarschuwing.
- -1. Het element vertegenwoordigt een fout.
Value Hiermee geeft u de waarde van de code op die door de taak wordt geretourneerd als numerieke waarde. Het opgeven van de waarde van een sterretje (*) geeft het standaardelement aan voor retourcodes die niet worden weergegeven in andere ExitCode-elementen .
Opmerkingen

Geen.

Voorbeeld

Geen.

Afsluitcodes

Met dit element wordt een set afsluitcode- en foutelementen voor een taakof foutelement gegroepeerd.

Informatie over elementen

Tabel 89 bevat informatie over het element ExitCodes .

Tabel 89. ExitCodes-elementinformatie

Kenmerk Value
Aantal exemplaren Eén binnen elk taakelement
Bovenliggende elementen Taak
Inhoud Error, ExitCode
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Veld

Dit element geeft een exemplaar van een besturingselement in een pagina-element aan dat wordt gebruikt om XML aan te passen. Niet alle besturingselementen staan aanpassing met XML toe, alleen besturingselementen die gebruikmaken van het element Veld .

Informatie over elementen

Tabel 90 bevat informatie over het element Veld .

Tabel 90. Informatie veldelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk veldelement (Dit element is optioneel.)
Bovenliggende elementen Velden
Inhoud Standaard, Validator
Kenmerken van elementen

Tabel 91 geeft een overzicht van de kenmerken van het element Veld en een beschrijving van elk element.

Tabel 91. Kenmerken en bijbehorende waarden voor het veldelement

Kenmerk Beschrijving
Ingeschakeld Hiermee geeft u op of het veld is ingeschakeld voor gebruikersinvoer (het kenmerk kan worden ingesteld op Waar of Onwaar).
Naam Hiermee geeft u de naam van het veld op
Samenvatting Hiermee geeft u de beschrijvende tekst op die wordt weergegeven op de pagina van de wizard Overzicht voor de waarde die voor dit veld wordt ingesteld
Varnaam Hiermee geeft u de naam van de taakvolgvariabele op die moet worden gelezen of geconfigureerd met behulp van het veld in het bovenliggende veldelement
Opmerkingen

Dit element kan nul of meer standaardelementen en nul of meer validatie-elementen bevatten.

Voorbeeld

Geen.

Velden

Dit element groepeert de afzonderlijke veldelementen binnen een pagina-element .

Informatie over elementen

Tabel 92 bevat informatie over het element Velden .

Tabel 92. Informatie over veldelementen

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk pagina-element (Dit element is optioneel.)
Bovenliggende elementen Pagina
Inhoud Veld, Radiogroep
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Bestand

Met dit element worden de bron en het doel opgegeven voor een bewerking voor het kopiëren van een bestand met het taaktype Microsoft.Wizard.CopyFilesTask . U kunt een afzonderlijk Bestand-element opnemen om meer dan één bestand in één taak te kopiëren.

Informatie over elementen

Tabel 93 bevat informatie over het element Bestand .

Tabel 93. Informatie over bestandselementen

Kenmerk Value
Aantal exemplaren Een of meer voor elke taak die het taaktype Microsoft.Wizard.CopyFilesTask heeft
Bovenliggende elementen Taak
Inhoud Geen
Kenmerken van elementen

Tabel 94 bevat een overzicht van de kenmerken van het element File en een beschrijving hiervan.

Tabel 94. Kenmerken en bijbehorende waarden voor het bestandselement

Kenmerk Beschrijving
Ontwerpen Hiermee geeft u het volledig gekwalificeerde of relatieve pad naar de doelmap op voor het bestand dat is opgegeven in het bronkenmerk. Omgevingsvariabelen zijn toegestaan als onderdeel van het pad.
Source Hiermee geeft u het volledige gekwalificeerde of relatieve pad naar het bronbestand op dat door het taaktype Microsoft.Wizard.CopyFilesTask wordt gekopieerd. Dit kenmerk ondersteunt jokertekens, zodat meerdere bestanden kunnen worden gekopieerd met één bestandselement. Omgevingsvariabelen zijn toegestaan als onderdeel van het pad.
Opmerkingen

Geen.

Voorbeeld

Geen.

Pagina

Dit element geeft een exemplaar van een pagina aan en bevat alle configuratie-instellingen voor de pagina.

Informatie over elementen

Tabel 95 bevat informatie over het pagina-element .

Tabel 95. Informatie over pagina-elementen

Kenmerk Value
Aantal exemplaren Een of meer elementen binnen elk pagina-element
Bovenliggende elementen Pagina's
Inhoud Gegevens, velden, setter, taken
Kenmerken van elementen

Tabel 96 bevat een overzicht van de kenmerken van het element Page en een beschrijving hiervan.

Tabel 96. Kenmerken en bijbehorende waarden voor het pagina-element

Kenmerk Beschrijving
DisplayName Hiermee geeft u de gebruikersvriendelijke naam op van de wizardpagina die wordt weergegeven in UDI Wizard Designer. Deze naam is meestal meer beschrijvend dan het naamkenmerk.
Naam Hiermee geeft u de naam op van de wizardpagina die wordt weergegeven in UDI Wizard Designer.
Type Hiermee geeft u het type wizardpagina op dat rechtstreeks verband houdt met een specifieke wizardpagina in een DLL.
Opmerkingen

Geen.

Voorbeeld

Geen.

PageRef

Dit element verwijst naar een exemplaar van een pagina in een stadium binnen een fasegroep.

Informatie over elementen

Tabel 97 bevat informatie over het element PageRef .

Tabel 97. Informatie over PageRef-element

Kenmerk Value
Aantal exemplaren Een of meer elementen binnen een fase
Bovenliggende elementen Fase
Inhoud Geen
Kenmerken van elementen

Tabel 98 geeft een beschrijving van het kenmerk van het element PageRef .

Tabel 98. Kenmerken en bijbehorende waarden voor het element PageRef

Kenmerk Beschrijving
Pagina Hiermee geeft u de instantie van een pagina binnen een fase binnen een fasegroep aan. Stel deze waarde in op het naamkenmerk van een pagina-element .
Opmerkingen

Geen.

Voorbeeld

Geen.

Pagina's

Dit element groepeert de afzonderlijke pagina-elementen .

Informatie over elementen

Tabel 99 bevat informatie over het element Pagina's .

Tabel 99. Informatie over pagina-elementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud Pagina
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld
<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>

RadioGroep

Met dit element wordt een groep keuzerondjes aangegeven met in een veldelement .

Informatie over elementen

Tabel 100 geeft informatie over het element RadioGroup .

Tabel 100. Informatie over radiogroepelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen een veldelement (dit element is optioneel.)
Bovenliggende elementen Velden
Inhoud Standaard
Kenmerken van elementen

Tabel 101 geeft een overzicht van de kenmerken van het RadioGroup-element en geeft een beschrijving van elk.

Tabel 101. Kenmerken en bijbehorende waarden voor het element RadioGroup

Kenmerk Beschrijving
Vergrendeld Hiermee geeft u op of de groep keuzerondjes is ingeschakeld voor gebruikersinvoer. Het kenmerk kan worden ingesteld op:

- Waar. Hiermee geeft u op dat de keuzerondjes zijn uitgeschakeld en dat gebruikers geen keuzerondje in de groep kunnen selecteren.
- Niet waar. Hiermee geeft u op dat de keuzerondjes zijn ingeschakeld en dat gebruikers een keuzerondje in de groep kunnen selecteren.
Naam Hiermee geeft u de naam van het keuzerondje op.
Opmerkingen

Geen.

Voorbeeld

Geen.

StageGroup

Met dit element wordt een implementatiefasegroep aangegeven.

Informatie over elementen

Tabel 102 bevat informatie over het element StageGroup .

Tabel 102. Informatie over fasegroepelement

Kenmerk Value
Aantal exemplaren Een of meer elementen binnen een StageGroups-element
Bovenliggende elementen StageGroups
Inhoud Fase
Kenmerken van elementen

Tabel 103 bevat de kenmerken van het StageGroup-element en een beschrijving van het kenmerk.

Tabel 103. Kenmerken en bijbehorende waarden voor het StageGroup-element

Kenmerk Beschrijving
DisplayName Hiermee geeft u de gebruikersvriendelijke naam op van de fasegroep die wordt weergegeven in UDI Wizard Designer. Deze naam is meestal meer beschrijvend dan het naamkenmerk.
Opmerkingen

Geen.

Voorbeeld

Geen.

StageGroups

Dit element groepeert een set fasegroepen binnen een UDI-wizardconfiguratiebestand.

Informatie over elementen

Tabel 104 bevat informatie over het element StageGroups .

Tabel 104. Informatie over element StageGroups

Kenmerk Value
Aantal exemplaren Nul of één binnen een wizard-element
Bovenliggende elementen Wizard
Inhoud StageGroup
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Spelverdeler

Met dit element geeft u een eigenschapsinstelling op voor de waarde van een eigenschap die in de eigenschap wordt genoemd.

Informatie over elementen

Tabel 105 bevat informatie over het Setter-element .

Tabel 105. Informatie over Setter Element

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk bovenliggend element (Dit element is optioneel.)
Bovenliggende elementen Gegevens, Gegevensitem, Pagina, Stijl, Taak, Validator
Inhoud Bevat een tekenreekswaarde in het kenmerk Eigenschap
Kenmerken van elementen

Tabel 106 geeft een beschrijving van het kenmerk van het Setter-element .

Tabel 106. Kenmerken en bijbehorende waarden voor het element Setter

Kenmerk Beschrijving
Eigenschap Hiermee geeft u de naam van de eigenschap op die wordt ingesteld. De naam van de eigenschap wordt ingesteld op de waarde die door dit kenmerk tussen vierkante haken wordt geplaatst.
Opmerkingen

Geen.

Voorbeeld

Geen.

Fase

Dit element geeft een fase binnen een stagegroep aan en bevat een of meer PageRef-elementen .

Informatie over elementen

Tabel 107 bevat informatie over het fase-element .

Tabel 107. Informatie over fase-elementen

Kenmerk Value
Aantal exemplaren Een of meer elementen binnen een StageGroup-element
Bovenliggende elementen StageGroup
Inhoud PageRef
Kenmerken van elementen

Tabel 108 geeft een overzicht van de kenmerken van het fase-element en een beschrijving van elke element.

Tabel 108. Kenmerken en bijbehorende waarden voor het fase-element

Kenmerk Beschrijving
DisplayName Hiermee geeft u de gebruikersvriendelijke naam op van de wizardpagina die wordt weergegeven in UDI Wizard Designer. Deze naam is meestal meer beschrijvend dan het naamkenmerk.
Naam Hiermee geeft u de naam van de fase op. De waarde van dit element wordt gebruikt wanneer de UDI-wizard wordt gestart met de opdrachtregelparameter /stage: name .
Opmerkingen

Geen.

Voorbeeld

Geen.

Stijl

Dit element groepeert de afzonderlijke Setter elementen die het uiterlijk van de UDI Wizard configureren, inclusief de titel bovenaan de wizard en de bannerafbeelding die op de UDI Wizard wordt weergegeven.

Informatie over elementen

Tabel 109 bevat informatie over het stijlelement.

Tabel 109. Informatie over stijlelementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud Spelverdeler
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld
<Style>
  <Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
  <Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>

Taak

Dit element geeft een taak aan die moet worden uitgevoerd op de pagina die is opgegeven in het bovenliggende pagina-element .

Informatie over elementen

Tabel 110 bevat informatie over het taakelement.

Tabel 110. Informatie over taakelementen

Kenmerk Value
Aantal exemplaren Een of meer elementen binnen een element Taken
Bovenliggende elementen Taken
Inhoud Afsluitcodes, bestand, spelverdeler
Kenmerken van elementen

Tabel 111 bevat de kenmerken van het element Taak en een beschrijving hiervan.

Tabel 111. Kenmerken en bijbehorende waarden voor het taakelement

Kenmerk Beschrijving
Hangt ervan af Hiermee geeft u op of de taak afhankelijk is van een andere taak. De waarde van dit kenmerk wordt ingesteld op het naamkenmerk van een ander taakelement . Opmerking: Dit kenmerk kan niet worden geconfigureerd met de UDI Wizard Designer. U kunt dit kenmerk echter handmatig toevoegen aan een taakelement door het .xml bestand rechtstreeks te wijzigen.
DisplayName Hiermee geeft u de gebruiksvriendelijke naam op van de taak die wordt weergegeven in UDI Wizard Designer. Deze naam is meestal meer beschrijvend dan het naamkenmerk.
Naam Hiermee geeft u de naam van de taak op. Deze naam moet uniek zijn.
Type Hiermee geeft u het taaktype op voor de taak die moet worden uitgevoerd, die is gedefinieerd in het DLL-bestand dat de taak bevat.
Opmerkingen

Geen.

Voorbeeld

Geen.

Taken

Met dit element wordt een takenset voor een pagina-element gegroepeerd.

Informatie over elementen

Tabel 112 bevat informatie over het element Taken .

Tabel 112. Informatie over het element Taken

Kenmerk Value
Aantal exemplaren Nul of één binnen elk pagina-element (Dit element is optioneel.)
Bovenliggende elementen Pagina
Inhoud Taak
Kenmerken van elementen

Tabel 113 bevat de kenmerken van het element Taken en een beschrijving van elke kenmerken.

Tabel 113. Kenmerken en bijbehorende waarden voor het element Taken

Kenmerk Beschrijving
NaamTitel Hiermee geeft u het onderschrift op dat wordt weergegeven boven aan de kolom met de namen van de taken op de juiste wizardpagina.
StatusTitle Hiermee geeft u het onderschrift op dat boven aan de kolom met de status van de taken op de juiste wizardpagina wordt weergegeven.
Opmerkingen

Geen.

Voorbeeld

Geen.

Validator

Dit element geeft een validator aan voor het veldbesturingselement dat is opgegeven in het bovenliggende veldelement .

Informatie over elementen

Tabel 114 bevat informatie over het Validator-element .

Tabel 114. Informatie over validatorelement

Kenmerk Value
Aantal exemplaren Nul of één binnen een veldelement
Bovenliggende elementen Veld
Inhoud Spelverdeler
Kenmerken van elementen

Tabel 115 geeft een overzicht van het attribuut van het Validator-element en geeft er een beschrijving van.

Tabel 115. Kenmerken en bijbehorende waarden voor het validatorelement

Kenmerk Beschrijving
Type Specificeert het type voor de validator, dat is gedefinieerd in de DLL die de validator bevat
Opmerkingen

Geen.

Voorbeeld

Geen.

Wizard

Dit element geeft de hoofdletter voor alle andere elementen aan.

Informatie over elementen

Tabel 116 bevat informatie over het Wizard-element .

Tabel 116. Informatie over wizardelement

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Geen
Inhoud DLL's, Pages, StageGroups, Style
Kenmerken van elementen

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

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