Delen via


Gebruikersgestuurde installatie - Ontwikkelaarshandleiding

Door de gebruiker gestuurde installatie (UDI) vereenvoudigt de implementatie van Windows-clientbesturingssystemen®, zoals Windows 8.1, op computers met behulp van de besturingssysteemimplementatiefunctie (OSD) in Microsoft® System Center 2012 R2 Configuration Manager. UDI maakt deel uit van de Microsoft Deployment Toolkit (MDT).

Inleiding

Wanneer u besturingssystemen implementeert met behulp van de FUNCTIE OSD, moet u doorgaans 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 initiëren.

UDI biedt een wizardgestuurde interface waarmee u configuratie-informatie kunt opgeven direct voordat de implementatie wordt uitgevoerd. Met dit gedrag kunt u algemene OSD-takenreeksen maken en vervolgens computerspecifieke informatie opgeven op het moment van implementatie, wat meer flexibiliteit biedt in het implementatieproces.

Doelgroep

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

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

  • Microsoft .NET Framework, dat wordt gebruikt voor het maken van aangepaste wizardpagina-editors

  • Windows Presentation Foundation (WPF), dat wordt gebruikt om aangepaste wizardpagina-editors te maken

  • Talen die WPF ondersteunt, zoals C#, C++ of Microsoft Visual Basic® .NET, die worden gebruikt om aangepaste wizardpagina-editors te maken

Over deze handleiding

Deze handleiding bevat de benodigde naslaginformatie om u te helpen de UTI voor uw organisatie aan te passen. In deze handleiding worden geen administratieve of operationele onderwerpen besproken, 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 van UDI-ontwikkeling

Met UDI-ontwikkeling kunt u de functies die UDI biedt uitbreiden. Doorgaans is UDI-ontwikkeling vereist wanneer u aanvullende informatie wilt verzamelen die het UDI-implementatieproces verbruikt. Deze aanvullende informatie wordt meestal opgeslagen als takenreeksvariabelen die takenreeksstappen in een UDI-takenreeks in Configuration Manager lezen.

UDI-architectuur

Het hoofddoel van UDI-ontwikkeling is het maken van aangepaste wizardpagina's die kunnen worden weergegeven in de UDI-wizard. 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 naast of in plaats van de wizardpagina's die UDI biedt.

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

Afbeelding 1. Relatie tussen de wizard UDI en de wizard UDI Designer afbeelding 1. Relatie tussen de UDI-wizard en de UDI-wizard Designer

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

Op conceptueel niveau omvat UDI-ontwikkeling het maken van:

  • Aangepaste wizardpagina's. Wizardpagina's worden weergegeven in de wizard UDI en verzamelen de informatie 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 voor aangepaste wizardpagina's. U gebruikt wizardpagina-editors om het gedrag van uw aangepaste wizardpagina te configureren. De pagina-editors van de aangepaste wizard worden geïmplementeerd als DLL's die door de wizard UDI Designer worden gelezen. U maakt wizardpagina-editors met behulp van:

    • WPF versie 4.0

    • Microsoft Prism versie 4.0

    • Microsoft Unity Application Block (Unity) versie 2.1

      MDT bevat alle assembly's die nodig zijn om een aangepaste wizardpagina-editor te maken voor gebruik in de UDI-wizard Designer. De UDI SDK bevat een voorbeeld van het maken van aangepaste wizardpagina-editors.

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

De UDI-ontwikkelomgeving voorbereiden

Voordat u begint met het maken van uw eigen aangepaste wizardpagina's en editors voor wizardpagina's, moet u de volgende stappen uitvoeren om de UDI-ontwikkelomgeving voor te bereiden:

  1. Bereid de vereisten voor de UDI-ontwikkelomgeving voor, zoals beschreven in Vereisten voor de UDI-ontwikkelomgeving voorbereiden.

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

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

Vereisten voor de UDI-ontwikkelomgeving voorbereiden

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

  1. Bereid de hardware perquisites van de UDI-ontwikkelomgeving voor, zoals beschreven in Hardwarevereisten voor de UDI-ontwikkelomgeving voorbereiden.

  2. Bereid de software-perquisites voor de UDI-ontwikkelomgeving voor, zoals beschreven in Softwarevereisten voor de UDI-ontwikkelomgeving voorbereiden.

Hardwarevereisten voor de UDI-ontwikkelomgeving voorbereiden

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

De softwarevereisten voor de UDI-ontwikkelomgeving voorbereiden

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 ondersteuning biedt voor de processorarchitectuur waarvoor 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. Daarom moet u een 64-bits besturingssysteem gebruiken.

    Opmerking

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

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

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

  • C++-taal (de taal die wordt gebruikt voor 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 de UDI-wizard uit te breiden Designer wizardpagina-editors

    Opmerking

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

De UDI-ontwikkelomgeving configureren

Nadat aan de vereisten voor de UDI-ontwikkelomgeving is voldaan, voert u de volgende stappen uit om de UDI-ontwikkelomgeving te configureren:

  1. Installeer Visual Studio 2010.

    Zorg ervoor dat u de C++-taal en eventuele andere talen installeert die WPF ondersteunt.

    Opmerking

    De voorbeeldbroncode voor de wizard UDI Designer editorpagina's 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 de sectie 'Installeren of upgraden naar MDT' in het MDT-document De Microsoft Deployment Toolkit gebruiken voor meer informatie over het installeren van MDT.

  3. Maak in Windows Verkenner local_folder (waarbij local_folder een map is die zich op een lokaal station op 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 een 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 dat hiervoor verhoogde machtigingen nodig zijn.

  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 dit is voltooid, moet de mapstructuur onder local_folder eruitzien als de mappenstructuur die wordt geïllustreerd in afbeelding 2 (waarbij local_folder de map is die u eerder in het proces hebt gemaakt en in de afbeelding wordt weergegeven als UDIDevelopment ).

    Afbeelding 2. Mapstructuur voor UDI-ontwikkeling Afbeelding 2. Mapstructuur voor UDI-ontwikkeling

    Afbeelding 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 gebouwd in Visual Studio 2010.

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

Controleer of het SamplePage-project correct wordt gebouwd

Het project SamplePage bevat een voorbeeld van het maken van een aangepaste wizardpagina voor de UDI-wizard. Zie De Visual Studio-oplossing van SamplePage bekijken voor meer informatie over het SamplePage-project.

Controleren of het SamplePage-project correct wordt gebouwd

  1. Start Visual Studio 2010.

  2. Open het project SamplePage.

    Het project SamplePage 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 project SamplePage en selecteer vervolgens Eigenschappen.

    Het dialoogvenster VoorbeeldPagina-eigenschappenpagina's wordt weergegeven.

  4. Ga in het dialoogvenster Voorbeeldpagina-eigenschappenpagina's naar Configuratie-eigenschappen/foutopsporing.

  5. Selecteer in de eigenschappen van foutopsporing onder Configuratiede optie Alle configuraties.

  6. Typ in de eigenschappen voor foutopsporing onder Opdracht$(TargetDir)\OSDSetupWizard.exe.

  7. Typ $(TargetDir) in de eigenschappen van Foutopsporing onder Werkmap.

  8. Ga in het dialoogvenster Voorbeeldpagina-eigenschappenpagina's naar Configuratie-eigenschappen/buildgebeurtenissen/post-buildgebeurtenis.

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

    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 Voorbeeldpagina-eigenschappenpagina's.

  11. Sla het project op.

  12. Selecteer in het menu Foutopsporingde optie Foutopsporing starten.

    Het dialoogvenster Microsoft Visual Studiowordt weergegeven waarin wordt aangegeven dat de bron verouderd is en wordt gevraagd of u het project wilt bouwen.

  13. Selecteer Ja in het dialoogvenster Microsoft Visual Studio.

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

  14. Selecteer ja in het dialoogvenster Geen foutopsporingsgegevens.

    De wizard UDI wordt geopend met de pagina van de aangepaste wizard weergegeven.

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

  16. Selecteer annuleren in het formulier Wizard met voorbeeldpagina.

    Het dialoogvenster Wizard Annuleren wordt weergegeven.

  17. Selecteer Ja in het dialoogvenster Wizard Annuleren.

  18. Sluit Visual Studio 2010.

Controleer of het SampleEditor-project correct wordt gebouwd

Het project SampleEditor bevat een voorbeeld van het maken van een aangepaste wizardpagina-editor voor de UDI-wizard Designer. Zie SamplePage Visual Studio Solution bekijken voor meer informatie over het SampleEditor-project.

Controleren of het SampleEditor-project correct wordt gebouwd

  1. Start Visual Studio 2010.

  2. Open het project SampleEditor.

    Het project SampleEditor bevindt zich in de map local_folder\SDK\UDI\SampleEditor (waarbij 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 In het menu Project de optie Verwijzing toevoegen.

    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 (waarbij 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 geen van de verwijzingen waarschuwingen of fouten bevat.

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

    Het dialoogvenster SampleEditor-eigenschappenpagina's wordt weergegeven.

  10. Selecteer in het dialoogvenster SampleEditor-eigenschappenpagina's het tabblad Foutopsporing .

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

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

    Tip

    U kunt het beletselteken (...) selecteren om naar de map te bladeren en UDIDesigner.exe te selecteren.

  13. Selecteer in het menu Bestandde 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 wizard UDI Designer wordt gestart.

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

    Het dialoogvenster Openen wordt weergegeven.

  17. Open in het dialoogvenster Openen het bestand local_folder\SDK\SamplePage\SamplePage\Config.xml (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 Custom StageGroup wordt weergegeven in het detailvenster.

  18. Selecteer in het detailvenster het tabblad Configureren .

  19. Controleer de configuratie-informatie voor het vak Locatie , waaronder het volgende:

    • De knop Ontgrendeld , waarmee u het vak Locatie in- of uitschakelt

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

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

    • Keuzelijst Locatie , met een lijst met mogelijke locaties

  20. Sluit de wizard UDI Designer.

  21. Sluit Visual Studio 2010.

De UDI SDK-voorbeelden bekijken

Voordat u begint met ontwikkelen, bekijkt u de voorbeelden in de UDI SDK. Gebruik de informatie in deze handleiding en de broncode in de voorbeelden om uw eigen aangepaste UDI-wizardpagina's en editors voor wizardpagina's te maken.

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

De inhoud van de SDK-map controleren

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
Bevat 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 statische koppelingsbibliotheken. Opmerking: Itanium-versies van de bibliotheken (IA-64) zijn niet beschikbaar.
SampleEditor Een Visual Studio-project voor het bouwen van een aangepaste editor die wordt gebruikt voor het bewerken van de pagina SamplePage in de UDI-wizard Designer, die is geschreven in C#
SamplePage Een Visual Studio-project voor het bouwen van een aangepaste UDI-wizardpagina, die is geschreven in Visual C++

Bekijk de Visual Studio-oplossing SamplePage

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:

Levenscyclus van de wizardpagina bekijken

Een UDI-wizardpagina 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 overschrijven met uw code. Tabel 2 bevat de methoden die u moet overschrijven en bevat een korte beschrijving van elke methode, inclusief wanneer de methode in de levenscyclus van de wizardpagina moet worden gebruikt.

Tabel 2. Methoden in de levenscyclus van een wizardpagina

Methode Beschrijving
OnWindowCreated Deze methode wordt eenmaal aangeroepen nadat het venster van de pagina is gemaakt.

Voor deze methode schrijft u code die de pagina voor het eerst initialiseert en slechts eenmaal hoeft te worden uitgevoerd. Gebruik deze methode bijvoorbeeld om velden te initialiseren of om configuratiegegevens te lezen uit de Setter-elementen in het configuratiebestand van de UDI-wizard.
OnWindowShown Deze methode wordt aangeroepen telkens wanneer de pagina wordt weergegeven (weergegeven) in de UDI-wizard. Deze wordt aangeroepen wanneer de pagina voor het eerst wordt weergegeven en telkens wanneer u naar de pagina navigeert door Volgende of Terug te selecteren in de wizard.

Voor deze methode schrijft u code waarmee de pagina wordt voorbereid om te worden weergegeven, bijvoorbeeld door geheugenvariabelen, takenreeksvariabelen of omgevingsvariabelen te lezen en vervolgens de pagina bij te werken op basis van eventuele wijzigingen in deze variabelen.
OnCommonControlEvent Deze methode kan worden aangeroepen wanneer de wizardpagina wordt weergegeven en een WM_NOTIFY bericht ontvangt van een onderliggende (meestal algemene besturingselementen).

Schrijf voor deze methode code die WM_NOTIFY verwerkt op basis van het meldingsbericht. U kunt bijvoorbeeld reageren op gebeurtenissen van een algemeen besturingselement, zoals reageren op gebeurtenissen selecteren of dubbelklikken voor een TreeView-besturingselement .
OnUnhandledEvent Deze methode wordt aangeroepen wanneer er een niet-afgehandeld vensterbericht optreedt voor uw wizardpagina. Deze methode biedt de mogelijkheid om deze anders niet-verwerkte vensterberichten te onderscheppen en af te handelen.

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

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

Schrijf voor deze methode code waarmee acties worden uitgevoerd voordat de pagina wordt verborgen, voordat een andere pagina wordt weergegeven. Normaal gesproken hoeft u deze methode niet te overschrijven.

Bekijk het SamplePage-voorbeeld

Bekijk het SamplePage-voorbeeld met behulp van de volgende lijst, die de volgorde van gebeurtenissen tijdens de levenscyclus van de wizardpagina van het Voorbeeldpagina weergeeft:

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

  2. Met de UDI-wizard worden de DLL's geladen die vereist zijn voor elke wizardpagina die wordt vermeld in het configuratiebestand van de UDI-wizard, zoals beschreven in Stap 2: De wizard UDI laadt de DLL voor de pagina Aangepaste wizard.

  3. De UDI-wizard geeft de aangepaste wizardpagina weer en maakt de gewenste interactie met besturingselementen mogelijk, zoals beschreven in Stap 3: De wizard UDI geeft de pagina van de aangepaste wizard weer.

  4. Wanneer de aangepaste wizardpagina de gegevens heeft verzameld, voert u de benodigde 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 Aangepaste wizard.

Stap 1: de wizard UDI (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 gebruikt als configuratiebestand. In MDT is het standaardconfiguratiebestand het UDIWizard_Config.xml-bestand, dat zich bevindt in de map Scripts in het MDT Files-pakket voor configuratie.

U kunt het standaardconfiguratiebestand dat de UDI-wizard gebruikt overschrijven door de takenreeksstap van de UDI-wizard te wijzigen om de parameter /definition te gebruiken. Zie 'Het configuratiebestand overschrijven dat door de UDI-wizard wordt gebruikt' voor meer informatie over het overschrijven van het standaardconfiguratiebestand dat door de UDI-wizard wordt gebruikt.

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

  • DLL-element

  • Stijlelement

  • Het element Pagina's

  • StageGroups-element

    Zie Naslaginformatie over UDI-wizardconfiguratiebestand voor meer informatie over het schema van het configuratiebestand van de UDI-wizard en elk van deze elementen.

    De wizard UDI scant het element DLL's 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 het platform x86 is voor de 32-bits versie of x64 voor de 64-bits versie).

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

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

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

  • Uw projectnaam in de plaats van SamplePage.

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

Stap 2: De UDI-wizard Laadt de DLL voor de pagina Aangepaste wizard

Wanneer de UDI-wizard uw DLL laadt, roept deze de functie RegisterFactories aan , die moet worden geïmplementeerd in uw .dll-bestand. In het voorbeeld wordt 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 de wizardpagina te registreren bij het klassefactoryregister voor de wizard UDI. Klassefactory's zijn klassen die een exemplaar van een andere klasse kunnen maken. De functie RegisterFactories maakt een nieuw exemplaar van een fabrieksklasse en geeft die klasse door aan het klassefactoryregister voor de wizard UDI, waardoor die factoryklasse beschikbaar is voor de wizard. De wizard UDI zoekt naar een fabrieksklasse die is geregistreerd met een id die overeenkomt met het kenmerk Type van het element Pagina voor de aangepaste wizardpagina.

In het voorbeeld wordt de id gedefinieerd als ID_Location in het bestand PageClassIds.h als Microsoft.SamplePage.LocationPage, dat overeenkomt met het kenmerk Type voor het element Page in het bestand Config.xml. ID_Location wordt doorgegeven als een 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 factory-exemplaar te vereenvoudigen en het zojuist gemaakte exemplaar te registreren. De naamwaarde die wordt opgegeven met behulp van de functiesjabloon Register moet de interface iClassFactory implementeren. De ClassFactoryImpl-klasse verwerkt de meeste details voor het implementeren van een klassefactory.

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

Opmerking

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

Stap 3: De wizard UDI geeft de pagina van de aangepaste wizard weer

De pagina van de aangepaste wizard in het voorbeeld wordt gedefinieerd in het LocationPage.cpp-bestand. Wizardpagina's zijn afgeleid van sjabloonklassen die veel van de functionaliteit van een pagina bieden. Alle wizardpagina's moeten zijn afgeleid van de sjabloonklasse WizardPageImpl, waarmee de IWizardPage-interface 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 van de beschikbare:

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

  • Interfaces voor de sjabloonklassen van de wizardpagina, zie Wizardpagina-interfaces

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

    De voorbeeldpagina van de aangepaste wizard overschrijft de volgende methoden:

  • OpWindowCreated. De methode OnWindowCreated op de voorbeeldpagina van de wizard roept de volgende methoden aan:

    • AddField. Met deze methode wordt het besturingselement IDC_COMBO_LOCATION vak in de IDD_LOCATION_PAGE resource gekoppeld aan het element Gegevens met de naam Locatie in het Config.xml-bestand.

      Naast de methode AddField kunt u de methoden AddRadioGroup en AddToGroup gebruiken om andere besturingselementen en gedrag te ondersteunen.

      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) te initialiseren die u aan het formulier hebt toegevoegd. De aanwijzer van de pagina is een parameter. In het voorbeeld wordt deze aanwijzer doorgegeven, die verwijst naar de huidige pagina.

      Opmerking

      Als u het gebruik van deze aanwijzer wilt ondersteunen, moet u de interface IFieldCallback 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 selectievakjebesturingselementen. In het voorbeeld stelt de methode SetFieldDefault de initiële index van het besturingselement keuzelijst met invoervak in op basis van de standaardwaarde die is opgegeven in het element Standaard voor het element Veld in het bestand Config.xml.

      De methode OnWindowCreated stelt de formuliercontroller in met behulp van de IFormController-interface. Zie Het formulier instellen voor meer informatie over het instellen van de formuliercontroller.

  • InitLocations. Met deze methode wordt de keuzelijst met invoervak ingevuld in de lijst met locaties in het Config.xml-bestand. Het element Data en de onderliggende DataItem-elementen in het Confg.xml-bestand bieden de lijst met mogelijke waarden.

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

    • Updates de takenreeksvariabele TSLocation met de waarde geselecteerd in de keuzelijst met invoervak met behulp van de methode SaveFields

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

Stap 4: De knop Volgende is geselecteerd op de pagina Aangepaste wizard

Wanneer de gebruiker de velden op de pagina van de aangepaste wizard voltooit, selecteert hij Volgende, waarmee de methode OnNextSelected wordt aangeroepen . De methode OnNextSelected voert alle benodigde taken uit voordat u doorgaat naar de volgende wizardpagina, zoals het vastleggen van eventuele configuratiewijzigingen die zijn aangebracht op de aangepaste wizardpagina.

Voor de voorbeeldpagina van de aangepaste wizard wordt de onderdrukking voor de methode OnNextSelected geïmplementeerd in het bestand LocationPage.ccp. In de methode OnNextSelected op de aangepaste voorbeeldpagina van de wizard worden de volgende methoden aangeroepen:

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

  2. SaveFields. Met deze methode worden veldwaarden opgeslagen in takenreeksvariabelen en in de gegevens die worden weergegeven op de pagina Samenvatting .

Bekijk de Visual Studio-oplossing SampleEditor

Voordat u begint met het maken van uw eigen aangepaste wizardpagina's en editors voor wizardpagina's, moet u de volgende stappen uitvoeren om de UDI-ontwikkelomgeving voor te bereiden:

De UDI-wizard Designer-architectuur bekijken

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

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

Het MVVM-ontwerppatroon helpt de gebruikersinterface (UI; presentatie) te scheiden van de gegevens die worden gepresenteerd. De gegevens zijn een façade boven 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 wizard UDI Designer gebruikt de DependencyAttribute om toegang te krijgen tot de klasse DataService op basis van het afhankelijkheidsinjectieframework in Unity. Zie Voor meer informatie over het afhankelijkheidsinjectieframework in Unity Wat leven in uw toepassingen injecteren: het Unity-toepassingsblok leren kennen.

Configureerbare onderdelen van een UDI-wizardpagina bekijken

Wanneer u de aangepaste wizardpagina maakt, zijn sommige configuratie-instellingen mogelijk ingesteld in code en kunnen ze niet 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 wizard UDI Designer.

Normaal gesproken worden de configuratie-instellingen die u wilt configureren met behulp van de UDI-wizard Designer opgeslagen in het configuratiebestand van de UDI-wizard (het Config.xml-bestand in het voorbeeld). U kunt echter ook uw eigen afzonderlijke configuratiebestand maken, indien nodig. Een voorbeeld van het gebruik van een afzonderlijk configuratiebestand is het bestand UDIWizard_Config.xml.app, dat wordt gebruikt voor de taak Application Discovery en het wizardtype ApplicationPage .

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

  • Veld. Met velden kunnen gebruikers invoer opgeven. 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 pagina-editor van de wizard moet een methode bieden voor het bewerken van de veldconfiguratie-instellingen voor het veld met behulp van FieldElementControl.

  • Eigenschappen. Setters helpen eigenschappen te maken voor entiteiten op de pagina, zoals pagina's in het element Pagina , velden in het element Veld of gegevens in de elementen Data of DataItem . U configureert eigenschappen 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 behulp van 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 behulp van de elementen Data of DataItem . De gegevens kunnen worden gedefinieerd in een platte of hiërarchische structuur door het juiste gebruik van de elementen Data of DataItem . De Config.xml in het voorbeeld in de SDK laat zien hoe u platte gegevensstructuren bouwt.

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

Bekijk het EditorPage-voorbeeld

Het EditorPage-voorbeeld wordt gebruikt voor het configureren van de configuratie-instellingen voor de wizardpagina SamplePage in het configuratiebestand van de UDI-wizard. Het editorpage-voorbeeld bevat de volgende primaire onderdelen:

  • Gebruikersinterface voor het configureren van de instellingen voor de keuzelijst met keuzelijst met invoervak voor 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 die 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 SampleEditor wordt geladen en geïnitialiseerd in de Designer van de wizard UDI, zoals beschreven in Pagina-editor voor revisie van wizards laden en initialiseren.

  2. Controleer de gebruikersinterface die wordt gebruikt voor het bewerken van de keuzelijst met locatie en LocationPageEditor.xaml.cs, zoals beschreven in De gebruikersinterface controleren die wordt gebruikt om de keuzelijst met locatie te configureren.

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

  4. Controleer de code die wordt gebruikt voor het beheren van configuratiegegevens die zijn opgeslagen in het configuratiebestand van de UDI-wizard, zoals beschreven in De code controleren die wordt gebruikt om configuratiegegevens te beheren.

Pagina-editor voor wizards bekijken: laden en initialiseren

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

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 Designer gebruikt de volgende kenmerken van het element Page in het bestand SamplePage.dll.confg om het EditorPage-voorbeeld te laden en te initialiseren:

  • DesignerAssembly. 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, 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-gebruikersbeheer bevat.

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

  • Dll. Gebruik dit kenmerk om het DLL-element te configureren in het configuratiebestand van de UDI-wizard, dat de wizard UDI Designer maakt.

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

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

    In het voorbeeld is het type van de aangepaste wizardpagina SamplePageMicrosoft.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 op de ontwikkelcomputer hebt gemaakt).

Bekijk de gebruikersinterface die wordt gebruikt om de keuzelijst met keuzelijst met invoervak voor locatie te configureren

Wanneer de pagina-editor van de wizard wordt geladen en geïnitialiseerd, wordt de pagina-editor van de wizard SampleEditor 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 Extensible Application Markup Language (XAML).

Als u bijvoorbeeld het element Controls:FieldElementControl in de XAML bekijkt, kunt u zien 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 verbinden de velden op de voorbeeldpagina-editor met de informatie in het configuratiebestand van de UDI-wizard. De volgende code koppelt bijvoorbeeld het tekstvak Standaardwaarde aan het element Standaard in het configuratiebestand van de UDI-wizard (Config.xml in het voorbeeld):

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

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

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

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

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

Bekijk contextgevoelige menu- en lintknoppen voor het wijzigen van de lijst met locaties

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

  • SelectedItem. Deze gegevensgebonden eigenschap wordt geactiveerd wanneer de gebruiker een item in de lijst selecteert. Deze eigenschap is gekoppeld aan de eigenschap CurrentLocation in het weergavemodel. Deze bevindt zich in het LocationPageEditorViewModel.cs-bestand en wordt gebruikt door het besturingselement CollectionTControl 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 aan een eigenschap in het weergavemodel die het object AddLocationAction retourneert. Dit object is de methode AddLocationCallback , die zich in het LocationPageEditorViewModel.cs-bestand bevindt en het dialoogvenster in het bestand AddEditLocationView.xaml weergeeft.

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

  • 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 methode EditLocationCallback , die zich in het LocationPageEditorViewModel.cs-bestand bevindt, en toont een bericht dat het verwijderen van de locatie bevestigt.

Bekijk het dialoogvenster voor het toevoegen of bewerken van locaties

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

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 het kenmerk DialogTitle van het dialoogvensterframe

    • Een knop OK , waarmee de retourstatus voor de eigenschap Approved wordt ingesteld op True (De retourstatus wordt gecontroleerd in 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 in 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 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)

Bekijk de code die wordt gebruikt voor het beheren van configuratiegegevens

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

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

  • UDIWizard_Config.xml bestand dat is meegeleverd met MDT, 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 wizardpagina's en -fasen

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

Pagina's van de wizard Aangepaste UDI maken

Het proces op hoog niveau 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 (onderdrukkingen voor de methode OnWindowCreated ), inclusief de volgende stappen:

    1. Initialiseer het formulier.

    2. Lees geheugenvariabelen, takenreeksvariabelen, omgevingsvariabelen of XML-bestandsinformatie (zoals Setter-eigenschappen ).

  4. Schrijf code om de juiste taken uit te voeren wanneer de pagina wordt weergegeven (onderdrukkingen voor de methode OnWindowShown ), inclusief de volgende stappen:

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

    2. Werk de besturingselementen bij op basis van gelezen informatie wanneer de pagina vervolgens in stap 3 is geladen, zoals de populatie van besturingselementen op basis van de gelezen informatie.

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

  6. Schrijf code om de juiste taken uit te voeren wanneer de gebruiker Volgende selecteert in de wizard UDI (onderdrukkingen voor de methode OnNextSelected ), inclusief de volgende stappen:

    1. Werk geheugenvariabelen, takenreeksvariabelen, 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 het DLL-bestand dat u maakt hetzelfde processorplatform is als de installatie van MDT, met name het processorplatform voor Windows Preinstallation Environment (Windows PE). De wizard UDI kan worden uitgevoerd in:

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

    • 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 hebben gebouwd voor uw wizardpagina voor elke processorarchitectuur van Windows PE die u wilt gebruiken.

  8. Kopieer de DLL voor uw aangepaste wizardpagina naar installation_folder\Templates\Distribution\Tools\platformmap (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.

Pagina-editors voor aangepaste wizards maken

Het proces op hoog niveau voor het maken van aangepaste UDI-wizardpagina-editors is als volgt:

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

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

  3. Voeg exemplaren van het besturingselement FieldElementControl toe zoals vereist door de wizardpagina die moet worden geconfigureerd (indien nodig).

  4. Voeg exemplaren van het besturingselement SetterControl toe zoals vereist door de wizardpagina die moet worden geconfigureerd (indien nodig).

  5. Voeg exemplaren van het besturingselement CollectionTControl toe zoals vereist door de wizardpagina die moet worden geconfigureerd (indien nodig).

  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 wizardpagina-editor.

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

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

  10. Bouw de oplossing.

    Opmerking

    Zorg ervoor dat de versie van het DLL-bestand dat u maakt hetzelfde processorplatform is als de installatie van MDT. Als u bijvoorbeeld de 64-bits versie van MDT installeert, bouwt u vervolgens een 64-bits versie van uw aangepaste pagina-editor.

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

    Zie het element DesignerMappings , onderliggende elementen en bijbehorende kenmerken voor meer informatie over de elementen die nodig zijn om de toewijzing tussen de wizardpagina en de pagina-editor van de wizard uit te voeren.

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

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

Aangepaste UDI-taken maken

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

Opmerking

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

Aangepaste UDI-taken maken

  1. Schrijf code waarmee de ITask-interface en de volgende methoden worden geïmplementeerd:

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

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

  2. Schrijf code waarmee de aangepaste taakklassefactory wordt geregistreerd bij het fabrieksregister.

  3. Bouw de oplossing voor uw aangepaste taak.

    Opmerking

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

  4. Maak een taakelement onder het element TaskLibrary in de wizard UDI Designer configuratiebestand dat vergelijkbaar is met 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 zoals vereist voor de taak. In het vorige fragment wordt bijvoorbeeld de logboekparameter gebruikt om een parameter op te geven voor de locatie van een logboekbestand.

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

  6. Kopieer de DLL 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 die zijn geschreven in C++ die de IValidator-interface implementeren. U registreert het DLL-bestand bij de UDI-wizard Designer validatorbibliotheek door een UDI-wizard te maken Designer-configuratiebestand (.config-bestand) en deze te plaatsen in de map installation_folder\Bin\Config (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd).

Aangepaste UDI-validators maken

  1. Schrijf code 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 voor de klasse BaseValidator aanroepen. Deze leest doorgaans alle eigenschappen die zijn ingesteld voor de validator uit het configuratiebestand van de UDI-wizard. De InvalidCharactersValidator-validator haalt bijvoorbeeld de waarde van de eigenschap InvalidChars op met behulp van deze methode.

    • IsValid. De formuliercontroller roept deze methode aan om te zien of het besturingselement geldige tekst bevat. Hier volgt een voorbeeld van de methode IsValid voor een validator waarmee wordt gevalideerd dat 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 onder aan de wizardpagina kan valideren (of wissen).

      Dit zijn doorgaans de enige methoden die u moet overschrijven. Afhankelijk van de validator moet u echter mogelijk andere methoden overschrijven in de subklasse van de BaseValidator-klasse die u maakt. Zie de klasse BaseValidator voor meer informatie over deze andere methoden.

  2. Schrijf code waarmee de aangepaste taakklasse wordt geregistreerd bij de registerfactory.

  3. Bouw de oplossing voor uw aangepaste taak.

    Opmerking

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

  4. Maak een Validator-element onder het element ValidatorLibrary in de wizard UDI Designer configuratiebestand dat vergelijkbaar is 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 Validator-elementen moeten de parameter Bericht bevatten. Geef alle andere parameters op zoals vereist door de validator. In het vorige fragment wordt bijvoorbeeld de parameter NamedPattern gebruikt om een parameter op te geven voor de naam van een vooraf gedefinieerd patroon voor reguliere expressies.

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

  6. Kopieer de DLL 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 de UDI-wizard

Onderdelen van wizardpagina

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

Onderdelenexemplaren maken

De UDI-wizard maakt gebruik van klassefactory's om nieuwe exemplaren van objecten voor u te maken. Deze factory's worden geregistreerd bij een fabrieksregister, waarbij een tekenreeks wordt gebruikt als sleutel voor de factory. Het onderdeel WmiRepository wordt bijvoorbeeld geïdentificeerd door de tekenreeks 'Microsoft.Wizard.WmiRepository', die beschikbaar is in het headerbestand IWmiRepository als ID_WmiRepository.

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

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

De functie CreateInstance is een typeveilige sjabloonfunctie voor het maken van nieuwe exemplaren van onderdelen. PWmiRepository is een slimme aanwijzer, zodat het aantal verwijzingen voor u afhandelt.

Creatable Components

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

De lijst met onderdeel-id's voor onderdelen (de naam van het onderdeel 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 de batterij werkt
ID_AppDiscoveryTask (ITask, IWizardComponent) Een gespecialiseerde taak om te ontdekken 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 voor het kopiëren van een of meer bestanden
ID_FormController (IFormController) U zult het liefst niet zelf een exemplaar hoeven te maken, omdat uw pagina een eigen exemplaar ontvangt
ID_InvalidCharactersValidator (IValidator) Zorgt ervoor dat er geen tekstveld tekens bevat uit een lijst die aan de validator is verstrekt
ID_Logger (ILogger) U zult het liefst niet zelf een exemplaar hoeven te maken, omdat uw pagina een aanwijzer naar het gedeelde exemplaar ontvangt
ID_NonEmptyValidator (IValidator) Een validator die ervoor zorgt dat er geen veld leeg is
ID_PasswordValidator (IValidator) Een validator die ervoor zorgt dat geen twee tekstvelden dezelfde inhoud hebben
ID_Regex (IRegEx) Evalueert reguliere expressies, op zoek 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) Hiermee beheert u 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 besturingsonderdelen worden weergegeven in Tabel 4 en Tabel 5.

Tabel 4. Adreslijstbesturingselementen

ID Beschrijving
ID_Directory (IDirectory) Een gevel voor het verkrijgen 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) Bepaalt of uw CPU 32- of 64-bits is
ID_DomainJoinValidator (IDomainJoinValidator) Heeft enkele methoden om te controleren of een set referenties lid mag worden van een domein
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Gebruikt WMI om een lijst met stations op uw computer op te halen
ID_WiredNetworkTask (ITask) Een taak die controleert of u bent verbonden met het netwerk met een vaste (in plaats van draadloze) netwerkadapter

Besturingsonderdelen

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

Tabel 6. Onderdelen

Typen dialoogvensters voor besturingselementen Beschrijving
CONTROL_CHECK_BOX (ICheckBox) Een façade voor het werken met selectievakjebesturingselementen
CONTROL_COMBO_BOX (IComboBox) Een gevel voor besturingselementen met invoervak
CONTROL_GENERIC (IControl) Hiermee kunt u met de meeste typen besturingselementen werken om de in- en zichtbare status te beheren
CONTROL_LIST_VIEW (IListView) Een gevel die toegang biedt tot de functies van een lijstweergave
CONTROL_PROGRESS_BAR (IProgressBar) Een voorgevel voor het werken met de positie van een voortgangsbalkbesturing
CONTROL_RADIO_BUTTON (IRadioButton) Een gevel voor het werken met keuzerondje
CONTROL_STATIC_TEXT (IStaticText) Een gevel die lees-/schrijfmachtigingen biedt voor de tekst van een besturingselement, zoals een label of tekstvak
CONTROL_TREE_VIEW (ItreeView) Een gevel voor het werken met een besturingselement voor boomweergave

Installatiekopieënlijstonderdeel

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

FormController-onderdeel

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

InvalidCharacterValidator-onderdeel

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

Deze validator zoekt naar één eigenschap (een setter-element in het bestand .config) met de naam InvalidChars, een lijst met tekens die niet zijn toegestaan. De tekens in een tekstvak worden gecontroleerd; als de tekst tekens uit deze lijst bevat, meldt het onderdeel een fout.

Niet-mptyValidator-onderdeel

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

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), met de tekstwaarde 'Microsoft.Wizard.Validation.Password'.

Deze validator werkt met twee verschillende tekstbesturingselementen (besturingselementen die ondersteuning bieden voor IStaticText) en rapporteert een fout als ze niet dezelfde waarden bevatten. Met andere woorden, het mislukt als de tekstvakken Wachtwoord en Wachtwoord bevestigen niet overeenkomen.

Omdat deze validator twee besturingselementen vereist, heeft deze meer installatie nodig dan andere validators. De installatie 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 'onderliggend' van het besturingselement Wachtwoord . Als de formuliercontroller het besturingselement Wachtwoord uitschakelt, wordt op die manier ook het besturingselement Wachtwoord bevestigen uitgeschakeld. Voeg vervolgens een wachtwoordvalidator toe aan het formulier. Geef ten slotte de wachtwoordvalidator op met de interface voor het besturingselement Wachtwoord bevestigen .

Vanwege de vereiste voor twee besturingselementen moet u code gebruiken om deze validator in te stellen in plaats van het .config XML-bestand.

RegExValidator-onderdeel

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

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

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

Tabel 7. Benoemde patroonsetters

Patroon Beschrijving
Gebruikersnaam Controleert of de tekst een van de formulierdomein\gebruiker of user@domain
Computernaam 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 klasse factory's en services bij. Het implementeert de IFactoryRegistry-interface en is indirect beschikbaar via de containermethode van uw pagina. Bovendien laadt het register extensie-DLL's. Nadat een DLL is geladen, zoekt het register naar een geëxporteerde functie met de naam RegisterFactories. U moet deze functie implementeren en hierin de klassefactory's registreren voor uw pagina's, taken en validators (en eventuele andere klassefactory's die u wilt registreren). Hier volgt 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 uw pagina via de Logger-methode (geïmplementeerd door WizardPageImpl). U gebruikt deze methode om vermeldingen naar het logboekbestand te schrijven. De inhoud van het logboekbestand is handig voor het diagnosticeren van problemen die gebruikers mogelijk de UDI-wizard hebben uitgevoerd.

PropertyBag-onderdeel

De eigenschappenverzameling is een container voor geheugenvariabelen. Deze is beschikbaar op uw pagina met behulp van Container()->Properties(). Geheugenvariabelen zijn handig voor het doorgeven van tijdelijke gegevens tussen verschillende pagina's.

TSVariableBag- en TSRepository-onderdelen

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

WmiRepository-onderdeel

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

Helperklassen voor wizardpagina's

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

Tabel 8. Helperklassen

Helperklasse Beschrijving
KlasseFactoryImpl Dit is een handige basisklasse voor het maken van een klassefactory die u vervolgens kunt registreren bij het fabrieksregister.
Interfacesjabloonklasse Gebruik deze sjabloonklasse als u een onderdeel wilt bouwen dat meer dan één interface implementeert.
Helperklasse pad Deze klasse biedt algemene bestands-/mapbewerkingen.
Aanwijzersjabloonklasse Deze klasse biedt referentietelling voor levensduurbeheer in COM-onderdelen. Het is belangrijk om interfaces vrij te geven wanneer u er klaar mee bent. Deze sjabloonklasse verwerkt de levensduur automatisch.
PUnknown-klasse Deze klasse is een slimme aanwijzer specifiek voor de IUnknown-interface. Gebruik voor alle andere interfaces de sjabloonklasse Pointer.
StringUtil Helper-klasse Deze klasse biedt helpermethoden waarmee u gemakkelijker met tekenreeksen kunt werken.
SubInterface-sjabloonklasse Met deze basisklasse kunt u eenvoudiger een onderdeel implementeren dat ondersteuning biedt voor een interface die zelf wordt overgenomen van een andere interface.
Sjabloonklasse UnknownImpl Deze klasse verwerkt de meeste details van het maken van een COM-onderdeel.
WizardComponent-sjabloonklasse Deze basisklasse wordt gebruikt voor het maken van onderdelen die toegang nodig hebben tot de wizardservices, zoals het maken van onderdelen en logboekregistratie.
Sjabloonklasse WizardPageImpl Deze basisklasse moet worden gebruikt als basisklasse voor alle aangepaste wizardpagina's

KlasseFactoryImpl

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

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

Hier volgt een fragment uit het LocationPage.cpp-bestand op de voorbeeldwizardpagina die wordt gebruikt om de klassefactory voor de pagina te definiëren.

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

Interfacesjabloonklasse

Gebruik deze sjabloonklasse als u een onderdeel wilt bouwen dat meer dan één interface implementeert, bijvoorbeeld:

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

Met deze code maakt u een basisklasseketen die zowel IFieldCalback als de interfaces ondersteunt die WizardPageImpl ondersteunt (dit is toevallig IWizardPage).

Helperklasse pad

Deze klasse biedt algemene bestands-/mapbewerkingen:

static inline std::wstring GetModulePath(HINSTANCE hModule)

Het retourneert ook het volledige pad naar het .exe- of .dll-bestand met de instantie-ingang die u aan deze methode opgeeft:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)

De klasse retourneert het volledige pad en de bestandsnaam van het .exe- en .dll-bestand met de instantie-ingang die u aan deze methode opgeeft:

static inline std::wstring GetDirectoryName(LPCWSTR fullName)

. . . of alleen het pad tijdens het strippen van de bestandsnaam:

static inline std::wstring GetFileName(LPCWSTR fullName)

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

Aanwijzersjabloonklasse

Deze klasse wordt gedefinieerd in Pointer.h. Omdat COM-onderdelen gebruikmaken van referentietelling voor levensduurbeheer, is het belangrijk dat u altijd interfaces vrijgeeft wanneer u er klaar mee bent. Microsoft biedt een sjabloonklasse die de levensduur automatisch afhandelt. Als u bijvoorbeeld een slimme aanwijzer voor een XML-interface wilt, kunt u iets als dit schrijven:

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

De eerste regel definieert de slimme aanwijzer. De tweede regel toont het ophalen van een slimme aanwijzer via een andere aanroep. De operator& geeft altijd een bestaande interface vrij als deze er een bevat en retourneert het adres voor de interne aanwijzer. Zodra u een aanwijzer als deze hebt opgehaald, roept de instantie van PointerRelease voor u aan wanneer de variabele buiten het bereik valt. Microsoft raadt u aan slimme aanwijzers te gebruiken in plaats van AddRef en Release handmatig aan te roepen.

Bovendien roept de aanwijzerklasse Smart Pointer QueryInterface aan om andere interfaces voor u op te halen. Wanneer het fabrieksregister bijvoorbeeld een nieuw exemplaar van een onderdeel maakt, bevat deze code als volgt:

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

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

PUnknown-klasse

Deze klasse is een slimme aanwijzer specifiek voor de IUnknown-interface . Gebruik voor alle andere interfaces de sjabloonklasse Pointer .

StringUtil Helper-klasse

Deze klasse is gedefinieerd in Utilities.h en biedt helpermethoden waarmee u gemakkelijker met tekenreeksen kunt werken:

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)

Met deze methode worden twee tekenreeksen vergeleken terwijl hoofdletters worden genegeerd (zie Tabel 9).

Tabel 9. StringUtil Helper-klasse

Retourneert Beschrijving
0 Tekenreeksen komen overeen, waarbij hoofdletters 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 Format-methoden in die zin dat parameters de vorm hebben van {0}. Ze voeren echter geen opmaak 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 u zelf geen geheugen hoeft toe te wijzen aan tekenreeksen of buffers.

SubInterface-sjabloonklasse

Met deze basisklasse kunt u eenvoudiger een onderdeel implementeren dat ondersteuning biedt voor een interface die zelf wordt overgenomen van een andere interface. De interface ICheckBox neemt bijvoorbeeld over van IControl. Deze klasse wordt als volgt 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.

Sjabloonklasse UnknownImpl

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

classDirectory :public UnknownImpl<IDirectory>

Deze code definieert een klasse die de IDirectory-interface ondersteunt.

WizardComponent-sjabloonklasse

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

Als voorbeeld ziet u hoe het onderdeel CopyFilesTask wordt gedefinieerd:

classCopyFilesTask :public WizardComponent<ITask>
{
    ...

De parameter voor deze sjabloonklasse is de 'hoofdinterface' die u wilt gebruiken voor uw onderdeel, die in het geval van taken ITask is. Als u WizardComponent gebruikt, betekent dit dat uw onderdeel zowel de interface ondersteunt die u opgeeft (ITask in dit voorbeeld) als IWizardComponent.

Wanneer u het class factory-register 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.

Sjabloonklasse WizardPageImpl

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 uw dialoogvenstersjabloon.

Wizardpagina-interfaces

De UDI-wizard maakt gebruik van interfaces voor toegang tot de verschillende besturingselementen op uw pagina. Op uw pagina gebruikt u de functie GetControlWrapper om een besturingswrapper 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 wanneer 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 logboekregistratie zodat het informatie kan vastleggen.

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 ongeldig
E_FAIL Kan de domeincontroller niet vinden; logboeken controleren voor details
HRESULT HasAccess(LPCTSTR-gebruikersnaam, LPCTSTR-wachtwoord, LPCTSTR-domein, LPCTSTR computerName, 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 afzonderlijke thread. U kunt deze klasse ook gebruiken wanneer u bewerkingen wilt uitvoeren op een afzonderlijke thread. Taken zijn elke klasse die ondersteuning biedt voor de ITask-interface .

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

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

Met deze interface wordt het onderdeel geïnitialiseerd, zoals wordt weergegeven in tabel 12.

Tabel 12. HRESULT Init

Parameter Beschrijving
pTask Aanwijzer naar de klasse die de code bevat die u wilt uitvoeren op een andere thread
ID Een getal dat u kunt gebruiken in de methode Voltooid van de callback om aan te geven welke taak is uitgevoerd; handig als u meerdere taken start met dezelfde callback-methode
pCallback Een klasse die de methode Finished implementeert, die wordt aangeroepen wanneer een taak wordt uitgevoerd; de aanroep van de methode Finished bevindt zich op de achtergrondthread, niet in de UI-thread
void Start(void)

Deze methode start de taak op een achtergrondthread en retourneert de elementen in tabel 13.

Tabel 13. Achtergrondthread retourneren

Retourneert Beschrijving
E_INVALIDARG De taak wordt al uitgevoerd, dus u kunt deze nu niet starten.
E_FAIL Er is een probleem opgetreden bij het starten van de thread.
S_OK De thread is gestart.
BOOL wordt uitgevoerd()

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

HRESULT Wait(DWORD waitMilliseconds)

Deze methode wacht totdat de thread niet meer wordt uitgevoerd of het aantal milliseconden is verstreken.

HRESULT Terminate(DWORD exitCode)

Met deze methode wordt de thread die wordt uitgevoerd, beëindigd (zie Tabel 14 en Tabel 15). Het kan even duren voordat dit proces is voltooid nadat deze methode is geretourneerd.

Tabel 14. HRESULT Exit Code beëindigen

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

Tabel 15. Beëindigingscodes

Retourneert Beschrijving
E_FAIL De aanroep om te beëindigen is mislukt.
S_OK De aanvraag 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 op te halen (zie Tabel 16).

Tabel 16. Resultaatcodes

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

Met deze methode wordt de achtergrondthread vrijgegeven. Het retourneert E_INVALIDARG als de thread momenteel wordt uitgevoerd en S_OK anders.

ICheckBox-interface

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

Stel de ingeschakelde status van het selectievakje in. Wanneer de methode WAAR is, is het selectievakje ingeschakeld; wanneer de methode ONWAAR is, wordt het selectievakje uitgeschakeld.

BOOL IsButtonChecked()

Deze methode rapporteert de huidige controlestatus van een selectievakje.

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 CheckBoxWrapper . U haalt een exemplaar van dit onderdeel op met behulp van de helperfunctie GetControlWrapper met het type CONTROL_COMBO_BOX.

HRESULT Bind([in] IBindableList *pList)

Gebruik deze methode wanneer u een gegevensbron hebt waarmee de interface IBindableList wordt geïmplementeerd. De keuzelijst initialiseert de inhoud met de bijschriften uit deze lijst.

HRESULT Select(int index)

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

int Geselecteerd(ongeldig)

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

void Add([in] LPCTSTR onderschrift)

Voeg handmatig een item toe aan de keuzelijst met invoervak.

HRESULT GetText([out, retval] LPBSTR pText)

Haal de tekenreeks van het geselecteerde item op in de keuzelijst met invoervak.

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 behulp van de helperfunctie GetControlWrapper met het type CONTROL_GENERIC.

HRESULT SetEnable(BOOL inschakelen)

Schakel het besturingselement in of uit.

BOOL IsEnabled(void)

Retourneert WAAR als het besturingselement is ingeschakeld, ONWAAR als dit 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. Met één methode wordt aangegeven 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 deze alleen de breedte van de CPU rapporteert (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 Map , dat u maakt met behulp van ID_Directory, biedt een façade voor het werken met mappen in het bestandssysteem.

BOOL FileExists(LPCWSTR-naam)

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

BOOL FindFirst([in] LPCWSTR-naam)

Met deze methode wordt een eerste overeenkomst gevonden voor 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 name)

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

DWORD FoundAttributes(void)

Deze methode retourneert het kenmerk voor het meest recent gevonden bestand of de meest recente gevonden map. U kunt code als volgt gebruiken om te testen of het een map is:

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

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

void FinishFind(void)

Met deze methode worden resources 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 *pUsername, IStaticText *pPassword, IStaticText *pComputerName)

Initialiseer het exemplaar, zoals weergegeven in tabel 17.

Tabel 17. HRESULT Init - Initialisatie van exemplaren

Parameter Beschrijving
pLogger Het logboekregistratie-exemplaar, dat beschikbaar is voor uw pagina via de Logger-methode van de pagina
pContainer Geeft de resultaten van de containermethode van uw pagina door
pUsername Het tekstvak met de gebruikersnaam die moet worden gevalideerd
pPassword Het tekstvak met het wachtwoord dat moet worden gevalideerd
PComputerName Het tekstvak met de naam van de computer die uiteindelijk wordt toegevoegd aan het domein
HRESULT IsUsernameValid(LPCWSTR domainName)

Deze methode gebruikt de methode IADHelper-ValidLogon> om het werk uit te voeren. Zie deze methode voor meer informatie.

BOOL CanModifyComputerAdEntry(LPCWSTR domainName)

Controleer of de gebruiker rechten heeft om de computervermelding te wijzigen. Het meeste werk wordt uitgevoerd door IADHelper-HasAccess>. Als deze methode ONWAAR retourneert, controleert u het logboekbestand voor meer informatie.

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 wordt weergegeven als een 'where'-component in de query. De volgende regel retourneert bijvoorbeeld alleen USB-stations:

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

Stel de minimale schijfgrootte in bytes in voor stations die worden geretourneerd door de query.

HRESULT Update(void)

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

HRESULT AddProperty(ENUM_DISK_QUERY_SECTION sectie, 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 toont drie van de nuttige eigenschappen.

Tabel 18. HRESULT AddProperty: nuttige eigenschappen

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

Het aantal records dat de query retourneert. Roep Update aan 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 weergegeven in tabel 19.

Tabel 19. HRESULT GetProperty

Parameter Beschrijving
Index Index op basis van nul naar de resultaatrecord
propName Naam van de eigenschap, zoals 'Grootte'
Value Bij het retourneren bevat deze parameter een variantwaarde van de eigenschap
HRESULT GetCaption(size_t index, LPBSTR pCaption)

Met deze methode wordt de onderschrift opgehaald voor een record die 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(breedte, hoogte, UINT-vlaggen)

Maak een nieuwe lijst met installatiekopieën die door dit onderdeel worden beheerd. Roep deze methode slechts één keer aan.

HImageList GetImageList(void)

Deze methode retourneert de ingang voor de lijst met installatiekopieën voor het geval u andere bewerkingen in de lijst met installatiekopieën moet uitvoeren.

int AddImage(HInstance hInstance, int resourceId)

Voeg vanuit een resource een nieuwe afbeelding toe aan de lijst met afbeeldingen, zoals wordt weergegeven in Tabel 20.

Tabel 20. HRESULT IImageList-interface

Parameter Beschrijving
Hinstance Exemplaargreep van de module die de bitmapresource 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 behulp van de helperfunctie GetControlWrapper met het type CONTROL_LIST_VIEW.

int AddItem([in] LPCTSTR text)

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)

Voeg een nieuwe kolom toe aan de lijstweergave.

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

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

Tabel 21. HRESULT SetSubItem

Parameter Beschrijving
Index 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 wordt weergegeven
int GetWidth(void)

Deze methode retourneert de breedte van het hele tekstvak.

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)

Deze methode retourneert de index van het geselecteerde lijstweergave-item.

HRESULT SelectItem(int-index)

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

BOOL IsItemChecked(int-index)

Deze methode retourneert 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)

Deze methode retourneert het aantal items in de lijstweergave.

HRESULT CreateImageList(breedte, hoogte, UINT-vlaggen)

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

int AddImage(HINSTANCE hInstance, int resourceId)

Voeg een afbeelding toe aan de lijst met afbeeldingen van de lijstweergave. U moet Eerst CreateImageList aanroepen.

HRESULT SetImage(int index, int imageIndex)

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

HRESULT Clear(void)

Verwijder alle items 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 behulp van 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 maximaal bereik van 100.

int GetPercentage(void)

Deze methode retourneert de huidige positie van de voortgangsbalk.

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 RadioButtonWrapper . U haalt een exemplaar van dit onderdeel op met behulp van de helperfunctie GetControlWrapper met het type CONTROL_RADIO_BUTTON.

void SetGroup(int firstId, int lastId)

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

void CheckRadio(int id)

Stel het specifieke keuzerondje in op één knop in de groep geselecteerde 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 inschakelen)

Met deze methode wordt een keuzerondje in- of uitgeschakeld.

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 StaticTextWrapper . U haalt een exemplaar van dit onderdeel op met behulp van 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)

Deze methode retourneert de huidige waarde van de tekst voor het besturingselement.

ITask-interface

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

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

Hier volgen onderdelen 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 uitziet:

<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 elementen. 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. Deze methode moet S_OK retourneren als er geen fouten zijn opgetreden en kan een andere HRESULT retourneren als er een fout is opgetreden tijdens het uitvoeren van de taak. Andere waarden dan S_OK die deze methode retourneert <, komen overeen met Foutelementen> in de <sectie ExitCodes> als u de preflight-pagina gebruikt.

De parameter pReturnCode moet worden bijgewerkt met een getal dat de status van de taak rapporteert. Deze waarden worden door de preflights-pagina gekoppeld aan <ExitCode-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 het onderdeel TreeViewWrapper . U haalt een exemplaar van dit onderdeel op met behulp van de helperfunctie GetControlWrapper met het type CONTROL_TREE_VIEW.

void EnableCheckboxes(void)

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

HRESULT CreateImageList(breedte, hoogte, UINT-vlaggen)

Voeg een nieuwe lijst met afbeeldingen toe aan het besturingselement structuurweergave. De parameter vlaggen wordt in de aanroep doorgegeven aan de ImageList_Create Win32-functie.

int AddImage(HINSTANCE hInstance, int resourceId)

Voeg een installatiekopie toe aan de lijst met installatiekopieën vanuit een resource (resourceId) in de module met de instantie-handle hInstance.

HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)

Voeg een knooppunt toe aan de structuurweergave. Het nieuwe knooppunt wordt toegevoegd op het hoogste niveau als hParent NULL is. Geef anders de ingang op bij het bovenliggende item waaraan u het nieuwe item wilt toevoegen. Deze methode retourneert de greep naar het nieuwe item.

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

Stel de afbeelding in die moet worden gebruikt voor een structuurweergave-item. U kunt zowel de normale als de uitgevouwen afbeelding instellen.

void Clear(void)

Verwijder alle items uit de structuurweergave.

BOOL SetFirstVisible(HTREEITEM-item)

Zorg ervoor dat het item van de structuurweergave zichtbaar is. De structuurweergave schuift zo nodig om dit item zichtbaar te maken.

BOOL SelectItem(HTREEITEM-item)

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

void CheckItem(HTREEITEM-item, UINT checkState)

Met de methode wordt in principe de afbeelding ingesteld die wordt weergegeven voor het selectievakje in de structuurweergave. Deze afbeeldingen bevinden zich in een afzonderlijk besturingselement ImageList dat door de structuurweergave wordt beheerd. Deze lijst met afbeeldingen bevat standaard drie afbeeldingen, weergegeven in Tabel 22.

Tabel 22.void CheckItem Image List Default

checkState Beschrijving
0 Lege
1 Uitgeschakeld
2 Geselecteerde
HTREEITEM SelectedItem(void)

Deze methode retourneert de greep van het geselecteerde structuurweergave-item.

int SetItemHeight(KORTE hoogte)

Met deze methode stelt u de hoogte van alle items in het besturingselement structuurweergave in pixels in. Hiermee wordt de vorige hoogte in pixels geretourneerd.

HRESULT EnableItem(HTREEITEM-item, BOOL inschakelen)

Met deze methode wordt één item in de structuur in- of uitgeschakeld. Als u een item met onderliggende items uitschakelt, worden de onderliggende items niet uitgeschakeld.

void Expand(HTREEITEM hItem, BOOL expand)

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

HTREEITEM GetChild(HTREEITEM hParent)

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

HTREEITEM GetParent(HTREEITEM hNode)

Deze methode retourneert de ingang van het bovenliggende knooppunt voor een knooppunt in de structuurweergave of NULL als het knooppunt zich op het hoogste niveau bevindt.

HTREEITEM GetNextItem(HTREEITEM hPrevious)

U kunt deze methode aanroepen met een ingang die GetChild retourneert om alle onderliggende elementen van een knooppunt te doorlopen. Deze methode retourneert het volgende zusje in de structuur met dezelfde bovenliggende structuur.

UINT IsChecked(HTREEITEM-item)

Deze methode retourneert 0 als het structuurweergaveknooppunt niet is geselecteerd en 1 als dat het wel is.

BOOL IsEnabled(HTREEITEM-item)

Deze methode retourneert WAAR als het structuurweergaveknooppunt 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 structuurweergave-item wijzigt. U moet de ITreeViewEvent implementeren in uw onderdeel om deze callbacks te ontvangen.

void SetSelectedBackColor(COLORREF-kleur)

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

Meestal gebruikt u deze interface, samen met IWmiRepository, bij het werken met WMI-aanroepen. Met de IWmiIteration-interface kunt u de waarden herhalen die een query retourneert.

HRESULT Next(void)

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

Tabel 23. HRESULT Next(void) Query retourneert

HRRESULT Beschrijving
S_OK Verplaatst naar het volgende resultaat; u kunt GetProperty gebruiken om eigenschappen van dat resultaat op te halen.
S_FALSE Er zijn geen items meer in de lijst.
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 Naam van de eigenschap die u wilt ophalen
pValue Verwijst naar een VARIANT-structuur die bij het retourneren de eigenschapswaarde bevat

Tabel 25. HRESULT GetProperty-resultaat

HRESULT Beschrijving
S_OK De eigenschapswaarde is opgehaald.
WBEM_E_NOT_FOUND Er is geen eigenschap met de naam.
E_NOT_VALID_STATE Er is geen huidige record.

Opmerking

De methode GetProperty kan andere WMI-foutcodes retourneren dan die in tabel 25. De vermelde 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 het onderdeel WmiRepository (ID_WmiRepository).

HRESULT SetNamespace(LPCWSTR namespaceName)

Met deze methode stelt u de WMI-naamruimte in die wordt gebruikt voor de query. Roep deze methode aan voordat u ExecQuery aanroept. Als u deze methode niet aanroept, is 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 wordt 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 Een aanwijzer doorgeven aan een interfaceaanwijzer, die bij terugkeer wordt ingevuld met een interface, zodat u toegang hebt tot de queryresultaten

Tabel 27. HRESULT-queryresultaat

HRESULT Beschrijving
S_OK De query is voltooid
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 wizard UDI heeft een eigen formuliercontroller waarmee deze interface wordt geïmplementeerd. U gebruikt deze controller om de veldgegevens in het XML-bestand .config te verbinden met de besturingselementen op uw pagina. De formuliercontroller verwerkt vervolgens veel van de details voor u.

Het formulier instellen

Over het algemeen stelt u de formuliercontroller in de OnWindowCreated-methode van uw pagina in. Hiervoor worden meestal de methoden aangeroepen die worden weergegeven in tabel 28.

Tabel 28. Methode OnWindowCreated

Methode Beschrijving
Init Initialiseert de formuliercontroller
AddField Biedt een verbinding tussen een veld in het .config XML-bestand dat een tekenreeksnaam is en een besturingselement in het dialoogvenster van uw 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 die zijn ingeschakeld of uitgeschakeld samen met hun bovenliggende of op basis waarvan keuzerondje is geselecteerd
InitFields Roep aan nadat u alle methoden voor toevoegen hebt aangeroepen om het formulier in te stellen
Valideren Voert de initiële validatie uit
Formulierevenementen verwerken

Voeg de volgende aanroep toe aan de methode OnControlEvent :

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

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

Formuliergegevens opslaan

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

Tabel 29. Methode OnNextSelected

Methode Beschrijving
InitSection Geeft de naam op van de sectie die wordt weergegeven op de pagina Samenvatting voor deze pagina
SaveFields Veldwaarden opslaan in takenreeksvariabelen en op de pagina Samenvatting
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)

U roept deze methode meestal aan bij het begin van de OnWindowCreated-methode van uw pagina. De opdracht ziet er ongeveer als volgt uit:

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

Deze methode wordt intern aangeroepen en u moet deze niet zelf aanroepen. Het levert de XML van de pagina aan de formuliercontroller.

Valideren
HRESULT Validate(void)

Met deze methode worden alle validators uitgevoerd die aan besturingselementen zijn gekoppeld. Als een validator niet wordt doorgegeven, geeft de formuliercontroller een waarschuwingsbericht weer en schakelt de knop Volgende uit, waarna de verwerking van validators wordt gestopt. Normaal gesproken hoeft u deze methode alleen aan te roepen aan het einde van uw OnWindowCreated-methode ; het retourneert altijd S_OK.

AddToGroup
AddToGroup(int groupControlId, int controlId)

Met deze methode wordt een besturingselement toegevoegd als 'onderliggend' 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 de inschakelingsstatus van het onderliggende besturingselement wordt gecontroleerd
Controlld De id van het besturingselement dat u als onderliggend element wilt toevoegen
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)

Met deze methode wordt de status van de onderliggende besturingselementen van een groep bijgewerkt op basis van de status van het bovenliggende besturingselement. Over het algemeen hoeft u deze methode niet zelf aan te roepen, omdat de formuliercontroller deze voor u aanroept.

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 de 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 de 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 wordt weergegeven in tabel 31. Deze methode is bijvoorbeeld handig als u regels hebt voor besturingselementen die niet worden gedekt door formuliervalidatie en u validatie voor een besturingselement moet uitschakelen. Met andere woorden, u zou deze methode normaal gesproken niet aanroepen. 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 TRUE om validatie uit te schakelen en op FALSE 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 XML-bestand .config en de besturingselement-id in het dialoogvenster van uw pagina, zoals wordt weergegeven in Tabel 32. U moet deze methode aanroepen voordat InitFields wordt aangeroepen, omdat InitFields deze informatie gebruikt. Deze methode retourneert altijd S_OK.

Tabel 32. HRESULT AddField

Parameter Beschrijving
Veldnaam Naam van het veld zoals het wordt weergegeven in de XML van uw pagina
controlId De id van het besturingselement in de dialoogvenstersjabloon van uw pagina
suppressLog 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, een van de volgende:

- 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 wordt een besturingselement toegevoegd aan een benoemde keuzerondjegroep, zoals weergegeven in tabel 33. U moet dit aanroepen vóór de methode InitFields , omdat deze methode gebruikmaakt van kenmerken op het element RadioGroup om instellingen te beheren voor alle keuzerondjes in de groep. Keuzerondjes kunnen bijvoorbeeld worden vergrendeld, zodat alle keuzerondjes zijn uitgeschakeld, maar onderliggende besturingselementen worden in- of uitgeschakeld op basis van het keuzerondje dat 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 om aan deze groep toe te voegen
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)

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

Tabel 34. EnableRadioGroup

Parameter Beschrijving
Groupname Naam van een keuzerondjegroep die u al hebt gedefinieerd met een aanroep naar AddRadioGroup
Inschakelen Stel in op TRUE om de keuzerondjegroep in te schakelen en ONWAAR om de groep uit te schakelen

Tabel 35. HRESULT EnableRadioGroup

HRESULT Beschrijving
S_OK Groep in- of uitgeschakeld
E_INVALIDARG Er is geen keuzerondjegroep met de naam die u hebt opgegeven
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)

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

De parameter pFieldCallback is optioneel. Als u dit opgeeft, roept de formuliercontroller SetFieldDefault aan voor besturingselementen die niet zijn CONTROL_STATIC_TEXT of CONTROL_CHECK_BOX. Met dit gedrag 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 takenreeksvariabelen en in de samenvattingsgegevens die worden weergegeven op de pagina Samenvatting . Als u een aanwijzer opgeeft in pFieldCallback , kunt u het opslaan van waarden afhandelen 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 de XML.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)

Met deze methode worden de samenvattingsgegevens geïnitialiseerd die worden weergegeven op de pagina Samenvatting , zoals wordt weergegeven in Tabel 36. Roep deze methode aan in de methode OnNextSelected 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. Deze wordt gebruikt om ervoor te zorgen dat elke pagina een eigen samenvattingsinformatie heeft.
sectionCaption De koptekst die wordt weergegeven op de pagina Samenvatting voor de overzichtsinformatie van deze pagina. Normaal gesproken gebruikt u DisplayName() als de waarde voor deze parameter.
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)

Met deze methode kunt u overzichtsitems toevoegen aan de pagina Samenvatting boven en buiten die items die zijn ingesteld met de XML. Zie Tabel 37.

Tabel 37. HRESULT AddSummaryItem

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

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

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

Met deze methode wordt de waarde van een tekst besturingselement opgeslagen in zowel een takenreeksvariabele als de samenvattingssectie. Normaal gesproken hoeft u deze methode 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 dat de waarde bevat die u wilt opslaan (of een ander besturingselement dat tekst kan retourneren)
tsVariableName Naam van de takenreeksvariabele die u wilt wijzigen
summaryCaption De onderschrift op de pagina Samenvatting voor deze waarde
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)

Met deze methode wordt de waarde van een takenreeksvariabele 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 besturingselementen kan verwerken, die moeten worden uitgevoerd om correct te werken. De waarden die u aan deze methode doorgeeft, zijn dezelfde waarden die worden doorgegeven aan de methode OnControlEvent .

IsValid
BOOL IsValid(void)

Deze methode retourneert de status van de meest recente validatie van het formulier. Als een van de controlevalidators een fout heeft gerapporteerd, retourneert deze methode ONWAAR. Met andere woorden, het retourneert alleen WAAR 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 onderdelen die één besturingselement op uw pagina kunnen valideren. De eenvoudigste manier om een validator te implementeren, is door er een subklasse van de klasse BaseValidator van te maken, die is gedefinieerd in het headerbestand BaseValidator.h.

HRESULT Init(IControl *pControl, LPCTSTR-bericht)

Als u een validator in code maakt, kunt u 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 wordt weergegeven als het besturingselement ongeldig 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 de XML van de pagina. Zie Tabel 40.

Tabel 40. Methode HRESULT Init

Parameter Beschrijving
pControl Het besturingselement dat uw validator moet valideren
pContainer Als uw validator toegang nodig heeft tot de logboekregistratie of andere onderdelen moet maken
pEigenschappen Biedt toegang tot de eigenschappen (setter-elementen) voor uw validator
BOOL, IsValid(LPBSTR pMessage)

Deze methode retourneert WAAR als het besturingselement geldig is of ONWAAR als het besturingselement ongeldig is. Bij terugkeer moet pMessage worden ingevuld met een nieuwe BSTR die het bericht bevat dat moet worden weergegeven wanneer het besturingselement ongeldig is.

HRESULT SetProperty(int propertyId, LPVARIANT pValue)

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

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

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

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

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

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 reguliere expressieverwerking.

BOOL MatchesRegex(LPCTSTR-invoer, LPCTSTR regex)

Met deze methode wordt de reguliere expressie uitgevoerd op basis van de invoertekst. De functie regex_match van de C++-standaardbibliotheek wordt gebruikt om het werkelijke werk uit te voeren. De methode retourneert WAAR als er overeenkomsten zijn, anders ONWAAR.

HRESULT GetMatch(size_t index, LPBSTR pValue)

Met deze methode kunt u de overeenkomsten ophalen uit de meest recente MatchesRegex-aanroep . Deze methode bevat geen foutverwerking en retourneert S_OK of genereert een uitzondering.

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 takenreeksvariabelen. U hebt toegang tot deze interface met behulp van de TSVariables() -methode van uw pagina.

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

Met deze methode wordt de waarde van een takenreeksvariabele gelezen.

Opmerking

Waarden worden in de cache opgeslagen na de eerste leesbewerking.

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

Met deze methode wordt de waarde van een takenreeksvariabele ingesteld. Deze waarde wordt opgeslagen in het geheugen. Takenreekswaarden worden geschreven zodra u Voltooien selecteert in de wizard UDI.

void Clear(void)

Met deze methode worden alle takenreekswaarden verwijderd die in het geheugen zijn opgeslagen.

HRESULT Remove([in] LPCTSTR variableName)

Met deze methode wordt een specifieke takenreekswaarde uit het geheugen verwijderd. De volgende keer dat u GetValue aanroept met dezelfde takenreeksnaam, probeert de methode deze op te halen uit de takenreeks.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Wanneer er takenreeksvariabelen worden geschreven, bijvoorbeeld wanneer u Voltooien selecteert in de wizard UDI, worden de namen en waarden naar het logboekbestand geschreven. Roep deze methode aan om logboekregistratie van gevoelige waarden, zoals wachtwoorden of pincodes, voor een specifieke takenreeksvariabele te onderdrukken.

void Save(void)

Met deze methode worden alle takenreekswaarden 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 bedoeld voor intern gebruik door TSVariableBag voor het lezen en schrijven van takenreeksvariabelen.

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 wizard UDI bevat een taak Voltooien waarmee takenreeksvariabelen worden opgeslagen wanneer u Voltooien selecteert. Als u de wizard annuleert, wordt met de taak alleen de takenreeksvariabele OSDSetupWizCancelled ingesteld op TRUE en worden wijzigingen in andere takenreeksvariabelen niet opgeslagen.

Als u uw eigen eindonderdeel maakt, moet u dit registreren met code zoals deze:

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 gegevensbrononderdeel hebt dat u wilt verbinden met een keuzelijst met invoervak door de bindmethode aan te roepen.

size_t Count(void)

Deze methode retourneert het aantal items in de lijst.

HRESULT GetCaption(size_t index, LPBSTR pCaption)

Deze methode retourneert de onderschrift van het item in een specifieke index.

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 kunnen worden opgeslagen op een pagina. U verkrijgt deze interface via methoden op de interface ISettingsProperties , die beschikbaar is voor uw pagina via de methode Instellingen .

Gegevens in de XML van een pagina kunnen er ongeveer als volgt 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>

Instellingen aanroepen()->GetDataNode(L"Network", &pData) geeft u een IDataNodes-exemplaar met twee gegevensitems (die elk op hun beurt twee eigenschappen hebben).

size_t Count()

Deze methode retourneert het aantal DataItem-elementen .

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

Het onderdeel dat deze interface ondersteunt, ondersteunt ook IBindableList, waardoor u eenvoudig een keuzelijst met invoervak kunt vullen met gegevens uit de XML van de pagina. Deze methode bepaalt welke eigenschap (setter) in elk DataItem-element wordt gebruikt voor deze binding. U kunt deze methode bijvoorbeeld aanroepen met DisplayName en deze setter-eigenschap gebruiken voor gegevensbinding. De keuzelijst met invoervak bevat vervolgens Openbaar en Ontwikkelaarsteam als items.

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

Met deze methode wordt een eigenschap opgehaald uit een van de DataItem-elementen . Zie Tabel 41 en Tabel 42.

Tabel 41. DataItem GetProperty

Parameter Beschrijving
Index De indexwaarde (beginnend met 0) van de DataItem waarvoor u een eigenschapswaarde wilt ophalen
propertyName Naam van de setter-eigenschap waarvoor u een waarde wilt ophalen
propertyValue Bevat bij retour de tekenreekswaarde van een eigenschap

Tabel 42. HRESULT GetProperty

HRESULT Beschrijving
S_OK De eigenschap is opgehaald.
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 DataItem te retourneren, retourneert deze de volledige DataItem verpakt in een ISettingsProperties-interface . Zie Tabel 43 en Tabel 44.

Tabel 43. HRESULT GetNode

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

Tabel 44. RESULTATEN VAN HRESULT GetNode

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 minimaal een paginafactory maken, een klasse waarmee IClassFactory wordt geïmplementeerd. (U kunt ClassFactoryImpl gebruiken als basisklasse voor uw fabriek.)

void Register(LPCTSTR type, IClassFactory *pFactory)

Met deze methode wordt een klassefactory geregistreerd bij het register. Zie Tabel 45.

Tabel 45. IClassFactory void Registreren

Parameter Beschrijving
Type Een tekenreeks die de factory identificeert die u registreert; over het algemeen moet deze parameter uw bedrijfsnaam in de tekenreeks hebben om ervoor te zorgen dat deze uniek is
pFactory Een aanwijzer 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 klasse factory is geregistreerd voor een type.

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

Met deze methode kunt u de klassefactory ophalen. Normaal gesproken roept u CreateInstance aan. Als u echter een groot aantal van hetzelfde onderdeel gaat maken, is het efficiënter om de factory op te halen en deze vervolgens te vragen om de exemplaren voor u te maken.

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

Met deze methode wordt een nieuw exemplaar van een onderdeel gemaakt, gezien het type. Gebruik in plaats daarvan de sjabloonmethode CreateInstance , waarmee u een typeveilig object kunt maken.

HRESULT SetContainer(IWizardPageContainer *pContainer)

Deze methode is alleen voor intern gebruik.

HRESULT RegisterService(REFGUID iid, IUnknown *pService)

Services zijn enkele exemplaren van een onderdeel dat op meerdere plaatsen kan worden gebruikt. U kunt deze methode gebruiken om een service op de ene pagina te registreren en vervolgens hetzelfde exemplaar 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 van RegisterService.

HRESULT SetLanguage(LANGID languageId)

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

LANGID GetLanguage()

Deze methode retourneert de waarde van de taal-id die u hebt opgegeven met de opdrachtregelparameter /locale voor de UDI-wizard. De methode retourneert een van de volgende waarden:

  • Waarde van de taal-id die is opgegeven met de opdrachtregelparameter /locale

  • 0, als u de /locale opdrachtregelparameter 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 informatie in een logboekbestand, waarmee u problemen in het veld kunt oplossen. Het is een goed idee voor uw pagina's om gegevens te registreren. U kunt een aanwijzer naar deze interface verkrijgen vanuit uw pagina met behulp van de methode Logger() van de pagina. Regels in het logboekbestand bevatten een niveaunummer dat fout-, normale, uitgebreide of foutopsporingsberichten aangeeft.

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 element Stijl in het bestand .config:

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

Deze methode is alleen voor intern gebruik.

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

Log
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 te registreren. Zie Tabel 46.

Tabel 46. HRESULT-fout

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

Deze methode is vergelijkbaar met de foutmethode , maar u kunt een tweedelig bericht opgeven. Het uiteindelijke bericht bevat 'message' en vervolgens 'message2' in het uitvoerbestand. Dit is gewoon een handige methode.

Normaal
HRESULT Normal(LPCTSTR component, LPCTSTR message)

Met deze methode wordt een normaal bericht opgeslagen. Zie de beschrijving van de foutmethode voor parameters.

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

Met deze methode wordt een normaal bericht opgeslagen. Zie de beschrijving van de methode Error2 voor parameters.

Uitgebreide
HRESULT Verbose(LPCTSTR component, LPCTSTR message)

Met deze methode wordt een uitgebreid bericht opgeslagen. Zie de beschrijving van de foutmethode voor parameters.

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

Met deze methode wordt een uitgebreid bericht opgeslagen. Zie de beschrijving van de methode Error2 voor parameters.

Debug
HRESULT Debug(LPCWSTR component, LPCWSTR message)

Met deze methode wordt een foutopsporingsbericht opgeslagen. Zie de beschrijving van de foutmethode voor parameters. Foutopsporingsberichten worden niet opgeslagen in het bestand, tenzij 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 het hoogste niveau van paginagegevens wilt bereiken, gebruikt u de methode Settings() van de pagina.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

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

IStringProperties * Properties()

Deze methode biedt toegang tot de waarden van de setter-eigenschap 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 een van de andere methoden te gebruiken als u kunt. Gebruik deze methode alleen als u knooppunten niet op een andere manier kunt bereiken.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

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

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

Haal een gegevenselement op op basis van het kenmerk Naam van dat element.

HRESULT GetDataNodes(IDataNodes **ppNodes)

Met deze methode wordt een lijst met DataItem-elementen onder het huidige knooppunt opgehaald. Roep Vanaf het paginaniveau GetDataNode aan om een ISettingsProperty-interface voor de gegevens op te halen. Roep in dat geval Vervolgens GetDataNodes aan om de lijst met records op te halen. Bijvoorbeeld met 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 toegang te krijgen tot de set DataItem-knooppunten onder een specifiek gegevensknooppunt . 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);
};

Op zichzelf is deze interface 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 setter-elementen die afkomstig zijn van XML. Deze interface is beschikbaar voor de eigenschappen van een pagina met behulp van Instellingen()->Eigenschappen().

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

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

Tabel 47. IHRESULT Eigenschapswaarde ophalen

Parameter Beschrijving
propertyName Naam van de eigenschap die u wilt lezen
pPropValue Bij het afsluiten bevat de eigenschapswaarde een tekenreeks (deze waarde is nullptr als er geen dergelijke eigenschap is.)

Tabel 48. IHRESULT: resultaten van eigenschapswaarde ophalen

HRESULT Beschrijving
S_OK De eigenschapswaarde 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, zodat dit onderdeel het meeste werk doet.

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. Het onderdeel TaskManager wordt geïnitialiseerd. Zie Tabel 49.

Tabel 49. HRESULT Init

Parameter Beschrijving
pPageView Biedt 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 controle-id van een ListView-besturingselement waarmee de lijst met taken en de status van deze taken wordt weergegeven
idMessage De besturingselement-id van een tekstvak dat wordt gebruikt om een bericht weer te geven voor de taak die u selecteert
idRetryButton De besturings-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 Gestart aan wanneer een taak wordt gestart en de methode Voltooid voor elke taak die wordt uitgevoerd.)
HRESULT SetFailMessage(LPCWSTR-bericht)

Met deze methode wordt het bericht ingesteld dat wordt weergegeven als een of meer taken mislukken.

HRESULT Start(void)

Met deze methode worden alle taken gestart. Elke taak wordt gestart op 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 lijst met taken.

HRESULT GetResultType)(size_t index, LPBSTR-type)

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

Tabel 50. HRESULT GetResultType

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

Het type wordt opgehaald door de afsluit- of foutcode van de taak te bekijken en een overeenkomst te vinden in het XML-element ExitCodes> van de taak<.

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

Deze methode wordt gebruikt door de voortgangs- en voorbereidende 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. Met andere woorden, u kunt een aangepaste setter toevoegen aan de XML van de taak en deze vervolgens ophalen met deze methode.

int GetSelectedIndex(void)

Met deze methode wordt de index van de geselecteerde taak opgehaald. Dit is handig als u aanvullende informatie over de taak wilt ophalen (zie GetProperty-methode ) die moet worden weergegeven voor de geselecteerde taak. De voortgangs- en voorbereidende pagina's gebruiken deze methode om een afbeelding voor de geselecteerde taak weer te geven.

HRESULT Wait(DWORD waitMilliseconds)

Deze methode helpt voornamelijk bij eenheidstests, zodat de test ervoor kan zorgen dat taken zijn voltooid voordat de eenheidstest wordt afgesloten. Normaal gesproken zou u deze methode niet aanroepen. Het retourneert wanneer alle taken zijn voltooid of de wachttijd is verstreken.

size_t FailedCount(void)

Deze methode retourneert het aantal taken dat momenteel is gemarkeerd als mislukt.

size_t WarningCount(void)

Deze methode retourneert het aantal taken dat momenteel is gemarkeerd als waarschuwing.

size_t SucceedCount(void)

Deze methode retourneert het aantal taken dat momenteel is gemarkeerd als geslaagd.

size_t RunningCount(void)

Deze methode retourneert het aantal taken dat momenteel wordt uitgevoerd.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

Roep deze methode aan vanuit het OnCommonControlEvent van uw pagina, zodat taskmanager gebeurtenissen kan verwerken die nodig zijn.

void OnControlEvent(WORD eventId, WORD controlId)

Roep deze methode aan vanaf het OnControlEvent van uw pagina, zodat taskmanager gebeurtenissen kan verwerken die nodig zijn.

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 onderdeel deze interface implementeert en u een klassefactory hebt geregistreerd bij het register, ontvangt uw onderdeel een aanwijzer naar het IWizardPageContainer-exemplaar wanneer deze wordt gemaakt. Dit helpt u bijvoorbeeld toegang te krijgen 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, zodat u dit meestal niet zelf hoeft te implementeren. De wizard roept al deze methoden voor u aan wanneer deze communiceert 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 containermethode (geïmplementeerd door WizardPageImpl) en biedt 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 * Properties(void)

Deze methode biedt toegang tot 'geheugen'-variabelen. Dit zijn eigenschappen die zich alleen in het geheugen bevinden terwijl de UDI-wizard wordt uitgevoerd. Deze eigenschappen zijn beschikbaar voor andere pagina's in code of 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 is getypt.

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

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

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

Deze methode verwerkt het werken met variabelen in tekenreekswaarden. Het ondersteunt de indelingen die worden weergegeven in Tabel 51 en Tabel 52.

Tabel 51. HRESULT ReplaceVariables

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

1. Gebruik de waarde van een takenreeksvariabele, indien aanwezig.
2. Gebruik de waarde van een omgevingsvariabele, indien aanwezig.
3. Verwijder anders deze tekst uit de tekenreeks.

Tabel 52. HRESULT-parameter

Parameter Beschrijving
Source De invoertekenreeks, die elke combinatie van $ en % variabelen kan bevatten of helemaal geen
pDest Bij terugkeer bevat een nieuwe tekenreeks waarin 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 overschakelen op basis van de naam van de pagina zoals gedefinieerd in het XML-bestand .config. Als u deze methode aanroept, wordt de optie OnNextSelected op uw pagina omzeild . Bovendien is het gedrag van deze methode onderhevig aan verandering, dus gebruik het op eigen risico.

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

Met deze methode wordt een berichtvak weergegeven met de tekst en onderschrift die u opgeeft. De parameter uType is een waarde die u kunt opgeven voor de functie MessageBox Win32.

BOOL InPreview(void)

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

HWND GetHwnd(void)

Deze methode retourneert de HWND voor het hoofddialoogvenster. Gebruik deze methode zorgvuldig. Over het algemeen is de programmeerinterface van de UDI-wizard zo ontworpen dat u nooit rechtstreeks met venstergrepen 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 uw pagina via de weergavemethode (geïmplementeerd door WizardPageImpl).

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

De UDI-wizard maakt gebruik van wrappers, die eigenlijk façades zijn voor interactie met de besturingselementen op uw pagina. Het gebruik van deze gevels in plaats van de werkelijke besturingselementen maakt het veel gemakkelijker om tests voor uw pagina te schrijven, omdat u van uw tests mock façades kunt voorzien.

In plaats van deze methode rechtstreeks te gebruiken, is het beter om de sjabloonmethode GetControlWrapper te gebruiken, die sterk is getypt, bijvoorbeeld:

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

Deze methode retourneert de venstergreep voor uw pagina. Over het algemeen hebt u geen toegang nodig tot deze venstergreep.

HWND GetControl(int itemId)

Als dat moet, kunt u deze methode aanroepen om de venstergreep voor een besturingselement op uw pagina op te halen. (Het is beter om de sjabloonfunctie GetControlWrapper aan te roepen).

HRESULT Show (ongeldig)

Deze methode is alleen voor intern gebruik.

HRESULT Hide(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 * Formulier(void)

Deze methode is alleen voor intern gebruik.

HRESULT FocusWizardButton(knop WizardButtons)

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

HRESULT SetEnable(knop WizardButtons, BOOL inschakelen)

Vraag om een van de wizardknoppen in of uit te schakelen. De knop komt mogelijk niet overeen met de status die u aanvraagt. Als u bijvoorbeeld de wizard UDI uitvoert met de schakeloptie /preview , zijn de knoppen altijd ingeschakeld. WizardButtons heeft twee waarden: BackButton en NextButton.

void ShowWarningMessage(LPCTSTR-bericht)

Met deze methode wordt een waarschuwingsbericht weergegeven onder aan het inhoudsgebied van de pagina. Dit bericht kan elke gewenste tekst zijn.

void HideWarningMessage(void)

Een waarschuwingsbericht verbergen dat u hebt weergegeven met een aanroep naar 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 het onderdeel ID_IXmlDocument , een gevel die is ontworpen om het werken met XML-documenten in C++ te vereenvoudigen.

HRESULT Load(LPCTSTR bestandsnaam)

Met deze methode wordt een XML-document uit een extern bestand geladen. Het retourneert S_OK als het bestand is geladen zonder fouten of S_FALSE als er een fout is opgetreden. Wanneer er een fout optreedt, kunt u het foutbericht krijgen door GetParseErrorMessage aan te roepen.

HRESULT LoadXml(LPCTSTR xml)

Met deze methode wordt een XML-document uit een tekenreeks geladen in plaats van een extern bestand. Afgezien van de bron voor het lezen van de XML, is het gedrag hetzelfde als de methode Laden .

HRESULT Save(LPCWSTR bestandsnaam)

Met deze methode wordt het XML-document dat zich in het geheugen bevindt, 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 van een extern schemabestand toegevoegd dat wordt gebruikt om het schema van uw XML-document te valideren wanneer het wordt geladen. De naamruimte die u opgeeft, is de tekenreeks die u kunt gebruiken in XPath-query's, hoewel deze 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);

Zodra u een nieuw knooppunt hebt gemaakt, kunt u dit als onderliggend knooppunt toevoegen aan een ander knooppunt door de appendChild-methode van het bovenliggende knooppunt aan te roepen.

Helperfuncties

Sjabloonfunctie CreateInstance

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

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

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

Met deze code maakt u een nieuw ID_Directory-onderdeel om de IDirectory-interface van dat onderdeel op te halen.

GetService-sjabloonfunctie

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

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

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

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

UDI Wizard Designer Naslaginformatie over configuratiebestandsschema's

Dit bestand wordt gebruikt door de wizard UDI Designer. Er wordt een afzonderlijk bestand gemaakt voor elk aangepast .dll-bestand, dat aangepaste wizardpagina-editors, 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 de wizard UDI Designer configuratiebestand en de bijbehorende beschrijvingen. Het element DesignerConfig is het hoofdknooppunt voor deze verwijzing.

Tabel 54. Elementen in de wizard UDI Designer configuratiebestand en hun beschrijvingen

Elementnaam Beschrijving
DesignerConfig Hiermee geeft u de hoofdmap voor alle andere elementen op
DesignerMappings Groepen een set pagina-elementen
Pagina Hiermee geeft u een wizardpagina-editor die moet worden geladen in de UDI-wizard Designer, die wordt gebruikt om de configuratie-instellingen voor een wizardpagina te bewerken
Param Hiermee geeft u een parameter op die wordt doorgegeven aan het bovenliggende taak - of Validator-element en overeenkomt met een Setter-element in het configuratiebestand van de UDI-wizard Opmerking: De kenmerken voor dit element zijn verschillend als het bovenliggende element het element Taak of Validator is.
Taak Hiermee geeft u een taak in de taakbibliotheek op
Taskitem Hiermee geeft u een groep parameters op die worden doorgegeven aan de taak
Taakbibliotheek Groepen van een set taakelementen
Validator Hiermee geeft u een validator in de validator-bibliotheek op
ValidatorLibrary Groepen een set Validator-elementen

DesignerConfig

Met dit element wordt de hoofdmap voor alle andere elementen opgegeven.

Elementinformatie

Tabel 55 bevat informatie over het element DesignerConfig .

Tabel 55. Informatie over het element DesignerConfig

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

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

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

DesignerMappings

Met dit element wordt een set pagina-elementen gegroepeerd.

Elementinformatie

Tabel 56 bevat informatie over het element DesignerMappings .

Tabel 56. Informatie over het element DesignerMappings

Kenmerk Value
Aantal exemplaren Nul of één in het element DesignerConfig (dit element is optioneel als er geen aangepaste wizardpagina in het DLL-bestand is dat overeenkomt met deze UDI-wizard Designer configuratiebestand.)
Bovenliggende elementen DesignerConfig
Inhoud Pagina
Elementkenmerken

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 geeft een wizardpagina-editor op die moet worden geladen in de UDI-wizard Designer, die op zijn beurt wordt gebruikt om de configuratie-instellingen voor een wizardpagina te bewerken.

Elementinformatie

Tabel 57 bevat informatie over het element Pagina .

Tabel 57. Informatie over pagina-element

Kenmerk Value
Aantal exemplaren Een of meer voor elke wizardpagina die is gedefinieerd in het element DesignerMappings
Bovenliggende elementen DesignerMappings
Inhoud Alle goed gevormde XML-inhoud
Elementkenmerken

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

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

Kenmerk Beschrijving
Beschrijving Hiermee geeft u tekst op die informatie geeft over de parameter, die wordt weergegeven in de wizard UDI 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 bestaan in de map installation_folder\Bin (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd.)
DesignerType Hiermee geeft u de naam van de pagina-editor van de wizard op in het .dll bestand dat is opgegeven in het kenmerk DesignerAssembly (dit is het Microsoft .NET-type voor de pagina-editor van de wizard, met de volledig gekwalificeerde Microsoft .NET-naamruimte.)
Displayname Hiermee geeft u de gebruiksvriendelijke naam van de pagina-editor, die wordt weergegeven in de UDI-wizard Designer
DLL Hiermee geeft u de naam op van het .dll-bestand dat is gekoppeld aan de wizardpagina (het .dll-bestand moet bestaan 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.) Opmerking: Zorg ervoor dat de DLL-processorarchitectuur overeenkomt met de mdt-processorarchitectuur die is geïnstalleerd. 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 (waarbij installation_folder de map is waarin u MDT hebt geïnstalleerd.)
Type Hiermee geeft u de pagina-editor van de wizard op en deze moet overeenkomen met de naam die is gebruikt toen de aangepaste pagina werd geregistreerd
Opmerkingen

De UDI-wizard Designer gebruikt het element Pagina als een sjabloon om de eerste XML voor een nieuwe wizard te maken. De UDI-wizard Designer voert schemavalidatie uit om ervoor te zorgen dat de pagina- en onderliggende elementen een geldige indeling hebben. Dit element biedt een toewijzing tussen het paginatype van de wizard UDI en de informatie die de UDI-wizard Designer nodig heeft om pagina's van dit type te bewerken en te maken met behulp van een aangepaste pagina-editor.

Voorbeeld

Geen.

Param

Met dit element wordt een parameter opgegeven die wordt doorgegeven aan het bovenliggende element Taak of Validator en overeenkomt met een Setter-element in het configuratiebestand van de UDI-wizard.

Opmerking

De kenmerken voor dit element verschillen als het bovenliggende element het element Taak of Validator is.

Elementinformatie

Tabel 59 bevat informatie over het element Param .

Tabel 59. Informatie over param-element

Kenmerk Value
Aantal exemplaren Een of meer voor elk bovenliggend TaskItem- of Validator-element
Bovenliggende elementen TaskItem, Validator
Inhoud Alle goed gevormde XML-inhoud
Elementkenmerken

Tabel 60 bevat de kenmerken van het element Param en een beschrijving van elk element.

Tabel 60. Kenmerken en bijbehorende waarden voor het element Param

Kenmerk Beschrijving
Beschrijving Hiermee geeft u tekst op die informatie geeft over de parameter, die wordt weergegeven in de wizard UDI Designer Opmerking: dit kenmerk is alleen geldig voor het validator-element.
Displayname Hiermee geeft u de gebruiksvriendelijke naam van de validatorparameter op, die wordt weergegeven voor de juiste pagina van de wizard UDI in de UDI-wizard Designer (deze naam is meestal beschrijvender dan het kenmerk Naam.) Opmerking: dit kenmerk is alleen geldig voor het element Validator.
Naam Hiermee geeft u de naam op 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 bovenliggende elementen van TaskItem en Validator .
Opmerkingen

Geen.

Voorbeeld

Geen.

Taak

Met dit element wordt een taak in de taakbibliotheek opgegeven.

Elementinformatie

Tabel 61 bevat informatie over het element Taak .

Tabel 61. Informatie over taakelementen

Kenmerk Value
Aantal exemplaren Een of meer in het element TaskLibrary (Dit element is niet optioneel als het element TaskLibrary is opgegeven.)
Bovenliggende elementen Taakbibliotheek
Inhoud Taskitem
Elementkenmerken

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

Tabel 62. Kenmerken en bijbehorende waarden voor het taakelement

Kenmerk Beschrijving
Beschrijving Hiermee geeft u tekst op die informatie geeft over de taak, die wordt weergegeven in de wizard UDI Designer
DLL Hiermee geeft u de naam op van het .dll bestand dat is gekoppeld aan de taak (het .dll bestand moet bestaan 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 wizard UDI en in de UDI-wizard Designer
Type Hiermee geeft u het taaktype op, dat is geregistreerd bij het fabrieksregister en wordt gebruikt om een specifieke taak in een .dll-bestand aan te roepen
Opmerkingen

Geen.

Voorbeeld

Geen.

Taskitem

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

Elementinformatie

Tabel 63 bevat informatie over het element TaskItem .

Tabel 63. Informatie over taskitem-element

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

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

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 file-element gemaakt in het configuratiebestand van de UDI-wizard.

Op dit moment zijn de enige ondersteunde waarden:

- Bestand, waarvoor twee onderliggende Param-elementen zijn vereist (één subelement param met het kenmerk Naam ingesteld op Bron en een ander onderliggend element param met het kenmerk Naam ingesteld op Dest)
- Setter, waarvoor één onderliggend Param-element is vereist
Opmerkingen

Geen.

Voorbeeld

Geen.

Taakbibliotheek

Met dit element wordt een set taakelementen gegroepeerd.

Elementinformatie

Tabel 65 bevat informatie over het element Taakbibliotheek .

Tabel 65. Informatie over het element TaskLibrary

Kenmerk Value
Aantal exemplaren Nul of één in het element DesignerConfig (Dit element is optioneel als het DLL-bestand geen aangepaste taken bevat die overeenkomen met deze UDI-wizard Designer configuratiebestand.)
Bovenliggende elementen DesignerConfig
Inhoud Taak
Elementkenmerken

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 geeft een validator aan binnen de validator-bibliotheek.

Elementinformatie

Tabel 66 bevat informatie over het element Validator .

Tabel 66. Informatie over het validator-element

Kenmerk Value
Aantal exemplaren Nul of meer in het element ValidatorLibrary (dit element is optioneel.)
Bovenliggende elementen ValidatorLibrary
Inhoud Param
Elementkenmerken

Tabel 67 bevat de kenmerken van het element Validator en een beschrijving van elk element.

Tabel 67. Kenmerken en bijbehorende waarden voor het validatie-element

Kenmerk Beschrijving
Beschrijving Hiermee geeft u tekst op die informatie geeft over de validator, die wordt weergegeven in de wizard UDI Designer
Displayname Hiermee geeft u de gebruiksvriendelijke naam op van de validator die wordt weergegeven in de wizard UDI Designer (Deze naam is meestal beschrijvender dan het kenmerk Naam.)
DLL Hiermee geeft u de naam op van het .dll-bestand dat is gekoppeld aan de validator (het .dll-bestand moet bestaan 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 UDI-wizardpagina en in de UDI-wizard Designer
Type Hiermee geeft u het validatietype op, dat is geregistreerd met de registerfactor en wordt gebruikt om een specifieke validator binnen een .dll-bestand aan te roepen
Opmerkingen

Geen.

Voorbeeld

Geen.

ValidatorLibrary

Met dit element wordt een set Validator-elementen gegroepeerd .

Elementinformatie

Tabel 68 bevat informatie over het element ValidatorLibrary .

Tabel 68. Informatie over het element ValidatorLibrary

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

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="Doesn't bepaalde tekens in een veld toestaan" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Vereisen dat de inhoud overeenkomt met een reguliere expressie" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>

Naslaginformatie voor Designer van de wizard UDI

Besturingselementen

De besturingselementen die worden gebruikt voor het maken van aangepaste wizardpagina-editors voor gebruik in de UDI-wizard Designer zijn WPF UserControl-exemplaren. Tabel 69 bevat de besturingselementen die u kunt gebruiken om aangepaste wizardpagina-editors te maken.

Tabel 69. Besturingselementen die kunnen worden gebruikt om pagina-editors voor aangepaste wizards te maken

Besturingselement Beschrijving
CollectionTControl Dit besturingselement wordt gebruikt om gegevens te bewerken die zijn opgeslagen in het element Gegevens in een pagina-element .
FieldElementControl Dit besturingselement wordt gebruikt voor het bewerken van een veld, dat doorgaans is gekoppeld aan een tekstvakbesturingselement op de pagina .xaml.
SetterControl Dit besturingselement wordt gebruikt om de waarde van een setter-element in het configuratiebestand van de UDI-wizard te wijzigen.

CollectionTControl

Dit besturingselement biedt veel mogelijkheden voor het bewerken van gegevens. De beste manier om te leren hoe u dit besturingselement gebruikt, is door het voorbeeld te bekijken, dat laat zien hoe u gegevens kunt bewerken onder het element Gegevens van een pagina. 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 doorgaans is gekoppeld aan een tekstvakbesturingselement op de pagina .xaml.

Voorbeeld

Het volgende fragment van 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
FieldData

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

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

In dit fragment heet de interface van de pagina-editor ControlRoot en wordt deze opgegeven in de parameter ElementName . De binding wordt uitgevoerd voor de eigenschap DataContext.Location van de interface van de ControlRoot-pagina-editor . 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 mogelijke locaties retourneert en wordt gedefinieerd door een gegevenselement 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 header opgeven voor het besturingselement FieldElementControl . De koptekst fungeert als een titel voor het besturingselement en is opgemaakt als vette, oranje tekst die direct boven het besturingselement wordt weergegeven.

Instructietekst

Met deze tekenreekseigenschap kunt u informatieve tekst opgeven voor het besturingselement FieldElementControl . Normaal gesproken wordt de tekst gebruikt om een korte beschrijving van het veld te geven en uit te leggen hoe het configureren van het veld van invloed is op de bijbehorende wizardpagina.

HideEnableButton

Met deze Booleaanse eigenschap kunt u de zichtbaarheid van de knop beheren die de status wijzigt tussen Ontgrendeld en Vergrendeld (ingeschakeld of uitgeschakeld). Indien ingesteld op:

  • Waar, de knop is niet zichtbaar

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

HideDefaultTab

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

  • Waar, de sectie is niet zichtbaar

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

HideBorder

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

  • Waar, de rand is niet zichtbaar

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

HideImage

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

  • Waar, de afbeelding is niet zichtbaar

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

HideValidationTab

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

  • Waar, de sectie is niet zichtbaar

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

HideSummaryTab

Met deze booleaanse eigenschap kunt u de zichtbaarheid beheren van de sectie waarin u de veldsamenvatting configureert onderschrift. De onderschrift en de bijbehorende waarde uit het veld worden weergegeven op een paginatype van de wizard SummaryPage in een fasestroom. Hoewel de eigenschap verwijst naar een tabblad, is er geen tabblad in FieldElementControl , maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Waar, 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 verwijst naar een tabblad, is er geen tabblad in FieldElementControl , maar een sectie die kan worden verborgen. Indien ingesteld op:

  • Waar, 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 dat wordt gebruikt om de waarde van het setter-element te wijzigen.

Voorbeeld

Het volgende fragment van een .xaml-bestand illustreert het gebruik van 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 koppelen aan een eigenschap van uw weergave of weergavemodel die verbinding maakt met de setter. Dit is vergelijkbaar met de manier waarop u een veld bindt, zoals beschreven voor FieldElementControl.

HeaderText

Met deze eigenschap kunt u de tekst instellen die wordt weergegeven in de koptekst van het besturingselement. Beschouw deze eigenschap als een titel voor het besturingselement; standaard wordt deze weergegeven als vette, oranje tekst.

Instructietekst

Stel deze eigenschap in op de tekst die u onder de koptekst wilt weergeven, meestal instructietekst die de gebruiker van uw aangepaste editor laat weten wanneer en waarom ze het gedrag van het veld willen wijzigen.

Interfaces

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

Tabel 70. Interfaces die kunnen worden gebruikt om pagina-editors voor aangepaste wizards te maken

Interface 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 berichtvakken weer te geven.

IDataService

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

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

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

Tabel 71 bevat de eigenschappen voor de IDataService-interface .

Tabel 71. Eigenschappen voor de IDataService-interface

Interface 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 moet deze eigenschap nooit instellen, maar u kunt de XML voor uw pagina 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 (setters) kunt u vooraf gemaakte besturingselementen gebruiken die voor alle details zorgen.

IMessageBoxService

Deze interface biedt toegang tot methoden die u kunt gebruiken om berichtvakken weer te geven. Misschien vraagt u zich af waarom u een interface nodig hebt om een berichtvak 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 wel één nuttig voordeel: in de dialoogvensters is altijd de 'eigenaar' ingesteld op de UDI-wizard, zodat het dialoogvenster correct wordt gegroepeerd met het hoofdvenster.

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

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

Tabel 72 bevat de methoden voor de interface IMessageBoxService .

Tabel 72. Methoden voor de IMessageBoxService-interface

Methode Beschrijving
ShowMessageBox Deze overbelaste methode wordt gebruikt om een berichtvak weer te geven met de volgende leden:

- ShowMessageBox(Tekenreeksbericht, Tekenreeks onderschrift, MessageBoxImage-pictogram)
- ShowMessageBox(tekenreeksbericht, tekenreeks onderschrift, knop MessageBoxButton, MessageBoxImage-pictogram)
- ShowMessageBox(uitzonderings uitzondering)
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 Vorige voor navigatie.
ShowMessageBox

Met deze methode wordt een berichtvenster weergegeven dat een onderliggend element is van de pagina-editor van de aangepaste wizard. Dit lid is overbelast: Tabel 73 bevat een lijst met de leden en een korte beschrijving van elk lid. Zie de sectie die overeenkomt met elk lid voor volledige informatie over elk lid (inclusief syntaxis, gebruik en voorbeelden).

Tabel 73. Overbelaste leden voor de methode ShowMessagBox

Lid Beschrijving
ShowMessageBox(Tekenreeksbericht, Tekenreeks onderschrift, MessageBoxImage-pictogram) Geeft een berichtvak weer met een pictogram en een knop OK
ShowMessageBox(tekenreeksbericht, tekenreeks onderschrift, knop MessageBoxButton, MessageBoxImage-pictogram) Geeft een berichtvak weer met een pictogram en verschillende mogelijke combinaties van knoppen
ShowMessageBox(uitzonderings uitzondering) Geeft een berichtvenster weer met informatie over een uitzondering en een knop OK
ShowMessageBox(Tekenreeksbericht, Tekenreeks onderschrift, MessageBoxImage-pictogram)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);

Met deze methode wordt een berichtvenster met de knop OK weergegeven. Zie Tabel 74.

Tabel 74. Parameters voor de methode ShowMessageBox(Tekenreeksbericht, Tekenreeks onderschrift, MessageBoxImage-pictogram)

Parameter Beschrijving
Bericht Het bericht dat moet worden weergegeven in het inhoudsgebied van het berichtvak
onderschrift De tekst die moet worden weergegeven in de titelbalk van het dialoogvenster
Pictogram Het type pictogram dat moet worden weergegeven in het berichtvak
ShowMessageBox(tekenreeksbericht, tekenreeks onderschrift, knop MessageBoxButton, MessageBoxImage-pictogram)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);

Met deze methode wordt een berichtvak weergegeven met de set knoppen die u wilt weergeven en geeft aan welke knop u hebt geselecteerd. Zie Tabel 75.

Tabel 75. Parameters voor de methode ShowMessageBox(tekenreeksbericht, tekenreeks onderschrift, knop MessageBoxButton, MessageBoxImage-pictogram)

Parameter Beschrijving
Bericht Het bericht dat moet worden weergegeven in het inhoudsgebied van het berichtvak
onderschrift De tekst die moet worden weergegeven in de titelbalk van het dialoogvenster
Knop Welke knoppen moeten worden weergegeven
Pictogram Het type pictogram dat moet worden weergegeven in het berichtvak
ShowMessageBox(uitzonderings uitzondering)
void ShowMessageBox(Exception exception);

Met deze methode wordt een berichtvak weergegeven waarin informatie over een uitzondering wordt gerapporteerd. Dit berichtvak heeft één knop OK . Zie Tabel 76.

Tabel 76. Parameters voor de methode ShowMessageBox (uitzondering uitzondering)

Parameter Beschrijving
Uitzondering De uitzondering die u wilt rapporteren (in het dialoogvenster wordt een uitzondering gebruikt. Bericht als inhoud.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);

Met deze methode maakt u een nieuw dialoogvenster, waarvan de inhoud de tekst is die u opgeeft in de parameter viewType . De UDI-Designer maakt een nieuw exemplaar van dit type en verpakt deze in een dialoogvenster met de knoppen OK en Annuleren.

U geeft gegevens door aan uw besturingselement met behulp van de dialoogvensterBetalingsparameter. De SampleEditor-oplossing in de SDK-map bevat een voorbeeld van het gebruik van deze functionaliteit.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);

Met deze methode kunt u een aangepaste editor weergeven in een dialoogvenster met de knoppen Volgende en Vorige voor navigatie. Microsoft heeft geen voorbeeld verstrekt voor het gebruik van deze methode.

Naslaginformatie over het configuratiebestand van de wizard Configuratiebestand

Dit bestand wordt gebruikt door de UDI-wizard en geconfigureerd door de UDI-wizard Designer. Dit bestand wordt gebruikt om het volgende te configureren:

  • Wizardpagina's die worden 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 fasen binnen elke implementatiewizard in de UDI-wizard Designer

    77 bevat de elementen in het configuratiebestand van de UDI-wizard en de bijbehorende beschrijvingen. Het element Wizard is het hoofdknooppunt voor deze verwijzing.

Tabel 77. Elementen in het configuratiebestand van de UDI-wizard en hun beschrijvingen

Elementnaam Beschrijving
Data Groepeert de afzonderlijke DataItem-elementen binnen een pagina-element en heeft een naam met het kenmerk Name .
DataItem Hiermee worden de afzonderlijke setter-elementen binnen een pagina-element gegroepeerd. U kunt hiërarchische gegevens maken door een of meer gegevenselementen op te opnemen in een DataItem-element . Elk DataItem-element vertegenwoordigt een afzonderlijk item. Een lijst met beschikbare stations kan bijvoorbeeld een DataItem hebben voor de weergavenaam en een ander DataItem-element voor de bijbehorende stationsletter.
Standaard Hiermee geeft u een standaardwaarde op voor het veld dat is opgegeven in het bovenliggende veld of het bovenliggende element RadioGroup . De standaardwaarde wordt ingesteld op de waarde tussen haakjes van dit element.
DLL Hiermee geeft u een DLL die moet worden geladen en waarnaar moet worden verwezen door de UDI-wizard en de UDI-wizard Designer.
Dlls Hiermee worden de afzonderlijke DLL-elementen gegroepeerd .
Fout Hiermee geeft u een mogelijke foutcode op die een taak kan retourneren. De waarde van de foutcode wordt geretourneerd door de HRESULT van de taak en wordt gevangen door dit element om specifiekere foutinformatie op te geven.
ExitCode Hiermee geeft u een mogelijke afsluitcode voor een taak op. De afsluitcodes zijn retourcodes die de taak verwacht. Maak een ExitCode-element voor elke mogelijke afsluitcode. Anders kunt u een sterretje (*) opgeven in het kenmerk Waarde om retourcodes te verwerken die niet worden vermeld in andere ExitCode-elementen .
ExitCodes Hiermee wordt een set exitcode - en foutelementen gegroepeerd voor een taakelement of een foutelement .
Veld Hiermee geeft u een exemplaar van een besturingselement in een pagina-element dat wordt gebruikt voor aanpassing met XML. Niet alle besturingselementen staan aanpassing met XML toe, alleen besturingselementen die gebruikmaken van het element Veld .
Velden Hiermee worden de afzonderlijke veldelementen binnen een pagina-element gegroepeerd.
Bestand Hiermee geeft u de bron en bestemming voor een bestandskopieerbewerking met behulp van het taaktype Microsoft.Wizard.CopyFilesTask . U kunt een afzonderlijk bestandselement opnemen om meer dan één bestand in één taak te kopiëren.
Pagina Hiermee geeft u een exemplaar van een pagina op en bevat alle configuratie-instellingen voor de pagina.
PageRef Hiermee geeft u een verwijzing naar een exemplaar van een pagina in een fase in een StageGroup.
Blz Hiermee worden de afzonderlijke pagina-elementen gegroepeerd.
RadioGroup Hiermee geeft u een groep keuzerondjes binnen een veldelement .
StageGroup Hiermee geeft u een groep van een of meer fasen.
StageGroups Groepen een set fasegroepen in een configuratiebestand van de UDI-wizard.
Setter Hiermee geeft u een eigenschapsinstelling van een waarde voor een eigenschap met de naam in de eigenschap Eigenschap .
Fase Hiermee geeft u een fase binnen een StageGroup en bevat een of meer PageRef-elementen .
Stijl Hiermee worden de afzonderlijke setter-elementen gegroepeerd die het uiterlijk van de UDI-wizard configureren, inclusief de titel die boven aan de wizard wordt weergegeven en de bannerafbeelding die wordt weergegeven in de UDI-wizard.
Taak Hiermee geeft u een taak op die moet worden uitgevoerd op de pagina die is opgegeven in het bovenliggende pagina-element .
Taken Groepen een set taken voor een pagina-element .
Validator Hiermee geeft u een validator voor het veld besturingselement dat is opgegeven in het bovenliggende veldelement .
Wizard Hiermee geeft u de hoofdmap voor alle andere elementen.

Gegevens

Dit element groepeert de afzonderlijke DataItem-elementen binnen een pagina-element en heeft een naam met het kenmerk Name .

Elementinformatie

Tabel 78 bevat informatie over het element Gegevens .

Tabel 78. Gegevenselementinformatie

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk pagina-element (dit element is optioneel.)
Bovenliggende elementen Pagina, DataItem
Inhoud DataItem, Setter
Elementkenmerken

Tabel 79 bevat de kenmerken van het element Gegevens en een beschrijving van elk element.

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 kenmerk Name kan code een specifieke set gegevens ophalen.

Voorbeeld

Geen.

DataItem

Met dit element worden de afzonderlijke setter-elementen binnen een pagina-element gegroepeerd. U kunt hiërarchische gegevens maken door een of meer gegevenselementen op te opnemen in een DataItem-element . Elk DataItem-element vertegenwoordigt een afzonderlijk item. Een lijst met beschikbare stations kan bijvoorbeeld een DataItem hebben voor de weergavenaam en een ander DataItem-element voor de bijbehorende stationsletter.

Elementinformatie

Tabel 80 bevat informatie over het element DataItem .

Tabel 80. Gegevens van het element DataItem

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk gegevenselement (dit element is optioneel.)
Bovenliggende elementen Data
Inhoud Gegevens, setter
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Standaard

Dit element geeft een standaardwaarde op voor het veld dat is opgegeven in het bovenliggende veld of radiogroepelement . De standaardwaarde wordt ingesteld op de waarde tussen haakjes van dit element.

Elementinformatie

Tabel 81 bevat informatie over het element Standaard .

Tabel 81. Standaardelementgegevens

Kenmerk Value
Aantal exemplaren Nul of meer in een veld - of radiogroepelement (dit element is optioneel.)
Bovenliggende elementen Veld, RadioGroup
Inhoud Kan elke goed opgemaakte XML-inhoud zijn, maar is meestal standaardtekst
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

In het volgende voorbeeld is de standaardwaarde 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 op voor de wizard UDI en de UDI-wizard Designer om te laden en ernaar te verwijzen.

Elementinformatie

Tabel 82 bevat informatie over het DLL-element .

Tabel 82. DLL-elementinformatie

Kenmerk Value
Aantal exemplaren Een of meer binnen het DLL-element
Bovenliggend element Dlls
Inhoud Geen inhoud toegestaan voor dit element
Elementkenmerken

Tabel 83 bevat 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 van de DLL voor de UDI-wizard en de UDI-wizard Designer waarnaar moet worden verwezen
Opmerkingen

Geen.

Voorbeeld
<DLLs>
  <DLL Name="OSDRefreshWizard.dll" />
  <DLL Name="SharedPages.dll" />
</DLLs>

Dlls

Met dit element worden de afzonderlijke DLL-elementen gegroepeerd.

Elementinformatie

Tabel 84 bevat informatie over het dll-element .

Tabel 84. Informatie over DLL-elementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud DLL
Elementkenmerken

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 op die een taak kan retourneren. De waarde van de foutcode wordt geretourneerd en gevangen door de HRESULT van de taak om specifiekere foutinformatie op te geven.

Elementinformatie

Tabel 85 bevat informatie over het element Fout .

Tabel 85. Informatie over foutelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk ExitCode-element (dit element is optioneel.)
Bovenliggende elementen ExitCodes
Inhoud Alle goed gevormde XML-inhoud
Elementkenmerken

Tabel 86 bevat de kenmerken van het element Error en een beschrijving van elk element.

Tabel 86. Informatie over foutelement

Kenmerk Beschrijving
Status Hiermee geeft u de retourstatus op van een taak die een fout heeft opgetreden. De waarde voor dit kenmerk is doorgaans ingesteld op Fout. Deze waarde wordt weergegeven in de kolom Status op de wizardpagina in de UDI-wizard.
Tekst Hiermee geeft u de beschrijvende tekst op over de foutvoorwaarde die bij de taak is opgetreden.
Type Hiermee geeft u op of dit element een fout, waarschuwing of succes vertegenwoordigt. De waarde die is opgegeven inType moet uniek zijn binnen een ExitCodes-element . Hier 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 op van de code die de taak als een numerieke waarde heeft geretourneerd. Als u de waarde van een sterretje (*) opgeeft, wordt het standaardelement aangegeven voor retourcodes die niet worden vermeld in andere foutelementen .
Opmerkingen

Geen.

Voorbeeld

Geen.

ExitCode

Dit element geeft een mogelijke afsluitcode voor een taak op. De afsluitcodes zijn retourcodes die de taak verwacht. Maak een ExitCode-element voor elke mogelijke afsluitcode. Anders kunt u een sterretje (*) opgeven in het kenmerk Waarde om retourcodes te verwerken die niet worden vermeld in andere ExitCode-elementen .

Elementinformatie

Tabel 87 bevat informatie over het element ExitCode .

Tabel 87. Informatie over het element ExitCode

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk ExitCodes-element (dit element is optioneel.)
Bovenliggende elementen ExitCodes
Inhoud Ten minste één ExitCode-element en nul of meer foutelementen
Elementkenmerken

Tabel 88 bevat de kenmerken van het element ExitCode en een beschrijving van elk element.

Tabel 88. Kenmerken en bijbehorende waarden voor het element ExitCode

Kenmerk Beschrijving
Status Hiermee geeft u de retourstatus van een taak op. De waarde van dit kenmerk wordt weergegeven in de kolom Status op de bijbehorende wizardpagina in de UDI-wizard. U kunt alle waarden voor dit kenmerk gebruiken die zinvol zijn voor uw taak. Hier volgen typische waarden die voor dit kenmerk worden gebruikt:

-Succes
-Waarschuwing
-Fout
Tekst Hiermee geeft u de beschrijvende tekst over de exist-code van de taak.
Type Hiermee geeft u op of dit element een fout, waarschuwing of succes vertegenwoordigt. De waarde die in het type is opgegeven, moet uniek zijn binnen een ExitCodes-element . Hier 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 op van de code die de taak als een numerieke waarde heeft geretourneerd. Als u de waarde van een sterretje (*) opgeeft, wordt het standaardelement aangegeven voor retourcodes die niet worden vermeld in andere ExitCode-elementen .
Opmerkingen

Geen.

Voorbeeld

Geen.

ExitCodes

Met dit element wordt een set exitcode- en foutelementen voor een taak - of foutelement gegroepeerd.

Elementinformatie

Tabel 89 bevat informatie over het element ExitCodes .

Tabel 89. Informatie over het element ExitCodes

Kenmerk Value
Aantal exemplaren Eén binnen elk taakelement
Bovenliggende elementen Taak
Inhoud Fout, Afsluitcode
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Veld

Dit element geeft een exemplaar op van een besturingselement in een pagina-element dat wordt gebruikt voor aanpassing met XML. Niet alle besturingselementen staan aanpassing met XML toe, alleen besturingselementen die gebruikmaken van het element Veld .

Elementinformatie

Tabel 90 bevat informatie over het element Veld .

Tabel 90. Informatie over veldelementen

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk veldelement (dit element is optioneel.)
Bovenliggende elementen Velden
Inhoud Standaard, validator
Elementkenmerken

Tabel 91 bevat de kenmerken van het element Veld en een beschrijving van elk element.

Tabel 91. Kenmerken en bijbehorende waarden voor het element Veld

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 Samenvatting voor de waarde die door dit veld wordt ingesteld
VarName Hiermee geeft u de naam van de takenreeksvariabele die wordt gelezen of geconfigureerd met behulp van het veld in het bovenliggende veldelement
Opmerkingen

Dit element kan nul of meer standaardelementen en nul of meer Validator-elementen bevatten.

Voorbeeld

Geen.

Velden

Met dit element worden de afzonderlijke veldelementen binnen een pagina-element gegroepeerd.

Elementinformatie

Tabel 92 bevat informatie over het element Velden .

Tabel 92. Gegevens van veldenelement

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk pagina-element (dit element is optioneel.)
Bovenliggende elementen Pagina
Inhoud Veld, RadioGroup
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Bestand

Dit element geeft de bron en bestemming op voor een bestandskopieerbewerking met behulp van het taaktype Microsoft.Wizard.CopyFilesTask . U kunt een afzonderlijk bestandselement opnemen om meer dan één bestand in één taak te kopiëren.

Elementinformatie

Tabel 93 bevat informatie over het element Bestand .

Tabel 93. Informatie over bestandselementen

Kenmerk Value
Aantal exemplaren Een of meer voor elke taak met een taaktype Microsoft.Wizard.CopyFilesTask
Bovenliggende elementen Taak
Inhoud Geen
Elementkenmerken

Tabel 94 bevat de kenmerken van het element Bestand en een beschrijving van elk element.

Tabel 94. Kenmerken en bijbehorende waarden voor het bestandselement

Kenmerk Beschrijving
Dest Hiermee geeft u het volledig gekwalificeerde of relatieve pad naar de doelmap voor het bestand dat is opgegeven in het kenmerk Bron . Omgevingsvariabelen zijn toegestaan als onderdeel van het pad.
Source Hiermee geeft u het volledig gekwalificeerde of relatieve pad naar het bronbestand dat het taaktype Microsoft.Wizard.CopyFilesTask kopieert . 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 op en bevat alle configuratie-instellingen voor de pagina.

Elementinformatie

Tabel 95 bevat informatie over het element Pagina .

Tabel 95. Informatie over pagina-element

Kenmerk Value
Aantal exemplaren Een of meer binnen elk pagina-element
Bovenliggende elementen Blz
Inhoud Gegevens, velden, setter, taken
Elementkenmerken

Tabel 96 bevat de kenmerken van het element Pagina en een beschrijving van elk element.

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

Kenmerk Beschrijving
Displayname Hiermee geeft u de gebruiksvriendelijke naam van de wizardpagina die wordt weergegeven in de UDI-wizard Designer. Deze naam is meestal beschrijvender dan het kenmerk Naam .
Naam Hiermee geeft u de naam van de wizardpagina die wordt weergegeven in de UDI-wizard Designer.
Type Hiermee geeft u het type wizardpagina op dat rechtstreeks betrekking heeft op een specifieke wizardpagina in een DLL.
Opmerkingen

Geen.

Voorbeeld

Geen.

PageRef

Dit element geeft een verwijzing naar een exemplaar van een pagina in een fase binnen een StageGroup.

Elementinformatie

Tabel 97 bevat informatie over het element PageRef .

Tabel 97. Informatie van het element PageRef

Kenmerk Value
Aantal exemplaren Een of meer binnen een fase-element
Bovenliggende elementen Fase
Inhoud Geen
Elementkenmerken

Tabel 98 bevat het kenmerk van het element PageRef en een beschrijving ervan.

Tabel 98. Kenmerken en bijbehorende waarden voor het element PageRef

Kenmerk Beschrijving
Pagina Hiermee geeft u het exemplaar van een pagina binnen een fase in een StageGroup. Stel deze waarde in op het kenmerk Naam van een pagina-element .
Opmerkingen

Geen.

Voorbeeld

Geen.

Blz

Met dit element worden de afzonderlijke pagina-elementen gegroepeerd.

Elementinformatie

Tabel 99 bevat informatie over het element Pagina's .

Tabel 99. Informatie over het element Pagina's

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud Pagina
Elementkenmerken

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>

RadioGroup

Dit element geeft een groep keuzerondjes op met in een veldelement .

Elementinformatie

Tabel 100 bevat informatie over het element RadioGroup .

Tabel 100. Informatie over het RadioGroup-element

Kenmerk Value
Aantal exemplaren Nul of meer binnen een element Velden (dit element is optioneel.)
Bovenliggende elementen Velden
Inhoud Standaard
Elementkenmerken

Tabel 101 bevat de kenmerken van het element RadioGroup en een beschrijving van elk element.

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.
- Onwaar. 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 de keuzerondjeoptiegroep op.
Opmerkingen

Geen.

Voorbeeld

Geen.

StageGroup

Met dit element wordt een implementatiefasegroep opgegeven.

Elementinformatie

Tabel 102 bevat informatie over het element StageGroup .

Tabel 102. Informatie over StageGroup-element

Kenmerk Value
Aantal exemplaren Een of meer binnen een StageGroups-element
Bovenliggende elementen StageGroups
Inhoud Fase
Elementkenmerken

Tabel 103 bevat de kenmerken van het element StageGroup en een beschrijving van het kenmerk.

Tabel 103. Kenmerken en bijbehorende waarden voor het element StageGroup

Kenmerk Beschrijving
Displayname Hiermee geeft u de gebruiksvriendelijke naam van de fasegroep die wordt weergegeven in de UDI-wizard Designer. Deze naam is meestal beschrijvender dan het kenmerk Naam .
Opmerkingen

Geen.

Voorbeeld

Geen.

StageGroups

Met dit element wordt een set fasegroepen in een configuratiebestand van de UDI-wizard gegroepeerd.

Elementinformatie

Tabel 104 bevat informatie over het element StageGroups .

Tabel 104. Informatie over stagegroups-elementen

Kenmerk Value
Aantal exemplaren Nul of één binnen een wizard-element
Bovenliggende elementen Wizard
Inhoud StageGroup
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

Voorbeeld

Geen.

Setter

Dit element geeft een eigenschapsinstelling op voor de waarde voor een eigenschap met de naam in de eigenschap Eigenschap .

Elementinformatie

Tabel 105 bevat informatie over het setter-element .

Tabel 105. Informatie over setter-elementen

Kenmerk Value
Aantal exemplaren Nul of meer binnen elk bovenliggend element (dit element is optioneel.)
Bovenliggende elementen Data, DataItem, Page, Style, Task, Validator
Inhoud Bevat een tekenreekswaarde in het kenmerk Eigenschap
Elementkenmerken

Tabel 106 bevat het kenmerk van het element Setter en een beschrijving ervan.

Tabel 106. Kenmerken en bijbehorende waarden voor het setter-element

Kenmerk Beschrijving
Eigenschap Hiermee geeft u de eigenschapsnaam die wordt ingesteld. De naam van de eigenschap is ingesteld op de waarde tussen haakjes voor dit kenmerk.
Opmerkingen

Geen.

Voorbeeld

Geen.

Fase

Dit element geeft een fase binnen een StageGroup en bevat een of meer PageRef-elementen .

Elementinformatie

Tabel 107 bevat informatie over het element Fase .

Tabel 107. Informatie over fase-element

Kenmerk Value
Aantal exemplaren Een of meer binnen een StageGroup-element
Bovenliggende elementen StageGroup
Inhoud PageRef
Elementkenmerken

Tabel 108 bevat de kenmerken van het element Fase en een beschrijving van elk element.

Tabel 108. Kenmerken en bijbehorende waarden voor het fase-element

Kenmerk Beschrijving
Displayname Hiermee geeft u de gebruiksvriendelijke naam van de wizardpagina die wordt weergegeven in de UDI-wizard Designer. Deze naam is meestal beschrijvender dan het kenmerk Naam .
Naam Hiermee geeft u de naam van de fase op. De waarde van dit element wordt gebruikt bij het starten van de wizard UDI met de opdrachtregelparameter /stage: name .
Opmerkingen

Geen.

Voorbeeld

Geen.

Stijl

Met dit element worden de afzonderlijke setter-elementen gegroepeerd waarmee het uiterlijk van de UDI-wizard wordt geconfigureerd, inclusief de titel die boven aan de wizard wordt weergegeven en de bannerafbeelding die wordt weergegeven in de UDI-wizard.

Elementinformatie

Tabel 109 bevat informatie over het element Stijl.

Tabel 109. Informatie over stijlelementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Wizard
Inhoud Setter
Elementkenmerken

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 op die moet worden uitgevoerd op de pagina die is opgegeven in het bovenliggende pagina-element .

Elementinformatie

Tabel 110 bevat informatie over het element Taak .

Tabel 110. Informatie over taakelementen

Kenmerk Value
Aantal exemplaren Een of meer binnen een element Taken
Bovenliggende elementen Taken
Inhoud ExitCodes, Bestand, Setter
Elementkenmerken

Tabel 111 bevat de kenmerken van het element Taak en een beschrijving van elk element.

Tabel 111. Kenmerken en bijbehorende waarden voor het taakelement

Kenmerk Beschrijving
DependsOn Hiermee geeft u op of de taak afhankelijk is van een andere taak. De waarde van dit kenmerk is ingesteld op het kenmerk Naam van een ander taakelement . Opmerking: Dit kenmerk kan niet worden geconfigureerd met behulp van de wizard UDI 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 van de taak die wordt weergegeven in de UDI-wizard Designer. Deze naam is meestal beschrijvender dan het kenmerk Naam .
Naam Hiermee geeft u de naam van de taak. Deze naam moet uniek zijn.
Type Hiermee geeft u het taaktype op voor de taak die moet worden uitgevoerd, dat is gedefinieerd in het DLL-bestand dat de taak bevat.
Opmerkingen

Geen.

Voorbeeld

Geen.

Taken

Met dit element wordt een set taken voor een pagina-element gegroepeerd.

Elementinformatie

Tabel 112 bevat informatie over het element Taken .

Tabel 112. Informatie over takenelement

Kenmerk Value
Aantal exemplaren Nul of één binnen elk pagina-element (dit element is optioneel.)
Bovenliggende elementen Pagina
Inhoud Taak
Elementkenmerken

Tabel 113 bevat de kenmerken van het element Taken en een beschrijving van elk element.

Tabel 113. Kenmerken en bijbehorende waarden voor het element Taken

Kenmerk Beschrijving
NameTitle Hiermee geeft u de onderschrift die boven aan de kolom met de naam van de taken op de juiste wizardpagina wordt weergegeven.
StatusTitle Hiermee geeft u de onderschrift die 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 op voor het veld besturingselement dat is opgegeven in het bovenliggende veldelement .

Elementinformatie

Tabel 114 bevat informatie over het element Validator .

Tabel 114. Informatie over het validator-element

Kenmerk Value
Aantal exemplaren Nul of één binnen een veldelement
Bovenliggende elementen Veld
Inhoud Setter
Elementkenmerken

Tabel 115 bevat het kenmerk van het element Validator en een beschrijving ervan.

Tabel 115. Kenmerken en bijbehorende waarden voor het validatie-element

Kenmerk Beschrijving
Type Hiermee geeft u het type voor de validator, dat is gedefinieerd in het DLL-bestand dat de validator bevat
Opmerkingen

Geen.

Voorbeeld

Geen.

Wizard

Met dit element wordt de hoofdmap voor alle andere elementen opgegeven.

Elementinformatie

Tabel 116 bevat informatie over het element Wizard .

Tabel 116. Informatie over wizardelementen

Kenmerk Value
Aantal exemplaren Een
Bovenliggende elementen Geen
Inhoud DLL's, pagina's, fasegroepen, stijl
Elementkenmerken

Dit element heeft geen kenmerken.

Opmerkingen

Geen.

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