Användardriven installation – utvecklarguide
Användardriven installation (UDI) förenklar distributionen av Windows-klientoperativsystem®, till exempel Windows 8.1, till datorer som använder operativsystemsdistributionsfunktionen (OSD) i Microsoft® System Center 2012 R2 Configuration Manager. UDI är en del av Microsoft Deployment Toolkit (MDT).
Inledning
När du distribuerar operativsystem med osd-funktionen måste du vanligtvis ange all nödvändig information för att distribuera operativsystemet. Informationen konfigureras i konfigurationsfiler eller i databaser (till exempel CustomSettings.ini-filen eller MDT-databasen [MDT DB]). Du måste ange alla konfigurationsinställningar innan du kan starta distributionen.
UDI tillhandahåller ett guidedrivet gränssnitt som gör att du kan ange konfigurationsinformation direkt innan du utför distributionen. Med det här beteendet kan du skapa allmänna OSD-aktivitetssekvenser och sedan ange datorspecifik information vid tidpunkten för distributionen, vilket ger större flexibilitet i distributionsprocessen.
Målgrupp
Den här guiden är skriven för utvecklare som skapar anpassade guidesidor för UDI-guiden och anpassade sidredigerare för UDI-guiden Designer. Den här guiden förutsätter att du är bekant med utvecklingen av Windows-program med hjälp av:
C++, som används för att skapa anpassade guidesidor
Microsoft .NET Framework, som används för att skapa anpassade sidredigerare för guider
Windows Presentation Foundation (WPF), som används för att skapa anpassade sidredigerare för guider
Språk som WPF stöder, till exempel C#, C++ eller Microsoft Visual Basic® .NET, som används för att skapa anpassade sidredigerare för guider
Om den här guiden
Den här guiden innehåller nödvändig referensinformation som hjälper dig att anpassa UTI för din organisation. Den här guiden beskriver inte administrativa eller operativa ämnen, till exempel installation av MDT (som inkluderar UDI), konfiguration av UDI för att distribuera operativsystem och program eller utföra distributioner med hjälp av UDI-guiden. Mer information om dessa ämnen finns i UDI-ämnena i Använda Microsoft Deployment Toolkit, som ingår i MDT.
Översikt över UDI-utveckling
Med UDI-utveckling kan du utöka de funktioner som UDI tillhandahåller. Normalt krävs UDI-utveckling när du vill samla in ytterligare information som UDI-distributionsprocessen använder. Den här ytterligare informationen sparas vanligtvis som aktivitetssekvensvariabler som aktivitetssekvenssteg i en UDI-aktivitetssekvens i Configuration Manager läsa.
UDI-arkitektur
Målet med UDI-utveckling på hög nivå är att skapa anpassade guidesidor som kan visas i UDI-guiden. Genom att skapa anpassade guidesidor kan du utöka de befintliga funktionerna i UDI så att de uppfyller organisationens affärskrav och tekniska krav. En anpassad guidesida samlar in information utöver eller i stället för de guidesidor som UDI tillhandahåller.
Bild 1 illustrerar relationen mellan UDI-guiden Designer och UDI-guiden.
bild 1. Relation mellan UDI-guiden och UDI-guiden Designer
Bild 1. Relation mellan UDI-guiden och UDI-guiden Designer
På konceptuell nivå omfattar UDI-utveckling skapandet av:
Anpassade guidesidor. Guidesidor visas i UDI-guiden och samlar in den information som krävs för att slutföra distributionsprocessen. Du skapar guidesidor med C++ i Microsoft Visual Studio®. De anpassade guidesidorna implementeras som DLL:er som UDI-guiden läser. UDI Software Development Kit (SDK) innehåller ett exempel på hur du skapar anpassade guidesidor.
Anpassade sidredigerare för guider. Du använder guidens sidredigerare för att konfigurera beteendet för din anpassade guidesida. De anpassade sidredigerarna i guiden implementeras som DLL:er som UDI-guiden Designer läser. Du skapar sidredigerare med hjälp av:
WPF version 4.0
Microsoft Prism version 4.0
Microsoft Unity Application Block (Unity) version 2.1
MDT innehåller alla sammansättningar som krävs för att skapa en anpassad guide sidredigerare för användning i UDI-guiden Designer. UDI SDK innehåller ett exempel på hur du skapar anpassade sidredigerare för guider.
Dessutom använder UDI-guiden Designer stöd för konfigurationsfiler för guidens sidredigerare. Du skapar konfigurationsfilerna för guidens sidredigerare som en del av processen för att skapa anpassade guidesidor och anpassade sidredigerare för guider. UDI-guiden Designer skapar nödvändig XML-information i konfigurationsfilen för UDI-guiden och motsvarande .app fil.
Förbereda UDI-utvecklingsmiljön
Innan du börjar skapa egna anpassade guidesidor och sidredigerare ska du utföra följande steg för att förbereda UDI-utvecklingsmiljön:
Förbered kraven för UDI-utvecklingsmiljön enligt beskrivningen i Förbereda UDI-utvecklingsmiljöns förutsättningar.
Konfigurera UDI-utvecklingsmiljön enligt beskrivningen i Konfigurera UDI-utvecklingsmiljön.
Kontrollera att UDI-utvecklingsmiljön är korrekt konfigurerad enligt beskrivningen i Verifiera UDI-utvecklingsmiljön.
Förbereda förutsättningar för UDI-utvecklingsmiljön
Utför följande steg för att förbereda UDI-utvecklingsmiljöns krav:
Förbered maskinvarukraven för UDI-utvecklingsmiljön enligt beskrivningen i Förbereda maskinvarukraven för UDI Development Environment.
Förbered kraven för UDI-utvecklingsmiljön enligt beskrivningen i Förbereda programvarukraven för UDI Development Environment.
Förbereda maskinvarukraven för UDI Development Environment
Maskinvarukraven för UDI-utvecklingsmiljön är samma maskinvarukrav för den version av Microsoft Visual Studio som du använder. Mer information om dessa krav finns i systemkraven för varje utgåva i Visual Studio-dokumentationen.
Förbereda programvarukraven för UDI Development Environment
UDI-utvecklingsmiljön har följande programvarukrav:
Alla Windows-operativsystem som Visual Studio 2010 stöder (Windows 7 eller Windows Server® 2008 R2 rekommenderas.)
Du behöver ett Windows-operativsystem som stöder den processorarkitektur som du vill utveckla. Du kan utföra 32-bitars och 64-bitars UDI-utveckling med hjälp av ett 64-bitars operativsystem. Du utför bara 32-bitars UDI-utveckling på 32-bitars operativsystem. Därför bör du använda ett 64-bitars operativsystem.
Obs!
IntelItanium-versioner (IA-64) av Windows-operativsystemet stöds inte för UDI-utvecklingsmiljöer.
Mer information om de operativsystem som Visual Studio 2010 stöder finns i systemkraven för varje utgåva i Visual Studio-dokumentationen.
Microsoft .NET Framework version 4.0 (krävs av Visual Studio 2010)
C++-språk (det språk som används för att utöka sidor i UDI-guiden)
Andra språk som WPF stöder, till exempel C#, Visual Basic .NET eller C++/Common Language Infrastructure, som används för att utöka UDI-guiden Designer sidredigerare för guider
Obs!
Exempelkällkoden för UDI-guiden Designer guidens sidredigerare är skriven i C#. Installera C#-språket om du vill använda exempelkällkoden.
Konfigurera UDI-utvecklingsmiljön
När UDI-utvecklingsmiljöns krav är uppfyllda utför du följande steg för att konfigurera UDI-utvecklingsmiljön:
Installera Visual Studio 2010.
Se till att du installerar språket C++ och andra språk som WPF stöder.
Obs!
Exempelkällkoden för UDI-guiden Designer redigerarsidor skrivs i C#. Installera C#-språket om du vill använda exempelkällkoden.
Mer information om hur du installerar Visual Studio 2010 finns i Installera Visual Studio.
Installera MDT.
Mer information om hur du installerar MDT finns i avsnittet "Installera eller uppgradera till MDT" i MDT-dokumentet Använda Microsoft Deployment Toolkit.
I Utforskaren skapar du local_folder (där local_folder finns på en lokal enhet på utvecklingsdatorn).
Kopiera mappen installation_folder\SDK till local_folder (där installation_folder är mappen där du installerade MDT och local_folder är en mapp som finns på en lokal enhet på utvecklingsdatorn).
Du kopierar SDK-mappen till en annan plats eftersom MDT är installerat i mappen Programfiler, som inte kan skrivas till utan utökade behörigheter. Om du kopierar SDK-mappen till en annan plats kan du ändra filerna i SDK-mappen utan att kräva utökade behörigheter.
Kopiera mappen installation_folder\Templates\Distribution\Tools till local_folder (där installation_folder är mappen där du installerade MDT och local_folder är mappen som du skapade tidigare i processen).
Byt namn på mappen local_folder\Tools till local_folder\OSDSetupWizard (där local_folder är mappen som du skapade tidigare i processen).
När den är klar bör mappstrukturen under local_folder se ut som mappstrukturen som illustreras i bild 2 (där local_folder är den mapp som du skapade tidigare i processen och visas som UDIDevelopment i bilden).
Bild 2. Mappstruktur för UDI-utveckling
Bild 2. Mappstruktur för UDI-utveckling
Verifiera UDI-utvecklingsmiljön
När UDI-utvecklingsmiljön har konfigurerats kontrollerar du att UDI-utvecklingsmiljön är korrekt konfigurerad genom att se till att exempelprojekten byggs korrekt i Visual Studio 2010.
Kontrollera att UDI-utvecklingsmiljön är korrekt konfigurerad genom att avgöra om:
SamplePage-projektet byggs korrekt enligt beskrivningen i Kontrollera att SamplePage-projektet byggs korrekt
SampleEditor-projektet byggs korrekt enligt beskrivningen i Kontrollera att SampleEditor-projektet byggs korrekt
Kontrollera att SamplePage-projektet byggs korrekt
SamplePage-projektet innehåller ett exempel på hur du skapar en anpassad guidesida för UDI-guiden. Mer information om SamplePage-projektet finns i Granska Visual Studio-lösningen SamplePage.
Kontrollera att SamplePage-projektet byggs korrekt
Starta Visual Studio 2010.
Öppna SamplePage-projektet.
SamplePage-projektet finns i mappen local_folder\SDK\UDI\SamplePage (där local_folder är den mapp som du skapade tidigare i processen).
I Visual Studio 2010 i Solution Explorer högerklickar du på SamplePage-projektet och väljer sedan Egenskaper.
Dialogrutan SamplePage-egenskapssidor visas.
I dialogrutan SamplePage-egenskapssidor går du till Konfigurationsegenskaper/felsökning.
I felsökningsegenskaperna går du till Konfiguration och väljer Alla konfigurationer.
I felsökningsegenskaperna, under Kommando, skriver du $(TargetDir)\OSDSetupWizard.exe.
I felsökningsegenskaperna går du till Arbetskatalog och skriver $(TargetDir).
I dialogrutan SamplePage-egenskapssidor går du till Konfigurationsegenskaper/Skapa händelser/Händelse efter bygge.
Skriv följande under Kommandorad i egenskaperna efter bygghändelsen:
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"
I dialogrutan SamplePage-egenskapssidor väljer du OK.
Spara projektet.
På felsökningsmenyn väljer du Starta felsökning.
Dialogrutan Microsoft Visual Studiovisas som anger att källan är inaktuell och frågar om du vill skapa projektet.
I dialogrutan Microsoft Visual Studio väljer du Ja.
Dialogrutan Ingen felsökningsinformation visas som informerar dig om att ingen felsökningsinformation är tillgänglig för OSDSetupWizard.exe.
I dialogrutan Ingen felsökningsinformation väljer du Ja.
UDI-guiden öppnas med den anpassade guidesidan.
Kontrollera att du kan välja ett värde i Välj din plats.
I guiden med exempelformulär väljer du Avbryt.
Dialogrutan Avbryt guiden visas.
I dialogrutan Avbryt guiden väljer du Ja.
Stäng Visual Studio 2010.
Kontrollera att SampleEditor-projektet byggs korrekt
SampleEditor-projektet innehåller ett exempel på hur du skapar en anpassad guidesideredigerare för UDI-guiden Designer. Mer information om SampleEditor-projektet finns i Granska Visual Studio-lösningen SamplePage.
Kontrollera att SampleEditor-projektet byggs korrekt
Starta Visual Studio 2010.
Öppna SampleEditor-projektet.
SampleEditor-projektet finns i mappen local_folder\SDK\UDI\SampleEditor (där local_folder är mappen som du skapade tidigare i processen).
I Visual Studio 2010 går du till Solution Explorer och väljer projektet SampleEditor.
På projektmenyn väljer du Lägg till referens.
Dialogrutan Lägg till referens öppnas.
I dialogrutan Lägg till referens väljer du fliken Bläddra .
På fliken Bläddra går du till installation_folder\Bin (där installation_folder är mappen där du installerade MDT). Välj följande filer och välj sedan 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
Obs!
Du kan markera flera filer på fliken Bläddra genom att hålla ned CTRL-tangenten medan du väljer filerna.
I Solution Explorer går du till SampleEditor/References.
Kontrollera att ingen av referenserna har några varningar eller fel.
I Solution Explorer högerklickar du på projektet SampleEditor och väljer sedan Egenskaper.
Dialogrutan SampleEditor-egenskapssidor visas.
I dialogrutan SampleEditor Property Pages (Egenskapssidor för SampleEditor ) väljer du fliken Felsök .
På fliken Felsök väljer du Starta externt program.
I Starta externt program skriver duinstallation_folder\Bin\UDIDesigner.exe (där installation_folder är mappen där du installerade MDT) och väljer sedan OK.
Tips
Du kan välja ellipsknappen (...) för att bläddra till mappen och välja UDIDesigner.exe.
På Arkiv-menyn väljer du Spara alla.
Kopiera filen local_folder\SDK\SamplePage\SamplePage.dll.config till mappen installation_folder\Bin\Config (där local_folder är mappen som du skapade på utvecklingsdatorn tidigare i konfigurationsprocessen ochinstallation_folder är mappen där du installerade MDT).
I Visual Studio 2010 går du till felsökningsmenyn och väljer Starta felsökning.
UDI-guiden Designer startar.
Välj Öppna i menyfliksområdet i UDI-guiden Designer.
Dialogrutan Öppna visas.
I dialogrutan Öppna öppnar du filen local_folder\SDK\SamplePage\SamplePage\Config.xml (där local_folder är mappen som du skapade på utvecklingsdatorn tidigare i konfigurationsprocessen).
Filen Config.xml öppnas och Custom StageGroup visas i informationsfönstret.
I informationsfönstret väljer du fliken Konfigurera .
Granska konfigurationsinformationen för rutan Plats , inklusive följande:
Upplåst knapp som du aktiverar eller inaktiverar rutan Plats med
Standardvärderuta där du anger ett standardvärde som ska visas i rutan Plats
Eget visningsnamn som visas på sammanfattningssidan, där du anger bildtext för den information som visas på sidan Sammanfattning
Listruta för plats , som innehåller en lista över möjliga platser
Stäng UDI-guiden Designer.
Stäng Visual Studio 2010.
Granska UDI SDK-exemplen
Granska exemplen i UDI SDK innan du börjar utveckla. Använd informationen i den här guiden och källkoden i exemplen för att skapa egna anpassade UDI-guidesidor och guider för sidredigerare.
Gå igenom UDI SDK-exemplen genom att granska:
Innehållet i den SDK-mapp som du kopierade tidigare under installationsprocessen enligt beskrivningen i Granska innehållet i SDK-mappen
Exempel på anpassad UDI-guidesida enligt beskrivningen i Granska Visual Studio-lösningen för SamplePage
Exempel på anpassad UDI-guide i sidredigeraren enligt beskrivningen i Granska Visual Studio-lösningen SampleEditor
Granska innehållet i SDK-mappen
Under konfigurationen av UDI-utvecklingsmiljön kopierade du SDK-mappen från mappen där du installerade MDT till en annan mapp som du skapade. Tabell 1 visar mapparna direkt under SDK-mappen och innehåller en kort beskrivning av var och en.
Tabell 1. Mappar i UDI SDK
Mapp | Den här mappen innehåller |
---|---|
Innehåller | De C++-huvudfiler som krävs för att skapa anpassade guidesidor för UDI-guiden |
Libs | C++-biblioteksfilerna som ska länkas till din anpassade sida. det finns 32-bitars- och 64-bitarsversioner av biblioteken för statiska länkar. Not: Itanium-versioner av biblioteken (IA-64) är inte tillgängliga. |
SampleEditor | Ett Visual Studio-projekt för att skapa en anpassad redigerare som används för att redigera samplepage-sidan i UDI-guiden Designer, som är skriven i C# |
SamplePage | Ett Visual Studio-projekt för att skapa en anpassad UDI-guidesida, som är skriven i Visual C++ |
Granska Visual Studio-lösningen för SamplePage
Innan du börjar skapa anpassade guidesidor och sidredigerare bör du utföra följande uppgifter för att förbereda UDI-utvecklingsmiljön:
Granska stegen i livscykeln för en UDI-guidesida enligt beskrivningen i Granska guidens sidlivscykel.
Granska Visual Studio-lösningen för exemplet SamplePage i UDI SDK enligt beskrivningen i Granska Exemplet på SamplePage.
Granska guidens sidlivscykel
En UDI-guidesida har metoder som motsvarar varje fas (eller fas) i sidans livscykel. Som en del av att skapa din anpassade guidesida måste du åsidosätta dessa metoder med din kod. Tabell 2 visar de metoder som du behöver åsidosätta och innehåller en kort beskrivning av varje metod, inklusive när du ska använda metoden i guidens sidlivscykel.
Tabell 2. Metoder i en guide, sidlivscykel
Metod | Beskrivning |
---|---|
OnWindowCreated | Den här metoden anropas en gång när sidans fönster har skapats. För den här metoden skriver du kod som initierar sidan för första gången och som bara behöver utföras en gång. Använd till exempel den här metoden för att initiera fält eller läsa konfigurationsinformation från Setter-elementen i konfigurationsfilen för UDI-guiden. |
OnWindowShown | Den här metoden anropas varje gång sidan visas (visas) i UDI-guiden. Den kallas första gången sidan visas och varje gång du navigerar till sidan genom att välja Nästa eller Tillbaka i guiden. För den här metoden skriver du kod som förbereder sidan som ska visas, till exempel att läsa minnesvariabler, aktivitetssekvensvariabler eller miljövariabler och sedan uppdatera sidan baserat på eventuella ändringar i dessa variabler. |
OnCommonControlEvent | Den här metoden kan anropas varje gång guidesidan visas och tar emot ett WM_NOTIFY meddelande från ett underordnat meddelande (vanligtvis vanliga kontroller). För den här metoden skriver du kod som hanterar WM_NOTIFY baserat på aviseringsmeddelandet. Du kanske till exempel vill svara på händelser från en gemensam kontroll, till exempel svara på markera eller dubbelklicka på händelser för en TreeView-kontroll . |
OnUnhandledEvent | Den här metoden anropas när ett ohanterat fönstermeddelande inträffar för din guidesida. Den här metoden ger möjlighet att fånga upp och hantera dessa annars ohanterade fönstermeddelanden. För den här metoden skriver du kod som hanterar de fönstermeddelanden som är relevanta för din guidesida. Normalt behöver du inte åsidosätta den här metoden. |
OnNextSelected | Den här metoden anropas när du väljer Nästa i guiden. För den här metoden skriver du kod som utför nödvändiga åtgärder innan du går vidare till nästa guidesida, till exempel att utföra validering som kan ta lång tid. Om verifieringen misslyckas kan du avbryta nästa begäran och visa ett meddelande. |
OnWindowHidden | Den här metoden anropas varje gång sidan döljs när antingen föregående eller nästa guidesida visas. För den här metoden skriver du kod som utför åtgärder innan sidan döljs innan en annan sida visas. Normalt behöver du inte åsidosätta den här metoden. |
Granska exemplet samplepage
Granska exemplet SamplePage med hjälp av följande lista, som representerar händelsesekvensen under guidesidans livscykel i SamplePage-exemplet:
UDI-guiden, OSDSetupWizard.exe, läser konfigurationsinformationen från konfigurationsfilen för UDI-guiden i exemplet (Config.xml-filen) enligt beskrivningen i Steg 1: UDI-guiden (OSDSetupWizard.exe) läser Config.xml-filen.
UDI-guiden läser in de DLL:er som krävs för varje guidesida som anges i konfigurationsfilen för UDI-guiden enligt beskrivningen i Steg 2: UDI-guiden läser in DLL:en för den anpassade guidesidan.
UDI-guiden visar den anpassade guidesidan och tillåter önskad kontrollinteraktion enligt beskrivningen i Steg 3: UDI-guiden Visar den anpassade guidesidan.
När den anpassade guidesidan har samlat in informationen utför du alla nödvändiga uppgifter innan du väljer Nästa för att gå vidare till nästa guide enligt beskrivningen i Steg 4: Nästa knapp är markerad på sidan Anpassad guide.
Steg 1: UDI-guiden (OSDSetupWizard.exe) läser Config.xml-filen
När UDI-guiden (OSDSetupWizard.exe) startar läser den som standard konfigurationsfilen för UDI-guiden, som är den UDIWizard_Config.xml filen – den primära konfigurationsfilen för UDI-guiden.
Obs!
I exemplet används den Config.xml filen som konfigurationsfil. I MDT är standardkonfigurationsfilen den UDIWizard_Config.xml filen som finns i mappen Skript i MDT Files-paketet för konfiguration.
Du kan åsidosätta standardkonfigurationsfilen som används av UDI-guiden genom att ändra aktivitetssekvenssteget för UDI-guiden så att parametern /definition används. Mer information om hur du åsidosätter standardkonfigurationsfilen som används i UDI-guiden finns i "Åsidosätt konfigurationsfilen som används av UDI-guiden".
Elementen på den översta nivån i filen Config.xml är
-
Mer information om schemat för konfigurationsfilen för UDI-guiden och vart och ett av dessa element finns i UDI-guidens schemareferens för konfigurationsfil.
UDI-guiden söker igenom DLL-elementet och letar efter .dll filer som ska läsas in. I exemplet visas två .dll filer: SamplePage.dll och SharedPages.dll. Dessa .dll filer måste finnas i samma mapp som OSDSetupWizard.exe – mappen Tools\platform (där plattformen är x86 för 32-bitarsversionen eller x64 för 64-bitarsversionen).
UDI-guiden söker igenom elementet Pages och letar efter de sidor som har definierats. I exemplet definieras två sidor: Anpassad och SummaryPage. Typattributet för sidelementet definieras i filen PageClassIDs.h och definierar unikt typen av anpassad sida.
I exemplet är den definierade typen Microsoft.SamplePage.LocationPage. För din anpassade sida ersätter du följande för att undvika eventuella konflikter med andra sidor som du kan skapa i framtiden:
Ditt organisationsnamn i stället för Microsoft.
Projektnamnet i stället för SamplePage.
Namnet på den anpassade guidens sida i stället för LocationPage.
Steg 2: UDI-guiden läser in DLL-filen för den anpassade guidesidan
När UDI-guiden läser in DLL-filen anropas funktionen RegisterFactories , som måste implementeras i din .dll-fil. I exemplet implementeras den här funktionen i filen dllmain.ccp. Varje guidesida som du skapar måste implementera funktionen RegisterFactories .
Funktionen RegisterFactories används för att registrera fabriksklassen för din guidesida med klassfabriksregistret för UDI-guiden. Klassfabriker är klasser som kan skapa en instans av en annan klass. Funktionen RegisterFactories skapar en ny instans av en fabriksklass och skickar klassen till klassfabriksregistret för UDI-guiden, vilket gör den fabriksklassen tillgänglig för guiden. UDI-guiden söker efter en fabriksklass som registrerats med ett ID som matchar attributet Typ för sidelementet för den anpassade guidesidan.
I exemplet definieras ID:t som ID_Location i filen PageClassIds.h som Microsoft.SamplePage.LocationPage, som matchar attributet Typ för elementet Page i filen Config.xml. ID_Location skickas som en parameter i funktionen RegisterFactories som implementeras i filen dllmain.ccp.
Du kan skapa en funktion med hjälp av funktionsmallen Register_name för att förenkla skapandet av en ny fabriksinstans och registrera den nyligen skapade instansen. Namnvärdet som anges med hjälp av funktionsmallen Registrera måste implementera gränssnittet iClassFactory. ClassFactoryImpl-klassen hanterar det mesta av informationen för att implementera en klassfabrik.
Du kan också använda funktionen RegisterFactories för att registrera uppgiftstyper och valideringstyper. Mer information finns i följande avsnitt:
Obs!
Exemplet innehåller och registrerar endast en anpassad guidesida. Exemplet innehåller inte anpassade uppgifter eller validatorer och registrerar därför inte några anpassade uppgifter eller validerare.
Steg 3: UDI-guiden visar den anpassade guidesidan
Den anpassade guidesidan i exemplet definieras i LocationPage.cpp-filen. Guidesidor härleds från mallklasser som tillhandahåller mycket av de funktioner som en sida har. Alla guidesidor ska härledas från mallklassen WizardPageImpl, som implementerar gränssnittet IWizardPage. Varje guidesida kan implementera andra valfria mallklasser och motsvarande gränssnitt baserat på sidans behov.
Mallklassen WizardPageImpl har flera användbara gränssnitt som kan hjälpa dig att skriva anpassade guidesidor. Implementera mallklassen WizardPageImpl som basklass för din anpassade guidesida.
För en lista över tillgängliga:
Mallklasser för guidesidor finns i Hjälpklasser för guidesidor
Gränssnitt för guidesidans mallklasser finns i Guidens sidgränssnitt
Den anpassade guidesidan i exemplet härleds från mallklassen WizardPageImpl och implementerar gränssnittet IWizardPage. Dessutom implementerar den anpassade guidesidan gränssnittet IFieldCallback . Båda dessa implementeras i filen LocationPage.cpp.
Exempelsidan för den anpassade guiden åsidosätter följande metoder:
OnWindowCreated. Metoden OnWindowCreated i exempelguiden anropar följande metoder:
AddField. Den här metoden relaterar IDC_COMBO_LOCATION box-kontrollen i den IDD_LOCATION_PAGE resursen med dataelementetmed namnet Plats i Config.xml-filen.
Förutom metoden AddField kan du använda metoderna AddRadioGroup och AddToGroup för att stödja andra kontroller och beteenden.
Obs!
Kontrollera att du anropar metoden AddField, AddRadioGroup eller AddToGroup innan du anropar metoden InitFields .
InitFields. Använd den här metoden för att initiera de fält (kontroller) som du har lagt till i formuläret. Pekaren på sidan är en parameter. I exemplet skickas den här pekaren, som refererar till den aktuella sidan.
Obs!
För att stödja användningen av den här pekaren måste du implementera gränssnittet IFieldCallback utöver de gränssnitt som mallklassen WizardPageImpl stöder.
IFieldCallback-gränssnittet anropar metoden SetFieldDefault, som används för att ange standardvärden för andra kontroller än textrutor och kryssrutekontroller. I exemplet anger metoden SetFieldDefault det första indexet för kombinationsrutekontrollen baserat på standardvärdet som anges i elementet Standard för elementet Fält i filen Config.xml.
Metoden OnWindowCreated konfigurerar formulärstyrenheten med hjälp av IFormController-gränssnittet. Mer information om hur du konfigurerar formulärstyrenheten finns i Konfigurera formuläret.
InitLocations. Den här metoden fyller i kombinationsrutan från listan över platser i Config.xml-filen. Dataelementet och underordnade DataItem-element som Confg.xml-filen innehåller en lista över möjliga värden.
OnNextSelected. Den här metoden utför följande uppgifter:
Uppdateringar aktivitetssekvensvariabeln TSLocation med värdet valt i kombinationsrutan med hjälp av metoden SaveFields
Lägger till information som visas på sidan Sammanfattning med hjälp av metoden SaveFields
Steg 4: Nästa knapp väljs på sidan Anpassad guide
När användaren slutför fälten på den anpassade guidesidan väljer de Nästa, som anropar metoden OnNextSelected . Metoden OnNextSelected utför alla nödvändiga uppgifter innan du fortsätter till nästa guidesida, till exempel att registrera eventuella konfigurationsändringar som görs på den anpassade guidesidan.
För den anpassade exempelguidesidan implementeras åsidosättningen för metoden OnNextSelected i filen LocationPage.ccp. I metoden OnNextSelected på exempelsidan för anpassad guide anropas följande metoder:
InitSection. Den här metoden initierar rubriken (etikett bildtext) för sammanfattningsdata som visas på sidan Sammanfattning. Vanligtvis kan du ange det här värdet med hjälp av funktionen DisplayName(). De data som är associerade med den här bildtext sparas med hjälp av metoden SaveFields.
SaveFields. Den här metoden sparar fältvärden i aktivitetssekvensvariabler och till de data som visas på sidan Sammanfattning .
Granska Visual Studio-lösningen SampleEditor
Innan du börjar skapa egna anpassade guidesidor och sidredigerare ska du utföra följande steg för att förbereda UDI-utvecklingsmiljön:
Granska arkitekturen i UDI-guiden Designer enligt beskrivningen i Granska UDI-guiden Designer Arkitektur.
Granska komponenterna på en UDI-guidesida som kan anpassas med konfigurationsfilen för UDI-guiden enligt beskrivningen i Granska konfigurerbara komponenter för en UDI-guidesida.
Granska EditorPage-exemplet i UDI SDK enligt beskrivningen i Granska EditorPage-exemplet.
Granska UDI-guiden Designer Arkitektur
UDI-guiden Designer har utvecklats med WPF, Prism och Unity. UDI-Designer används för att redigera konfigurationsfilen för UDI-guiden (UDIWizard_Config.xml), som UDI-guiden (OSDSetupWizard.exe) läser vid körning. Elementet Pages i konfigurationsfilen för UDI-guiden innehåller en lista över sidor som har ett separat sidelement för varje guidesida.
När du redigerar konfigurationsinställningarna för en guidesida läser UDI-guiden Designer in den anpassade sidredigeraren som motsvarar guidens sidtyp. De anpassade sidredigerarna för guider utvecklas som WPF-användarkontroller. De anpassade sidorna i guidens sidredigerare använder designmönstret Model-View-ViewModel (MVVM) för WPF.
MVVM-designmönstret hjälper till att separera användargränssnittet (UI; presentation) från de data som presenteras. Data är en fasad över sidelementet i konfigurationsfilen för UDI-guiden (den Config.xml filen i exemplet), som används med egenskapen CurrentPage i IDataService-gränssnittet .
UDI-guiden Designer använder DependencyAttribute för att få åtkomst till Klassen DataService baserat på beroendeinmatningsramverket i Unity. Mer information om ramverket för beroendeinterjektion i Unity finns i Mata in lite liv i dina program – Lära känna Unity-programblocket.
Granska konfigurerbara komponenter för en UDI-guidesida
När du skapar din anpassade guidesida kan vissa konfigurationsinställningar anges i kod och kan inte ändras när du har kompilerat sidan. För andra konfigurationsinställningar måste du dock tillåta att dessa konfigurationsinställningar ändras med hjälp av UDI-guiden Designer.
Vanligtvis sparas de konfigurationsinställningar som du vill konfigurera med UDI-guiden Designer i konfigurationsfilen för UDI-guiden (Config.xml filen i exemplet). Men du kan också skapa en egen separat konfigurationsfil om det behövs. Ett exempel på hur du använder en separat konfigurationsfil är filen UDIWizard_Config.xml.app, som programidentifieringsaktiviteten och applicationpage-guidens sidtyp använder.
Följande är en lista över vanliga konfigurationsinställningar som du kan hantera med hjälp av UDI-guiden Designer:
Fält. Med fält kan användarna ange indata. Fält visas som Fältelement i konfigurationsfilen för UDI-guiden (UDIWizard_Config.xml), som innehåller konfigurationsinställningarna för varje fält. Motsvarande sidredigerare för guiden måste ange en metod för att redigera fältkonfigurationsinställningarna för fältet med hjälp av FieldElementControl.
Egenskaper. Setters hjälper till att skapa egenskaper för entiteter på sidan, till exempel sidor i sidelementet , fält i elementet Fält eller data i elementen Data eller DataItem . Du konfigurerar egenskaper i Setter-elementen . Lägg till ett separat Setter-element för varje egenskap som du vill definiera. Du redigerar egenskaperna med hjälp av SetterControl och konfigurerar andra Setter-element med hjälp av andra kontroller.
Data. Data används för att lagra information för användning av guidesidan och andra komponenter. Du kan definiera data för sidor eller fält med hjälp av elementen Data eller DataItem . Data kan definieras i en platt eller hierarkisk struktur genom korrekt användning av data - eller DataItem-elementen . Config.xml i exemplet i SDK visar hur du skapar flata datastrukturer.
Den anpassade guidens sidredigerare som du skapar måste kunna hantera dessa konfigurationsinställningar.
Granska EditorPage-exemplet
EditorPage-exemplet används för att konfigurera konfigurationsinställningarna för guiden SamplePage i konfigurationsfilen för UDI-guiden. EditorPage-exemplet har följande primära komponenter:
Användargränssnitt för att konfigurera inställningarna för kombinationsrutan Plats
Användargränssnitt för att lägga till eller redigera en plats i listan över möjliga platser, som visas i kombinationsrutan Plats
Konfigurationsinställningar som lästs från och sparats i konfigurationsfilen för UDI-guiden
Stödkod för de andra komponenterna
Granska EditorPage-exemplet i Visual Studio genom att utföra följande steg:
Granska hur sidredigeraren i Guiden SampleEditor läses in och initieras i UDI-guiden Designer enligt beskrivningen i Granska guidesidan Editor inläsning och initiering.
Granska användargränssnittet som används för att redigera kombinationsrutan Plats i LocationPageEditor.xaml och LocationPageEditor.xaml.cs filer enligt beskrivningen i Granska användargränssnittet som används för att konfigurera kombinationsrutan Plats.
Granska användargränssnittet som används för att lägga till eller redigera platser i listan i filerna AddEditLocationView.xaml och AddEditLocationView.xaml.cs enligt beskrivningen i Granska användargränssnittet som används för att ändra listan över möjliga platser.
Granska koden som används för att hantera konfigurationsinformation som sparats i konfigurationsfilen för UDI-guiden enligt beskrivningen i Granska koden som används för att hantera konfigurationsinformation.
Granska guidesidan Editor inläsning och initiering
Sidredigerare för anpassade guider läses in enligt UDI-guidens Designer. UDI-guiden Designer konfigurationsfiler läses in när UDI-guiden Designer startar. UDI-guiden Designer söker igenom mappen install_folder\Bin\Config (där install_folder är namnet på mappen där MDT är installerat) efter filer som har ett .config filnamnstillägg.
Under konfigurationen av UDI-utvecklingsmiljön kopierade du filen SamplePage.dll.confg till mappen install_folder\Bin\Config. När du startar UDI-guiden Designer hittas filen SamplePage.dll.confg och läses in.
UDI-guiden Designer använder följande attribut för sidelementet i filen SamplePage.dll.confg för att läsa in och initiera EditorPage-exemplet:
DesignerAssembly. Det här attributet bestämmer namnet på DLL:en som ska läsas in. Den här DLL-filen måste placeras i samma mapp som UDIDesigner.exe-filen, som är mappen install_folder\Bin (där install_folder är namnet på den mapp där MDT är installerat).
DesignerType. Det här attributet är Microsoft .NET-typnamnet för klassen som innehåller WPF-användarkontrollen.
Skriv. Använd det här attributet för att konfigurera sidtypen för den anpassade guidesidan, som UDI-guiden läser in. UDI-guiden Designer använder det här attributet för att hitta lämpligt sidelement i konfigurationsfilen för UDI-guiden.
Dll. Använd det här attributet för att konfigurera DLL-elementet i konfigurationsfilen för UDI-guiden, som UDI-guiden Designer skapar.
Beskrivning. Använd det här attributet för att ange information om guidens sidredigerare. Värdet för det här attributet visas i dialogrutan Lägg till ny sida i UDI-guiden Designer, som används för att lägga till guidesidan i sidbiblioteket.
DisplayName. Använd det här attributet för att ange namnet på den anpassade guidesidan som visas i UDI-guiden Designer. Värdet för det här attributet visas i dialogrutan Lägg till ny sida i UDI-guiden Designer, som används för att lägga till guidesidan i sidbiblioteket.
I exemplet är typen för den anpassade guiden SamplePageMicrosoft.SamplePage.LocationPage, som sparas i filen Config.xml. Den Config.xml filen finns i mappen local_folder\SDK\SamplePage\SamplePage till (där local_folder är mappen som du skapade på utvecklingsdatorn tidigare i konfigurationsprocessen).
Granska användargränssnittet som används för att konfigurera platskombinationsrutan
När guidens sidredigerare läses in och initieras läses exempelredigeraren in när en sida med typen Microsoft.SamplePage.LocationPage redigeras. Sidredigerarens användargränssnitt lagras i filen LocationPageEditor.xaml.
Om du undersöker användargränssnittet på fliken Design och koden på fliken XAML kan du se relationen mellan det grafiska användargränssnittet och elementen och attributen i XAML (Extensible Application Markup Language).
Om du till exempel granskar elementet Controls:FieldElementControl i XAML kan du se hur det relaterar till layouten för motsvarande användargränssnitt. Använd elementet Controls:FieldElementControl för att definiera kontrollen FieldElementControl .
Bindningsparametrarna i XAML-filen binder fälten i exempelsideredigeraren med informationen i konfigurationsfilen för UDI-guiden. Följande kod kopplar till exempel textrutan Standardvärdetill standardelementet i konfigurationsfilen för UDI-guiden (Config.xml i exemplet):
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
Mer information finns i Gör data tillgängliga för bindning i XAML.
Använd elementet Views:CollectionTControl.ColumnCollectionView i XAML för att redigera listan över tillgängliga platser i rutnätsvyn. Du använder CollectionTControl-kontrollen för att visa rutnätsvyn och binda rutnätsvyn till dataelementet med namnet Plats i UDI-konfigurationsfilen.
Granska användargränssnittet som används för att ändra listan över möjliga platser
Användargränssnittet för att ändra listan över möjliga platser består av:
En sammanhangskänslig meny och knappar i menyfliksområdet som gör att du kan lägga till, redigera, ta bort eller ändra ordningen på objekt i listan över platser enligt beskrivningen i Granska sammanhangskänsliga meny- och menyfliksknappar för att ändra listan över platser
En dialogruta som initieras när du väljer att lägga till eller redigera ett objekt i listan över platser enligt beskrivningen i Granska dialogrutan för att lägga till eller redigera platser
Granska sammanhangskänsliga meny- och menyfliksknappar för att ändra listan över platser
När du högerklickar i listrutan som innehåller listan över platser visas en sammanhangskänslig meny. Menyfliksområdet har motsvarande knappar som gör att du kan utföra samma uppgifter. Kontrollelementet Views:CollectionsTControl i filen LocationPageEditor.xaml definierar metoderna som anropas baserat på den åtgärd som vidtagits och de egenskaper som du anger på följande sätt:
SelectedItem. Den här databundna egenskapen aktiveras när användaren väljer ett objekt i listan. Den här egenskapen är knuten till egenskapen CurrentLocation i vymodellen, som finns i LocationPageEditorViewModel.cs-filen och används av CollectionTControl-kontrollen för att skicka objektet som markerats när du redigerar eller tar bort ett befintligt objekt.
AddItemAction. Den här åtgärden utförs när användaren väljer alternativet Lägg till objekt från den sammanhangskänsliga menyn eller motsvarande knappar i menyfliksområdet. Det finns en databindning till en egenskap i vymodellen som returnerar AddLocationAction-objektet . Det här objektet är metoden AddLocationCallback som finns i filen LocationPageEditorViewModel.cs och visar dialogrutan i filen AddEditLocationView.xaml.
EditItemAction. Den här åtgärden utförs när användaren väljer alternativet Redigera objekt på den sammanhangskänsliga menyn. Det finns en databindning till en egenskap i vymodellen som returnerar Objektet EditLocationAction . Det här objektet är metoden EditLocationCallback som finns i filen LocationPageEditorViewModel.cs och visar dialogrutan i filen AddEditLocationView.xaml.
RemoveAction. Den här åtgärden utförs när användaren väljer alternativet Ta bort objekt från den sammanhangskänsliga menyn. Det finns en databindning till en egenskap i vymodellen som returnerar RemoveAction-objektet . Det här objektet är metoden EditLocationCallback , som finns i LocationPageEditorViewModel.cs-filen, och visar ett meddelande som bekräftar borttagningen av platsen.
Granska dialogrutan för att lägga till eller redigera platser
Om du lägger till en ny plats i listan över platser eller redigerar en befintlig plats visas ett meddelande som finns i filen AddEditLocationView.xaml. Meddelandet visas med hjälp av window-metoden ShowDialogWindow i LocationPageEditorViewModel.cs-filen.
Användargränssnittet i filen AddEditLocationView.xaml består av:
En dialogruta med namnet DialogFrame, som innehåller följande element:
En rubrik som du konfigurerar med hjälp av dialogruteattributet DialogTitle i dialogrutan
En OK-knapp som anger returstatusen som för egenskapen Godkänd till True (Returstatusen är markerad i metoden AddLocationCallback i filen LocationPageEditorViewModel.cs för att avgöra om användaren har valt OK.)
En Avbryt-knapp som anger returstatusen som för egenskapen Godkänd till False (Returstatusen är markerad i metoden AddLocationCallback i filen LocationPageEditorViewModel.cs för att avgöra om användaren har valt Avbryt.)
Ett WPF-element som innehåller:
En etikett som du konfigurerar med hjälp av innehållsattributet
En textruta som är bunden till dataelementet med namnet Plats i UDI-konfigurationsfilen (Config.xml-filen i exemplet)
Granska koden som används för att hantera konfigurationsinformation
Konfigurationsinformationen för den anpassade guidesidan lagras i konfigurationsfilen för UDI-guiden, som är:
Config.xml fil i exemplet som medföljer UDI SDK (den här filen innehåller endast konfigurationsinställningarna för exemplet.)
UDIWizard_Config.xml fil som medföljer MDT, lagrad i mappen installation_folder\Templates\Distribution\Scripts (där installation_folder är mappen där du installerade MDT); den här filen innehåller konfigurationsinställningarna för alla inbyggda guidesidor och steg
I exemplet SampleEditor hjälper rutinen Platser till att hantera konfigurationsinformationen och finns i filen LocationPageEditorViewModel.cs. Rutinen Platser returnerar en lista över platserna från konfigurationsfilen för UDI-guiden. Mer specifikt innehåller listan som returneras ett objekt för varje DataItem-element i konfigurationsfilen för UDI-guiden.
Skapa anpassade UDI-guidesidor
Processen på hög nivå för att skapa anpassade sidor i UDI-guiden är följande:
Skapa en kopia av SamplePage-lösningen som utgångspunkt.
Placera önskade kontroller (fält) i formuläret.
Skriv kod för att utföra lämpliga uppgifter när guidesidan läses in (åsidosättningar för metoden OnWindowCreated ), inklusive följande steg:
Initiera formuläret.
Läs minnesvariabler, aktivitetssekvensvariabler, miljövariabler eller XML-filinformation (till exempel Setter-egenskaper ).
Skriv valfri kod för att utföra lämpliga uppgifter när sidan visas (åsidosättningar för metoden OnWindowShown ), inklusive följande steg:
Aktivera eller inaktivera kontroller baserat på information som läses in när sidan lästes in i steg 3.
Uppdatera kontrollerna baserat på information som läses in när sidan sedan lästes in i steg 3, till exempel populationen av kontroller baserat på den information som lästs.
Skriv valfri kod för att utföra lämpliga uppgifter medan användaren interagerar med guidesidan.
Skriv valfri kod för att utföra lämpliga uppgifter när användaren väljer Nästa i UDI-guiden (åsidosättningar för metoden OnNextSelected ), inklusive följande steg:
Uppdatera eventuella minnesvariabler, aktivitetssekvensvariabler, miljövariabler eller XML-filinformation.
Uppdatera sammanfattningssidans information (om den inte utförs av fälten på sidan).
Skapa lösningen.
Se till att den version av DLL-filen som du skapar är samma processorplattform som installationen av MDT – särskilt processorplattformen för Windows Preinstallation Environment (Windows PE). UDI-guiden kan köras i:
Det befintliga operativsystemet på måldatorn. Du kan köra 32-bitarsversioner av guidesidan på 32-bitars eller 64-bitars Windows-operativsystem. Du kan dock bara köra 64-bitarsversioner av guidesidan på 64-bitars Windows-operativsystem.
Windows PE på måldatorn. Windows PE stöder inte körning av 32-bitarsprogram på en 64-bitarsversion av Windows PE. Därför måste du ha skapat en version för guidesidan för varje processorarkitektur i Windows PE som du planerar att använda.
Kopiera DLL-filen för din anpassade guidesida till installation_folder\Templates\Distribution\Tools\ plattformsmapp (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 är för 64-bitarsversionen).
Slutför stegen för att skapa anpassad sidredigerare.
Skapa anpassade sidredigerare för guider
Processen på hög nivå för att skapa anpassade sidredigerare för UDI-guiden är följande:
Skapa en kopia av SampleEditor-lösningen som utgångspunkt.
Skapa användargränssnittet för den primära sidredigeraren i en .xaml-fil.
Lägg till instanser av FieldElementControl-kontrollen som krävs av guidesidan som ska konfigureras (om det behövs).
Lägg till instanser av SetterControl-kontrollen som krävs av guidesidan som ska konfigureras (om det behövs).
Lägg till instanser av CollectionTControl-kontrollen som krävs av guidesidan som ska konfigureras (om det behövs).
Lägg till IDataService-gränssnittet .
Skriv lämplig kod för att uppdatera konfigurationsfilen för UDI-guiden baserat på konfigurationsinställningarna som ska konfigureras med hjälp av den anpassade guidens sidredigerare.
Skapa underordnade dialogrutor i en .xaml-fil och anropa dem från den primära sidredigeraren med hjälp av gränssnittet IMessageBoxService som krävs av den guidesida som ska konfigureras.
Lägg till lämpliga gränssnitt i UDI-guiden Designer menyfliksområdet baserat på kraven på den guidesida som ska konfigureras.
Skapa lösningen.
Obs!
Se till att den version av DLL-filen som du skapar är samma processorplattform som installationen av MDT. Om du till exempel installerar 64-bitarsversionen av MDT skapar du en 64-bitarsversion av din anpassade sidredigerare.
Skapa en UDI-guide Designer konfigurationsfil för att läsa in nödvändiga DLL:er och mappa guidens sidredigerare med motsvarande guidesida (den SamplePage.dll.config filen i exemplet).
Mer information om de element som krävs för att utföra mappningen mellan guidesidan och guidens sidredigerare finns i elementet DesignerMappings , underordnade element och motsvarande attribut.
Kopiera UDI-guiden Designer konfigurationsfil som du skapade i föregående steg till mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT-versionen).
Kopiera DLL-filen för den anpassade guidens sidredigerare till mappen installation_folder\Bin (där installation_folder är mappen där du installerade MDT).
Skapa anpassade UDI-uppgifter
UDI-uppgifter är DLL:er skrivna i C++ som implementerar ITask-gränssnittet. Du registrerar DLL med UDI-guiden Designer aktivitetsbibliotek genom att skapa en UDI-guide Designer konfigurationsfil (.config fil) och placera den i mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT).
Obs!
Du kan skapa en DLL som innehåller guidesidor, uppgifter och validerare i samma .dll fil. Du kan också skapa en enda UDI-guide Designer konfigurationsfil (.config) som innehåller konfigurationsinställningarna för guidesidor, uppgifter och validerare i DLL:en.
Så här skapar du anpassade UDI-uppgifter
Skriv kod som implementerar ITask-gränssnittet och följande metoder:
Skriv kod som registrerar den anpassade aktivitetsklassfabriken med fabriksregistret.
Skapa lösningen för din anpassade uppgift.
Obs!
Se till att den version av DLL-filen som du skapar är samma processorplattform som installationen av MDT. Om du till exempel installerar 64-bitarsversionen av MDT skapar du en 64-bitarsversion av din anpassade UDI-uppgift.
Skapa ett aktivitetselement under elementet TaskLibrary i UDI-guiden Designer konfigurationsfil som liknar följande utdrag:
<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>
Obs!
Alla aktivitetselement bör innehålla parametern BitmapFilename . Ange alla andra parametrar som uppgiften kräver. I föregående utdrag används till exempel loggparametern för att ange en parameter för platsen för en loggfil.
Kopiera UDI-guiden Designer konfigurationsfil som skapades i föregående steg till mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT).
Kopiera DLL-filen för din anpassade uppgift till plattformsmappen installation_folder\Templates\Distribution\Tools\ (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 är för 64-bitarsversionen).
Skapa anpassade UDI-validatorer
UDI-validatorer är DLL:er skrivna i C++ som implementerar IValidator-gränssnittet . Du registrerar DLL-filen med UDI-guiden Designer validatorbibliotek genom att skapa en UDI-guide Designer konfigurationsfil (.config fil) och placera den i mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT).
Så här skapar du anpassade UDI-validerare
Skriv kod som skapar en underklass av klassen BaseValidator och implementerar följande metoder:
Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Formulärkontrollanten anropar Init-medlemmen för att initiera validatorn. Den här metoden måste anropa Init-metoden för klassen BaseValidator . Den läser vanligtvis alla egenskaper som angetts för validatorn från konfigurationsfilen för UDI-guiden. Validatorn InvalidCharactersValidator hämtar till exempel värdet för egenskapen InvalidChars med den här metoden.
IsValid. Formulärkontrollanten anropar den här metoden för att se om kontrollen innehåller giltig text. Följande är ett exempel på metoden IsValid för en validerare som verifierar att fältet inte är tomt:
BOOL IsValid(LPBSTR pMessage) { __super::IsValid(pMessage); _bstr_t text; m_pText->GetText(text.GetAddress()); return (text.length() > 0); }
Init(IControl *pControl, LPCTSTR-meddelande). Formulärkontrollanten anropar den här medlemmen för varje tangenttryckning och andra händelser så att valideraren kan verifiera innehållet i kontrollen och uppdaterade meddelanden längst ned på guidesidan (eller rensa dem).
Det här är vanligtvis de enda metoder som du behöver åsidosätta. Beroende på valideraren kan du dock behöva åsidosätta andra metoder i underklassen för klassen BaseValidator som du skapar. Mer information om dessa andra metoder finns i klassen BaseValidator .
Skriv kod som registrerar den anpassade uppgiftsklassen med registerfabriken.
Skapa lösningen för din anpassade uppgift.
Obs!
Se till att den version av DLL-filen som du skapar är samma processorplattform som installationen av MDT. Om du till exempel installerar 64-bitarsversionen av MDT skapar du en 64-bitarsversion av din anpassade UDI-uppgift.
Skapa ett valideringselement under elementet ValidatorLibrary i UDI-guiden Designer konfigurationsfil som liknar följande utdrag:
<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>
Varning
Alla valideringselement bör innehålla parametern Meddelande . Ange alla andra parametrar som krävs av valideraren. I föregående utdrag används till exempel parametern NamedPattern för att ange en parameter för namnet på ett fördefinierat mönster för reguljära uttryck.
Kopiera UDI-guiden Designer konfigurationsfil som skapades i föregående steg till mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT).
Kopiera DLL-filen för din anpassade uppgift till plattformsmappen installation_folder\Templates\Distribution\Tools\ (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 är för 64-bitarsversionen).
Referens för UDI-guiden
Komponenter för guidens sida
Du kan använda någon av flera fördefinierade komponenter för att skapa dina anpassade sidor.
Skapa komponentinstanser
UDI-guiden använder klassfabriker för att skapa nya instanser av objekt åt dig. Dessa fabriker registreras med ett fabriksregister med hjälp av en sträng som nyckel till fabriken. Till exempel identifieras WmiRepository-komponenten av strängen "Microsoft.Wizard.WmiRepository", som är tillgänglig i IWmiRepository-huvudfilen som ID_WmiRepository.
Förutsatt att du har skrivit sidan som en underklass av WizardPageImpl kan du skapa en ny instans av en WmiRepoistory så här:
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
Funktionen CreateInstance är en typsäker mallfunktion för att skapa nya instanser av komponenter. PWmiRepository är en smart pekare, så den hanterar referensräkning åt dig.
Creatable-komponenter
Det finns en uppsättning komponenter som du kan registrera med registret. Den första uppsättningen komponenter registreras alltid eftersom den körbara filen för huvudfilen i UDI-guiden innehåller den. De andra två uppsättningarna med komponenter finns i "valfria" DLL:er. För att dessa komponenter ska vara tillgängliga måste DLL-filen anges i DLL-avsnittet i .config XML-filen. Koden behöver inte veta vilken körbar fil som innehåller en specifik komponent.
Listan över komponent-ID:t för komponenter (komponentnamnet är samma som ID:t men utan den inledande ID_) som registrerats med fabriksregistret (definierat i OSDSetupWizard) visas i tabell 3.
Tabell 3. Komponent-ID:t
ID | Beskrivning |
---|---|
ID_ACPowerTask | (ITask, IWizardComponent) En preflight-uppgift som säkerställer att datorn inte körs på enbart batteri |
ID_AppDiscoveryTask | (ITask, IWizardComponent) En specialiserad uppgift för att identifiera vilka programvaruobjekt som du har installerat på datorn |
ID_BackgroundTask | (IBackgroundTask, IWizardComponent) Kan användas för att köra en uppgift på en annan tråd |
ID_CopyFilesTask | (ITask, IWizardComponent) En uppgift att kopiera en eller flera filer |
ID_FormController | (IFormController) Du behöver mest inte skapa en instans själv, eftersom sidan tar emot en egen instans |
ID_InvalidCharactersValidator | (IValidator) Säkerställer att inget textfält innehåller tecken från en lista som angetts för valideraren |
ID_Logger | (ILogger) Du behöver oftast inte skapa en instans själv, eftersom sidan tar emot en pekare till den delade instansen |
ID_NonEmptyValidator | (IValidator) En validerare som säkerställer att inget fält är tomt |
ID_PasswordValidator | (IValidator) En validerare som säkerställer att inga två textfält har samma innehåll |
ID_Regex | (IRegEx) Utvärderar reguljära uttryck och letar efter matchningar |
ID_RegExValidator | (IValidator) En validerare som validerar mot ett reguljärt uttryck eller ett känt mönster |
ID_SimpleStringProperties | (IStringProperties, ISimpleStringProperties) Ger ett enkelt sätt att skicka egenskaper till uppgifter utan att använda XML |
ID_ShellExecuteTask | (ITask, IWizardComponent) Köra ett externt program |
ID_SummaryBag | (ISummaryBag) Tillgänglig indirekt från din sida via formulärmetoden |
ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent) Hanterar körning av en uppsättning uppgifter och användargränssnittet |
ID_WmiRepository | (IWmiRepository, IWizardComponent) Gör att du kan köra WMI-frågor (Windows Management Instrumentation) |
ID_IXmlDocument | (IXmlDocument) Tillhandahåller en fasad för att läsa och skriva XML-dokument |
De definierade OSDRefreshWizard.dll, delade sidor och andra kontrollkomponenter visas i tabell 4 och tabell 5.
Tabell 4. Katalogkontroller
ID | Beskrivning |
---|---|
ID_Directory | (IDirectory) En fasad för att hämta kataloginformation från filsystemet |
Tabell 5. Definierad SharedPages.dll
ID | Beskrivning |
---|---|
ID_ADHelper | (IADHelper) Tillhandahåller en fasad för en begränsad uppsättning funktioner i Active Directory® Domain Services (AD DS) |
ID_CpuInfo | (ICpuInfo) Avgör om processorn är 32 eller 64 bitar |
ID_DomainJoinValidator | (IDomainJoinValidator) Har vissa metoder för att kontrollera om en uppsättning autentiseringsuppgifter tillåts ansluta till en domän |
ID_DriveList | (IDriveList, IBindableList, IWizardComponent) Använder WMI för att hämta en lista över enheter på datorn |
ID_WiredNetworkTask | (ITask) En uppgift som kontrollerar om du är ansluten till nätverket med ett fast kabelanslutet (i stället för trådlöst) nätverkskort |
Kontrollkomponenter
Du interagerar med kontrollerna på sidan via mallfunktionen GetControlWrapper , som ger åtkomst till en av de typer av komponenter som anges i tabell 6.
Tabell 6. Komponenter
Typer av dialogkontroll | Beskrivning |
---|---|
CONTROL_CHECK_BOX | (ICheckBox) En fasad för att arbeta med kryssrutekontroller |
CONTROL_COMBO_BOX | (IComboBox) En fasad för kombinationsrutekontroller |
CONTROL_GENERIC | (IControl) Gör att du kan arbeta med de flesta typer av kontroller för att styra aktivering och synligt tillstånd |
CONTROL_LIST_VIEW | (IListView) En fasad som ger åtkomst till funktionerna i en listvykontroll |
CONTROL_PROGRESS_BAR | (IProgressBar) En fasad för att arbeta med positionen för en förloppsindikatorkontroll |
CONTROL_RADIO_BUTTON | (IRadioButton) En fasad för att arbeta med alternativknappskontroller |
CONTROL_STATIC_TEXT | (IStaticText) En fasad som ger läs-/skrivbehörighet till texten i en kontroll, till exempel en etikett eller textruta |
CONTROL_TREE_VIEW | (ItreeView) En fasad för att arbeta med en trädvykontroll |
Bildlistekomponent
Den här komponenten är en fasad för en ImageList-kontroll på sidan. Du skapar en avbildningslista via gränssnittet IListView eller ITreeView .
FormController-komponent
Guiden skapar den här komponenten åt dig och skickar den till din sida. Du kommer åt den från sidan med hjälp av metoden Form , som basklassen WizardPageImpl implementerar.
InvalidCharacterValidator-komponent
Det här är en typ av validerare som du kan inkludera på en sida. ID:t är ID_InvalidCharactersValidator (definieras i IValidator.h), som har textvärdet "Microsoft.Wizard.Validation.InvalidChars".
Den här valideraren söker efter en enda egenskap (ett Setter-element i .config-filen) med namnet InvalidChars, som är en lista över tecken som inte tillåts. Den kontrollerar tecknen i en textruta. Om texten innehåller tecken från den här listan rapporterar komponenten fel.
NonEmptyValidator-komponent
Det här är en typ av validerare som du kan inkludera på en sida. ID:t är ID_NonEmptyValidator (definieras i IValidator.h), som har textvärdet "Microsoft.Wizard.Validation.NonEmpty".
Den här valideraren rapporterar fel om textrutan (eller någon annan kontroll som stöder IStaticText) har ett tomt strängvärde.
PasswordValidator-komponent
Det här är en typ av validerare som du kan inkludera på en sida. ID:t är ID_PasswordValidator (definieras i IValidator.h), som har textvärdet "Microsoft.Wizard.Validation.Password".
Den här valideraren fungerar med två olika textkontroller (kontroller som stöder IStaticText) och rapporterar fel om de inte innehåller samma värden. Med andra ord misslyckas det om textrutorna Lösenord och Bekräfta lösenord inte matchar.
Eftersom den här valideraren kräver två kontroller behöver den mer konfiguration än andra validerare. Konfigurationen kan se ut ungefär så här:
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);
Först definierar du kontrollen Bekräfta lösenord som "underordnad" i lösenordskontrollen . På så sätt inaktiveras även kontrollen Bekräfta lösenord om formulärkontrollanten inaktiverar lösenordskontrollen. Lägg sedan till en lösenordsverifierare i formuläret. Slutligen anger du lösenordsverifieraren med gränssnittet för kontrollen Bekräfta lösenord .
På grund av kravet på två kontroller måste du använda kod för att konfigurera den här valideraren i stället för den .config XML-filen.
RegExValidator-komponent
Det här är en typ av validerare som du kan inkludera på en sida. ID:t är ID_RegExValidator (definieras i IValidator.h), som har textvärdet "Microsoft.Wizard.Validation.RegEx".
Den här valideraren jämför innehållet i en textkontroll (en som stöder IStaticText) med ett reguljärt uttryck och misslyckas om texten inte matchar det reguljära uttrycket.
Du kan också använda den här valideraren med ett fördefinierat namngivet mönster. Om du vill använda ett reguljärt uttryck måste XML-koden innehålla en set-egenskap med namnet Pattern. Om du vill använda ett namngivet mönster i stället använder du en uppsättning med namnet NamedPattern som är inställd på ett av värdena i tabell 7.
Tabell 7. Namngivna mönstersetare
Mönster | Beskrivning |
---|---|
Användarnamn | Verifierar att texten antingen är av formulärdomänen\användaren eller user@domain |
ComputerName | Namnet måste vara mellan 1 och 15 tecken långt och får inte innehålla en uppsättning tecken (till exempel : och ?) |
Workgroup | Namnet måste vara mellan 1 och 15 tecken långt och får inte innehålla en uppsättning tecken (till exempel =, +och ?) |
Fabriksregistreringskomponent
Den här komponenten håller reda på alla klassfabriker och -tjänster. Den implementerar gränssnittet IFactoryRegistry och är indirekt tillgängligt via sidans containermetod . Dessutom läser registret in tilläggs-DLL:er. När en DLL har lästs in söker registret efter en exporterad funktion med namnet RegisterFactories. Du måste implementera den här funktionen och registrera klassfabrikerna för dina sidor, uppgifter och validatorer (och andra klassfabriker som du vill registrera). Här är ett exempel från exempelprojektet:
extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)
{
Register<LocationPageFactory>(ID_LocationPage, factories);
}
Loggningskomponent
Den här komponenten är tillgänglig för sidan via Logger-metoden (implementerad av WizardPageImpl). Du använder den här metoden för att skriva poster till loggfilen. Innehållet i loggfilen är användbart för att diagnostisera problem som användare kan ha när de kör UDI-guiden.
PropertyBag-komponent
Egenskapsuppsättningen är en container för minnesvariabler. Den är tillgänglig från sidan med Container()->Properties(). Minnesvariabler är användbara för att skicka tillfälliga data mellan olika sidor.
TSVariableBag- och TSRepository-komponenter
Med komponenten TSVariableBag kan du läsa och skriva aktivitetssekvensvariabler. Den behåller värdena i minnet tills användaren väljer Slutför (som standard). Du kan komma åt TSVariable-påsen via sidans TSVariables-metod (implementerad av wizardPageImpl-basklassen ). Dessa komponenter loggar alla läsningar och skrivningar av aktivitetssekvensvariabler.
WmiRepository-komponent
Den här komponenten tillhandahåller en fasad för att arbeta med WMI-frågor. Du kan anropa hjälpfunktionen CreateInstance med ID_WmiRepository för att hämta en instans av den här komponenten, som stöder gränssnittet IWmiRepository . Den här komponenten returnerar resultatposter via IWmiIterator-gränssnittet .
Hjälpklasser för guidesidor
Du kan skapa anpassade UDI-guidesidor med hjälpklasser som tillhandahålls med UDI SDK. Tabell 8 visar de hjälpklasser som du kan använda för att skapa anpassade guidesidor.
Tabell 8. Hjälpklasser
Hjälpklass | Beskrivning |
---|---|
ClassFactoryImpl-klass | Det här är en användbar basklass för att skapa en klassfabrik som du sedan kan registrera med fabriksregistret. |
Gränssnittsmallklass | Använd den här mallklassen när du vill skapa en komponent som implementerar mer än ett gränssnitt. |
Hjälpklass för sökväg | Den här klassen innehåller vanliga fil-/katalogåtgärder. |
Pekarmallklass | Den här klassen innehåller referensräkning för livslängdshantering i COM-komponenter. Det är viktigt att släppa gränssnitt när du är klar med dem. Den här mallklassen hanterar livslängden automatiskt. |
PUnknown-klass | Den här klassen är en smart pekare specifikt för gränssnittet IUnknown. Använd klassen Pekarmall för alla andra gränssnitt. |
Hjälpklass för StringUtil | Den här klassen innehåller hjälpmetoder som gör det enklare att arbeta med strängar. |
SubInterface-mallklass | Den här basklassen gör det enklare att implementera en komponent som stöder ett gränssnitt som självt ärver från ett annat gränssnitt. |
UnknownImpl-mallklass | Den här klassen hanterar det mesta av informationen om att skapa en COM-komponent. |
WizardComponent Template Class | Den här basklassen används för att skapa komponenter som behöver åtkomst till guidetjänsterna, till exempel skapande och loggning av komponenter. |
WizardPageImpl- mallklass | Den här basklassen ska användas som basklass för alla anpassade guidesidor |
ClassFactoryImpl-klass
Det här är en användbar basklass för att skapa en klassfabrik som du sedan kan registrera med fabriksregistret.
Följande är ett utdrag från filen LocationPage.h i exempelprojektet för att definiera klassen ClassFactoryImpl .
#pragma once
#include "ClassFactoryImpl.h"
class LocationPageFactory :public ClassFactoryImpl
{
protected:
IUnknown *CreateNewInstance();
};
Följande är ett utdrag från LocationPage.cpp-filen på exempelguidesidan som används för att definiera klassfabriken för sidan.
IUnknown *LocationPageFactory::CreateNewInstance()
{
return static_cast<IWizardPage *>(new LocationPage);
}
Gränssnittsmallklass
Använd den här mallklassen när du vill skapa en komponent som implementerar fler än ett gränssnitt, till exempel:
classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>
Den här koden skapar en basklasskedja som stöder både IFieldCalback och de gränssnitt som WizardPageImpl stöder (vilket råkar vara IWizardPage).
Hjälpklass för sökväg
Den här klassen innehåller vanliga fil-/katalogåtgärder:
static inline std::wstring GetModulePath(HINSTANCE hModule)
Den returnerar också den fullständiga sökvägen till .exe- eller .dll-filen med den instansreferens som du anger för den här metoden:
static inline std::wstring GetModuleFilename(HINSTANCE hModule)
Klassen returnerar den fullständiga sökvägen och filnamnet för .exe och .dll fil med instansreferensen som du anger för den här metoden:
static inline std::wstring GetDirectoryName(LPCWSTR fullName)
. . . eller bara sökvägen när filnamnet tas bort:
static inline std::wstring GetFileName(LPCWSTR fullName)
Med en sökväg med ett filnamn returnerar sökvägshjälpklassen endast filnamnet:
static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)
Slutligen returnerar klassen en ny sträng som är den kombinerade sökvägen och filnamnet (eller en annan sökväg).
Pekarmallklass
Den här klassen definieras i Pointer.h. Eftersom COM-komponenter använder referensräkning för livslängdshantering är det viktigt att du alltid släpper gränssnitt när du är klar med dem. Microsoft tillhandahåller en mallklass som hanterar livslängden automatiskt. Om du till exempel vill ha en smart pekare för ett XML-gränssnitt kan du skriva något som liknar detta:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Den första raden definierar den smarta pekaren. Den andra raden visar hur du hämtar en smart pekare via ett annat anrop. Operatorn& släpper alltid ett befintligt gränssnitt om det innehåller ett och returnerar adressen för den interna pekaren. När du har hämtat en pekare som denna anropar pekarinstansenRelease åt dig när variabeln hamnar utanför omfånget. Microsoft rekommenderar att du använder smarta pekare i stället för att anropa AddRef och Release manuellt.
Dessutom anropar klassen Pekare smart pekareQueryInterface för att hämta andra gränssnitt åt dig. När fabriksregistret till exempel skapar en ny instans av en komponent har det kod som liknar detta:
PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
pComp->SetContainer(m_pContainer);
Den första raden anropar QueryInterface i bakgrunden för att begära gränssnittet IWizardComponent . Den resulterande smarta pekaren är lika med nullptr om komponenten inte stöder det gränssnittet.
PUnknown-klass
Den här klassen är en smart pekare specifikt för gränssnittet IUnknown . Använd klassen Pekarmall för alla andra gränssnitt.
Hjälpklass för StringUtil
Den här klassen definieras i Utilities.h och innehåller hjälpmetoder som gör det enklare att arbeta med strängar:
static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)
Den här metoden jämför två strängar när skiftläge ignoreras (se tabell 9).
Tabell 9. Hjälpklass för StringUtil
Returnerar | Beskrivning |
---|---|
0 | Strängar matchar, ignorerar skiftläge |
<0 | Första < sekunden |
>0 | Första > sekunden |
Här är ett exempel:
static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)
Dessa metoder är lite som Microsoft .NET Format-metoderna i den meningen att parametrarna är i form av {0}. De utför dock ingen formatering av indata – bara ersättning:
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)
Det här är omslutningar runt StringCchPrintf som returnerar en wstring så att du inte behöver allokera minne för strängar eller buffertar själv.
SubInterface-mallklass
Den här basklassen gör det enklare att implementera en komponent som stöder ett gränssnitt som självt ärver från ett annat gränssnitt. ICheckBox-gränssnittet ärver till exempel från IControl. Så här används den här klassen för att definiera CheckBoxWrapper:
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
Basgränssnittet är den första parametern, medan det härledda gränssnittet är den andra parametern.
UnknownImpl-mallklass
Den här klassen definieras i UnknownImpl.h och hanterar det mesta av informationen om att skapa en COM-komponent. Här är ett exempel på hur du skulle använda den här basklassen:
classDirectory :public UnknownImpl<IDirectory>
Den här koden definierar en klass som stöder IDirectory-gränssnittet .
WizardComponent Template Class
Den här klassen definieras i IWizardComponent.h och är en användbar basklass för att skapa komponenter som behöver åtkomst till guidetjänsterna, till exempel skapande och loggning av komponenter.
Här är till exempel hur CopyFilesTask-komponenten definieras:
classCopyFilesTask :public WizardComponent<ITask>
{
...
Parametern för den här mallklassen är det "huvudgränssnitt" som du vill använda för din komponent, som när det gäller uppgifter är ITask. Att använda WizardComponent innebär att komponenten stöder både det gränssnitt som du anger (ITask i det här exemplet) och IWizardComponent.
När du använder klassfabriksregistret för att skapa en ny komponent anropar registret komponentens IWizardComponent-SetContainer-metod> för att ge komponenten åtkomst till guidetjänsterna.
WizardPageImpl- mallklass
Använd den här klassen som basklass för dina anpassade sidor, till exempel:
class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>
Parametern är resurs-ID:t för din dialogrutemall.
Sidgränssnitt för guide
UDI-guiden använder gränssnitt för att komma åt de olika kontrollerna på sidan. På sidan använder du funktionen GetControlWrapper för att hämta en kontrollomslutning. Här är ett exempel:
PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);
Här är PStaticText en smart pekare till gränssnittet IStaticText . Smarta pekare anropar automatiskt COM Release() -metoden när de hamnar utanför omfånget eller du skickar adressen för en variabel ( till exempel&pFormat) till en metod.
IADHelper-gränssnitt
__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)
Initiera den här komponenten och skicka den till loggaren så att den kan logga information.
HRESULTValidLogon(LPCTSTR userName, LPCTSTR-lösenord, LPCTSTR-domän)
Den här metoden verifierar om en uppsättning autentiseringsuppgifter är giltig, enligt tabell 10.
Tabell 10. HResultValidLogon
HResult | Beskrivning |
---|---|
S_OK | Autentiseringsuppgifterna är giltiga |
S_FALSE | Autentiseringsuppgifterna är ogiltiga |
E_FAIL | Det gick inte att hitta domänkontrollanten. kontrollera loggarna för mer information |
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain)
Den här metoden verifierar om en uppsättning autentiseringsuppgifter har läs-/skrivåtkomst till datorobjektet i AD DS, enligt tabell 11.
Tabell 11. HResult HasAccess
HRESULT | Beskrivning |
---|---|
S_OK | Användaren har åtkomst |
E_FAIL | Användaren har inte åtkomst. Mer information finns i loggfilen. |
IBackgroundTask-gränssnitt
__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);
};
Översikt
Sidan Förlopp använder den här klassen för att köra uppgifter på en separat tråd. Du kan också använda den här klassen när du vill utföra åtgärder på en separat tråd. Uppgifter är alla klasser som stöder ITask-gränssnittet .
Det här gränssnittet implementeras av komponenten ID_BackgroundTask ("Microsoft.Wizard.BackgroundTask") som definieras i gränssnittet IBackgroundTask.h.
HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)
Det här gränssnittet initierar komponenten enligt tabell 12.
Tabell 12. HRESULT Init
Parameter | Beskrivning |
---|---|
pTask | Pekare till klassen som innehåller den kod som du vill köra på en annan tråd |
Id | Ett nummer som du kan använda i återanropsmetoden Finished (Slutförd ) för att se vilken uppgift som har körts. användbart om du startar flera uppgifter med samma återanropsmetod |
pCallback | En klass som implementerar metoden Slutförd , som anropas när en aktivitet har slutförts. -anropet till metoden Finished (Slutförd ) finns i bakgrundstråden, inte i användargränssnittstråden |
void Start(void)
Den här metoden startar uppgiften på en bakgrundstråd och returnerar de element som visas i tabell 13.
Tabell 13. Returnera bakgrundstråd
Returnerar | Beskrivning |
---|---|
E_INVALIDARG | Aktiviteten körs redan, så du kan inte starta den just nu. |
E_FAIL | Det uppstod ett problem när tråden skulle startas. |
S_OK | Tråden startades. |
BOOL Running()
Den här metoden returnerar TRUE om bakgrundsaktiviteten körs och FALSE om den inte körs.
HRESULT Wait(DWORD waitMilliseconds)
Den här metoden väntar tills tråden slutar köras eller antalet millisekunder har förflutit.
HRESULT Terminate (DWORD exitCode)
Den här metoden stoppar tråden som körs (se Tabell 14 och Tabell 15). Den här processen kan ta en kort stund att slutföra efter att den här metoden har returnerats.
Tabell 14. HRESULT Avsluta slutkod
Parameter | Beskrivning |
---|---|
exitCode | Slutkoden som skickas till metoden Finished callback (Slutfört återanrop), som också är tillgänglig från metoden GetExitCode . |
Tabell 15. Avslutningskoder
Returnerar | Beskrivning |
---|---|
E_FAIL | Anropet att avsluta misslyckades. |
S_OK | Begäran om att avsluta tråden lyckades. |
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)
Använd den här metoden för att hämta resultatet av att köra aktiviteten i bakgrundstråden (se Tabell 16).
Tabell 16. Resultatkoder
Parameter | Beskrivning |
---|---|
pCode | Pekare till ett DWORD som anges vid retur eller nullptr om du inte behöver returvärdet. Vid avslut är den här parametern inställd på STILL_ACTIVE om tråden körs, koden som returneras av aktivitetens Execute-metod eller värdet som skickas till metoden Terminate om du anropade den metoden. |
pHresult | Pekare till en HRESULT som anges vid retur eller nullptr om du inte behöver HRESULT-värdet . |
HRESULT Close(void)
Den här metoden släpper bakgrundstråden. Den returnerar E_INVALIDARG om tråden körs och S_OK annars.
ICheckBox-gränssnitt
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void Check (BOOL-kontroll)
Ange kryssrutans markerade tillstånd. När metoden är TRUE markeras kryssrutan. när metoden är FALSE avmarkeras kryssrutan.
BOOL IsButtonChecked()
Den här metoden rapporterar aktuellt bocktillstånd för en kryssruta.
IComboBox-gränssnitt
__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();
};
Översikt
Det här gränssnittet implementeras av komponenten CheckBoxWrapper . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_COMBO_BOX.
HRESULT Bind([in] IBindableList *pList)
Använd den här metoden när du har en datakälla som implementerar gränssnittet IBindableList . Listrutan initierar innehållet med bildtexterna från den här listan.
HRESULT Select(int index)
Välj objektet i kombinationsrutan i indexet.
int Selected(void)
Den här metoden returnerar indexet för det markerade objektet eller -1 om inget har valts.
void Add([in] LPCTSTR bildtext)
Lägg till ett objekt i kombinationsrutan manuellt.
HRESULT GetText([out, retval] LPBSTR pText)
Hämta strängen för det markerade objektet i kombinationsrutan.
void Clear()
Ta bort alla objekt från kombinationsrutan.
IControl-gränssnitt
__interface IControl : IUnknown
{
HRESULT SetEnable(BOOL enable);
BOOL IsEnabled(void);
HRESULT SetVisible(BOOL visible);
};
Översikt
Det här gränssnittet implementeras av ControlWrapper-komponenten . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_GENERIC.
HRESULT SetEnable(BOOL-aktiverad)
Aktivera eller inaktivera kontrollen.
BOOL IsEnabled(void)
Returnerar TRUE om kontrollen är aktiverad, FALSE om den inte är det.
HRESULT SetVisible(BOOL synlig)
Visa eller dölj kontrollen.
ICpuInfo-gränssnitt
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
Översikt
Du får det här gränssnittet genom att skapa en ny ID_CpuInfo komponent. Den enskilda metoden rapporterar om processorn är 32 eller 64 bitar. Observera att om du har ett 32-bitars operativsystem på en 64-bitarsdator returnerar den här metoden TRUE, eftersom den bara rapporterar bredden på processorn (inte operativsystemet).
IDirectory-gränssnitt
__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);
};
Översikt
Katalogkomponenten, som du skapar med hjälp av ID_Directory, tillhandahåller en fasad för att arbeta med kataloger i filsystemet.
BOOL FileExists(LPCWSTR-namn)
Den här metoden returnerar TRUE om det finns en fil med det namn som du anger.
BOOL FindFirst([in] LPCWSTR name)
Den här metoden hittar en första matchning för det namn som du anger. Den stöder jokertecken och returnerar både fil- och katalognamn. Metoden returnerar TRUE om en matchning hittades, ANNARS FALSKT.
HRESULT FoundName([out, retval] LPBSTR name)
Den här metoden hämtar namnet på filen som hittades med ett anrop till FindFirst eller FindNext.
DWORD FoundAttributes(void)
Den här metoden returnerar attributet för den senaste hittade filen eller katalogen. Du kan använda följande kod för att testa om det är en katalog:
pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext(void)
Hitta nästa. Den här metoden returnerar TRUE om en annan matchning hittades, ANNARS FALSE.
void FinishFind(void)
Den här metoden släpper resurser som används för sökåtgärden.
IDomainJoinValidator-gränssnitt
__interface IDomainJoinValidator : IUnknown
{
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);
HRESULT IsUsernameValid(LPCWSTR domainName);
BOOL CanModifyComputerAdEntry(LPCWSTR domainName);
};
Översikt
Du hämtar en instans av det här gränssnittet med hjälp av värdet ID_DomainJoinValidator till mallfunktionen CreateInstance .
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)
Initiera instansen enligt tabell 17.
Tabell 17. HRESULT Init – Instansinitiering
Parameter | Beskrivning |
---|---|
pLogger | Loggningsinstansen, som är tillgänglig för din sida via sidans Logger-metod |
pContainer | Skickar resultatet från sidans containermetod |
pUsername | Textrutan som innehåller användarnamnet som ska verifieras |
pPassword | Textrutan som innehåller lösenordet som ska verifieras |
PComputerName | Textrutan som innehåller namnet på den dator som så småningom ska anslutas till domänen |
HRESULT IsUsernameValid(LPCWSTR domainName)
Den här metoden använder metoden IADHelper-ValidLogon> för att utföra arbetet. Mer information finns i metoden.
BOOL CanModifyComputerAdEntry(LPCWSTR domainName)
Kontrollera om användaren har behörighet att ändra datorposten. Det mesta av arbetet utförs av IADHelper-HasAccess>. Om den här metoden returnerar FALSE kontrollerar du loggfilen för mer information.
IDriveList-gränssnitt
__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)
Anropa den här metoden innan du anropar andra komponenter. Du måste skapa en ny WmiRepository innan du anropar den här metoden.
HRESULT-uppsättningWhereClause(LPCTSTR därClause)
Med den här metoden kan du lägga till text som visas som en "where"-sats i frågan. Följande rad returnerar till exempel endast USB-enheter:
pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(__int64 storlek)
Ange den minimerade enhetsstorleken i byte för enheter som ska returneras från frågan.
HRESULT-uppdatering(void)
Kör frågan. Enhetslistan som är tillgänglig när du har anropat den här metoden sorteras efter enhetsbeteckning.
HRESULT AddProperty(ENUM_DISK_QUERY_SECTION avsnitt, LPCTSTR propName, LPCTSTR propNameReturned)
Den här metoden lägger till namnen på ytterligare egenskaper som du vill göra tillgängliga i frågeresultatet. Anropa den här metoden innan du anropar Uppdatera. Tabell 18 visar tre av de användbara egenskaperna.
Tabell 18. HRESULT AddProperty: Användbara egenskaper
Sektion | Egenskap | Beskrivning |
---|---|---|
DISKQUERY_LOGICALDISK | Storlek | Storleken, i byte, som representeras som en sträng |
DISKQUERY_DISKPARTITION | DiskIndex | Disknumret som ett heltal som börjar med 0 |
DISKQUERY_LOGICALDISK | VolumeName | Volymetiketten |
size_t Count(void)
Antalet poster som frågan returnerar. Anropa Uppdatera innan du anropar den här metoden.
HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT-värde)
Den här metoden hämtar värdet för en egenskap från frågeresultatet, enligt tabell 19.
Tabell 19. HRESULT GetProperty
Parameter | Beskrivning |
---|---|
Index | Nollbaserat index till resultatposten |
propName | Namnet på egenskapen, till exempel "Storlek" |
Värde | Vid retur innehåller den här parametern ett variantvärde för egenskapen |
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Den här metoden hämtar bildtext för en post som är samma som egenskapen Bildtext.
IImageList-gränssnitt
__interface IImageList
{
HRESULT CreateImageList(int width, int height, UINT flags);
HImageList GetImageList(void);
int AddImage(HInstance hInstance, int resourceId);
};
Översikt
Det här gränssnittet implementeras av imagelist-komponenten . Du hämtar en instans av den här komponenten från IListView-gränssnittet .
HRESULT CreateImageList(int width, int height, UINT flags)
Skapa en ny avbildningslista som den här komponenten hanterar. Anropa bara den här metoden en gång.
HImageList GetImageList(void)
Den här metoden returnerar referensen för avbildningslistan om du behöver utföra andra åtgärder i avbildningslistan.
int AddImage(HInstance hInstance, int resourceId)
Lägg till en ny bild i bildlistan från en resurs, enligt tabell 20.
Tabell 20. HRESULT IImageList-gränssnitt
Parameter | Beskrivning |
---|---|
hInstance | Instanshandtag för modulen som innehåller bitmappsresursen |
resourceId | ID för resursen som ska läsas in i avbildningslistan |
IListView-gränssnitt
__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);
};
Översikt
Det här gränssnittet implementeras av ControlWrapper-komponenten . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_LIST_VIEW.
int AddItem([in] LPCTSTR-text)
Lägg till en ny rad i listrutan. Metoden returnerar indexet för objektet som just lagts till.
int AddColumn(int width, [in] LPCTSTR text)
Lägg till en ny kolumn i listvyn.
HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)
Ange texten i en annan kolumn än den första kolumnen i listrutan, som du ser i tabell 21.
Tabell 21. HRESULT SetSubItem
Parameter | Beskrivning |
---|---|
index | Indexet för listobjektet som du vill ändra |
spalt | Indexet för den kolumn som du vill uppdatera. den första kolumnen anges med AddItem, kolumner två och följande anges med den här metoden |
SMS | Strängen som ska visas i kolumnen |
int GetWidth(void)
Den här metoden returnerar bredden på hela textrutan.
void SetExtendedStyle(DWORD-format)
Med den här metoden kan du ange utökade formatmallar i listrutan, till exempel:
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
Den här metoden returnerar indexet för listvyobjektet som för närvarande är markerat.
HRESULT SelectItem(int index)
Ange det markerade objektet i listan till det här indexet.
BOOL IsItemChecked(int index)
Den här metoden returnerar TRUE om ett objekt i listan är markerat. Den här metoden kräver att du anropar SetExtendedStyle för att ange kryssrutans formatmall.
int GetItemCount(void)
Den här metoden returnerar antalet objekt i listvyn.
HRESULT CreateImageList(int width, int height, UINT flags)
Skapa en ny avbildningslista och bifoga den i listvyn.
int AddImage(HINSTANCE hInstance, int resourceId)
Lägg till en bild i listvyns bildlista. Du måste anropa CreateImageList först.
HRESULT SetImage(int index, int imageIndex)
Ange den bild som ska visas till vänster för ett specifikt listvyobjekt.
HRESULT Clear(void)
Ta bort alla objekt från listvyn.
Gränssnitt för IProgressBar
__interface IProgressBar : IControl
{
HRESULT SetPercentage(int position);
int GetPercentage(void);
};
Översikt
Det här gränssnittet implementeras av ProgressBarWrapper-komponenten . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_PROGRESS_BAR.
HRESULT SetPercentage(int position)
Ange förloppsindikatorns position med ett tal mellan 0 och 100. Som standard har nya Win32-förloppsfält® ett maximalt intervall på 100.
int GetPercentage(void)
Den här metoden returnerar förloppsindikatorns aktuella position.
IRadioButton-gränssnitt
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
Översikt
Det här gränssnittet implementeras av Komponenten RadioButtonWrapper . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_RADIO_BUTTON.
void SetGroup(int firstId, int lastId)
Ge omslutningen ett intervall med alternativknappar som ska behandlas som en grupp. Anropa den här metoden innan du anropar CheckRadio.
void CheckRadio(int id)
Ange att den specifika alternativknappen ska vara den enda knappen i gruppen med alternativknappar som valts. Anropa SetGroup innan du anropar den här metoden.
BOOL IsButtonChecked(int id)
Den här metoden returnerar TRUE om alternativknappen är markerad, annars FALSE.
void EnableRadio(int id, BOOL enable)
Den här metoden aktiverar eller inaktiverar en alternativknapp.
IStaticText-gränssnitt
__interface IStaticText : IControl
{
HRESULT SetText([in] LPCTSTR pText);
HRESULT GetText([out, retval] LPBSTR pText);
};
Översikt
Det här gränssnittet implementeras av StaticTextWrapper-komponenten . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_STATIC_TEXT.
HRESULT SetText([in] LPCTSTR pText)
Ange texten för kontrollen.
HRESULT GetText([out, retval] LPBSTR pText)
Den här metoden returnerar det aktuella värdet för texten för kontrollen.
ITask-gränssnitt
__interface IControl : IUnknown
{
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
HRESULT Execute(LPDWORD pReturnCode);
};
Implementera det här gränssnittet om du vill att komponenten ska vara tillgänglig som en uppgift på förljussidan eller om du vill använda BackgroundTask-komponenten för att utföra arbete på en bakgrundstråd.
Här är komponenter som implementerar ITask-gränssnittet :
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)
Om du skriver en uppgift för sidan före start anropar du den här metoden för att initiera uppgiften. Den .config filen innehåller XML som kan se ut ungefär så här:
<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>
Parametern pProperties ger åtkomst till de tre setter-värdena, medan parametern pTaskSettings ger åtkomst till aktivitetselementet och underordnade objekt. De flesta uppgifter behöver bara läsa data från parametern pProperties .
Verkställ
HRESULT Execute(LPDWORD pReturnCode)
Här skriver du koden som utför uppgiften. Den här metoden bör returnera S_OK om det inte finns några fel, och den kan returnera en annan HRESULT om ett fel uppstod när aktiviteten kördes. Andra värden än S_OK som den här metoden returnerar matchas upp till <Felelement> i <avsnittet ExitCodes> om du använder sidan preflight.
Parametern pReturnCode måste uppdateras med ett tal som rapporterar status för aktiviteten. Dessa värden matchas av sidan preflights till <ExitCode-element> .
ITreeView-gränssnitt
__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);
};
Översikt
Det här gränssnittet implementeras av TreeViewWrapper-komponenten . Du hämtar en instans av den här komponenten med hjälpfunktionen GetControlWrapper med typen CONTROL_TREE_VIEW.
void EnableCheckboxes(void)
Den här metoden aktiverar kryssrutor i trädvisningskontrollen genom att ange TVS_CHECKBOXES formatmall.
HRESULT CreateImageList(int width, int height, UINT flags)
Lägg till en ny bildlista i trädvisningskontrollen. Parametern flags skickas i anropet till funktionen ImageList_Create Win32.
int AddImage(HINSTANCE hInstance, int resourceId)
Lägg till en bild i avbildningslistan från en resurs (resourceId) i modulen med instanshandtaget hInstance.
HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)
Lägg till en nod i trädvyn. Den nya noden läggs till på den översta nivån om hParent är NULL. Annars anger du referensen till det överordnade objektet där du vill att det nya objektet ska läggas till. Den här metoden returnerar referensen till det nya objektet.
void SetImage(HTREEITEM item, int image, int expandImage)
Ange vilken avbildning som ska användas för ett trädvyobjekt. Du kan ange både den normala och den expanderade avbildningen.
void Clear(void)
Ta bort alla objekt från trädvyn.
BOOL SetFirstVisible(HTREEITEM-objekt)
Kontrollera att trädvyobjektet är synligt. Trädvyn rullas om det behövs för att göra det här objektet synligt.
BOOL SelectItem(HTREEITEM-objekt)
Ange det markerade objektet till det objekt som du anger. Du kan anropa SetFirstVisible efter detta för att se till att det nyligen markerade objektet visas.
void CheckItem(HTREEITEM-objekt, UINT checkState)
Metoden anger i princip den bild som ska visas för kryssrutan i trädvyn. Dessa bilder finns i en separat ImageList-kontroll som trädvyn hanterar. Som standard innehåller den här bildlistan tre bilder, som visas i tabell 22.
Standardinställning för tabell 22.void CheckItem-avbildningslista
checkState | Beskrivning |
---|---|
0 | Blank |
1 | Avmarkerad |
2 | Vald |
HTREEITEM SelectedItem(void)
Den här metoden returnerar handtaget för det trädvyobjekt som för närvarande är markerat.
int SetItemHeight(KORT höjd)
Den här metoden anger höjden på alla objekt i trädvisningskontrollen i bildpunkter. Den returnerar den tidigare höjden i bildpunkter.
HRESULT EnableItem(HTREEITEM-objekt, BOOL-aktivera)
Den här metoden aktiverar eller inaktiverar ett enskilt objekt i trädet. Om du inaktiverar ett objekt med underordnade objekt inaktiveras inte underordnade objekt.
void Expand(HTREEITEM hItem, BOOL expand)
Den här metoden expanderar eller döljer en nod i trädet.
HTREEITEM GetChild(HTREEITEM hParent)
Den här metoden returnerar det första underordnade objektet i ett trädvyobjekt eller NULL om det inte finns några underordnade objekt.
HTREEITEM GetParent(HTREEITEM hNode)
Den här metoden returnerar referensen för den överordnade för en nod i trädvyn eller NULL om noden är på den översta nivån.
HTREEITEM GetNextItem(HTREEITEM hPrevious)
Du kan anropa den här metoden med ett handtag som GetChild returnerar för att iterera genom alla underordnade noder. Den här metoden returnerar nästa syskon i trädet som delar samma överordnade.
UINT IsChecked(HTREEITEM-objekt)
Den här metoden returnerar 0 om trädvynoden inte är markerad och 1 om den är det.
BOOL IsEnabled(HTREEITEM-objekt)
Den här metoden returnerar TRUE om trädvynoden är aktiverad, annars FALSE.
INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)
Den här metoden är endast avsedd för internt bruk.
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)
Anropa den här metoden om du vill få ett meddelande när det markerade objektet ändras eller om användaren ändrar kontrolltillståndet för ett trädvisningsobjekt. Du måste implementera ITreeViewEvent i komponenten för att få dessa återanrop.
void SetSelectedBackColor(COLORREF-färg)
Ange bakgrundsfärgen som används för det markerade objektet.
IWmiIteration-gränssnitt
__interface IWmiIterator : IUnknown
{
HRESULT Next(void);
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Översikt
Du använder vanligtvis det här gränssnittet, tillsammans med IWmiRepository, när du arbetar med WMI-anrop. Med IWmiIteration-gränssnittet kan du iterera genom de värden som en fråga returnerar.
HRESULT Next(void)
Flytta till nästa objekt i frågeresultatet, enligt tabell 23.
Tabell 23. HRESULT Next(void) Frågan returnerar
HRRESULT | Beskrivning |
---|---|
S_OK | Flyttade till nästa resultat; du kan använda GetProperty för att hämta egenskaperna för det resultatet. |
S_FALSE | Det finns inga fler objekt i listan. |
E_NOT_SET | Det finns inga frågeresultat |
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)
Den här metoden hämtar värdet för en egenskap från den aktuella resultatposten, enligt tabell 24 och tabell 25.
Tabell 24. HRESULT GetProperty
Parameter | Beskrivning |
---|---|
PropertyName | Namnet på den egenskap som du vill hämta |
pValue | Pekar på en VARIANT-struktur som vid retur innehåller egenskapsvärdet |
Tabell 25. HRESULT GetProperty-resultat
HRESULT | Beskrivning |
---|---|
S_OK | Egenskapsvärdet hämtades. |
WBEM_E_NOT_FOUND | Det finns ingen egenskap med namnet. |
E_NOT_VALID_STATE | Det finns ingen aktuell post. |
Obs!
Metoden GetProperty kan returnera andra WMI-felkoder än de som anges i tabell 25. Värdena i listan är de vanliga resultat som returneras.
IWmiRepository-gränssnitt
__interface IWmiRepository : IUnknown
{
HRESULT SetNamespace(LPCWSTR namespaceName);
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Översikt
Det här gränssnittet implementeras av WmiRepository-komponenten (ID_WmiRepository).
HRESULT SetNamespace(LPCWSTR namespaceName)
Den här metoden anger det WMI-namnområde som ska användas för frågan. Anropa den här metoden innan du anropar ExecQuery. Om du inte anropar den här metoden blir namnområdet root\cimv2. Den här metoden returnerar alltid S_OK.
HRESULT ExecQuery(LPCWSTR-fråga, [out] IWmiIterator **ppIterator)
Kör en fråga mot WMI-namnrymdsuppsättningen med ett anrop till SetNamespace, enligt tabell 26 och tabell 27.
Tabell 26. HRESULT ExecQuery
Parameter | Beskrivning |
---|---|
Fråga | Strängen för den WMI-fråga som du vill köra |
ppIterator | Skicka en pekare till en gränssnittspekare som vid retur fylls i med ett gränssnitt, vilket ger dig åtkomst till frågeresultatet |
Tabell 27. HRESULT-frågeresultat
HRESULT | Beskrivning |
---|---|
S_OK | Frågan har slutförts |
Övrigt | Om frågan inte lyckades returnerar en WMI HRESULT |
IFormController-gränssnitt
__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);
};
Översikt
Varje sida i UDI-guiden har en egen formulärkontrollant som implementerar det här gränssnittet. Du använder den här kontrollanten för att ansluta fältdata i den .config XML-filen till kontrollerna på sidan. Formulärkontrollanten hanterar sedan många av uppgifterna åt dig.
Konfigurera formuläret
Konfigurera vanligtvis formulärkontrollanten i sidans OnWindowCreated-metod . Det innebär vanligtvis att anropa metoderna som visas i tabell 28.
Tabell 28. OnWindowCreated-metod
Metod | Beskrivning |
---|---|
Init | Initierar formulärkontrollanten |
AddField | Tillhandahåller en anslutning mellan ett fält i den .config XML-filen som är ett strängnamn och en kontroll i sidans dialogruta som är ett ID |
AddRadioGroup | Används för att ansluta en alternativknapp till både en grupp och en kontroll i dialogrutan |
AddToGroup | Gör att du kan använda underordnade kontroller som är aktiverade eller inaktiverade tillsammans med deras överordnade eller baserat på vilken alternativknapp som väljs |
InitFields | Anropa när du har anropat alla Lägg till metoder för att konfigurera formuläret |
Validera | Utför den första valideringen |
Bearbeta formulärhändelser
Lägg till följande anrop till din OnControlEvent-metod :
Form()->ControlEvent(eventId, controlId);
Det här anropet skickar händelser till formulärkontrollanten så att det kan bearbeta formulärrelaterade händelser.
Spara formulärdata
I metoden OnNextSelected anropar du formulärmetoderna som visas i tabell 29.
Tabell 29. OnNextSelected-metod
Metod | Beskrivning |
---|---|
InitSection | Anger namnet på avsnittet som ska visas på sidan Sammanfattning för den här sidan |
SaveFields | Spara fältvärden i aktivitetssekvensvariabler och på sidan Sammanfattning |
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)
Du anropar vanligtvis den här metoden i början av sidans OnWindowCreated-metod . Kommandot bör se ut ungefär så här:
Form()->Init(View(), Container());
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)
Den här metoden anropas internt och du bör inte kalla den själv. Den tillhandahåller sidans XML till formulärkontrollanten.
Validera
HRESULT Validate(void)
Den här metoden kör alla validatorer som är kopplade till kontroller. Om en validerare inte godkänns visar formulärkontrollanten ett varningsmeddelande och inaktiverar knappen Nästa och slutar sedan bearbeta validerare. Vanligtvis behöver du bara anropa den här metoden i slutet av din OnWindowCreated-metod . den returnerar alltid S_OK.
AddToGroup
AddToGroup(int groupControlId, int controlId)
Den här metoden lägger till en kontroll som "underordnad" av en kryssruta eller alternativknapp, som visas i tabell 30. Alla sådana underordnade kontroller inaktiveras när den överordnade kontrollen inte är markerad. Metoden returnerar alltid S_OK.
Tabell 30. AddToGroup
Parameter | Beskrivning |
---|---|
groupControlId | ID för kryssrutan eller alternativknappen som styr aktiveringstillståndet för den underordnade kontrollen |
Controlld | ID för den kontroll som du vill lägga till som underordnad |
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)
Den här metoden uppdaterar statusen aktivera eller inaktivera för en grupps underordnade kontroller baserat på status för den överordnade kontrollen. I allmänhet behöver du inte anropa den här metoden själv, eftersom formulärkontrollanten anropar den åt dig.
AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)
Anropa bara den här metoden om du har en validerare som du vill skapa i kod i stället för med XML. Den här metoden returnerar alltid S_OK.
AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)
Anropa bara den här metoden om du har en validerare som du vill skapa i kod i stället för med XML.
DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)
Anropa den här metoden för att antingen uttryckligen inaktivera valideraren för en kontroll eller återställa normal validering, enligt tabell 31. Den här metoden är användbar, till exempel när du har regler för att aktivera/inaktivera kontroller som inte omfattas av formulärverifiering och du måste inaktivera verifiering för en kontroll. Med andra ord skulle du normalt inte anropa den här metoden. Den här metoden returnerar alltid S_OK.
Tabell 31. HRESULT DisableValidation
Parameter | Beskrivning |
---|---|
controlId | Kontrollen som du vill aktivera eller inaktivera validering för |
Inaktivera | Ställ in på TRUE för att inaktivera validering och false för att återställa normal validering |
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)
Lägg till en kontrollmappning mellan namnet i ett fältelement i .config XML-fil och kontroll-ID:t i sidans dialogruta, enligt tabell 32. Du måste anropa den här metoden före anropet till InitFields, eftersom InitFields använder den här informationen. Den här metoden returnerar alltid S_OK.
Tabell 32. HRESULT AddField
Parameter | Beskrivning |
---|---|
Fältnamn | Namnet på fältet som det visas i sidans XML |
controlId | ID för kontrollen i sidans dialogrutemall |
suppressLog | Ställ in på TRUE om du inte vill att värdena från det här fältet ska skrivas till loggfilen. ställ alltid in den här parametern på TRUE för lösenords- eller PIN-fält |
Typ | Typ av kontroll, vilket är något av följande: - 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)
Den här metoden lägger till en kontroll i en namngiven alternativknappsgrupp, enligt tabell 33. Du måste anropa detta före metoden InitFields , eftersom den metoden använder attribut i RadioGroup-elementet för att styra inställningarna för alla alternativknappskontroller i gruppen. Radiogrupper kan till exempel låsas så att alla alternativknappar inaktiveras, men underordnade kontroller aktiveras eller inaktiveras endast baserat på vilken alternativknapp som väljs. Den här metoden returnerar alltid S_OK.
Tabell 33. HRESULT AddRadioGroup
Parameter | Beskrivning |
---|---|
groupName | En sträng som definierar en grupp med alternativknappar på den här sidan |
radioControlId | ID:t för en enda alternativknapp som ska läggas till i den här gruppen |
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)
Med den här metoden kan du aktivera eller inaktivera en hel alternativknappsgrupp. Om du inaktiverar en radiogrupp inaktiveras alla alternativknappskontroller i gruppen samt eventuella underordnade alternativknappar som har lagts till med AddToGroup. Se Tabell 34 och Tabell 35.
Tabell 34. EnableRadioGroup
Parameter | Beskrivning |
---|---|
groupName | Namn på en alternativknappsgrupp som du redan har definierat med ett anrop till AddRadioGroup |
Möjliggöra | Ställ in på TRUE för att aktivera alternativknappsgruppen och FALSE för att inaktivera gruppen |
Tabell 35. HRESULT EnableRadioGroup
HRESULT | Beskrivning |
---|---|
S_OK | Grupp aktiverad eller inaktiverad |
E_INVALIDARG | Det finns ingen alternativknappsgrupp med det namn som du angav |
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)
Innan du anropar den här metoden anropar du AddField för varje fält som XML kan styra. Den här metoden returnerar alltid S_OK.
Parametern pFieldCallback är valfri. Om du anger det anropar formulärstyrenheten SetFieldDefault för kontroller som inte är CONTROL_STATIC_TEXT eller CONTROL_CHECK_BOX. Med det här beteendet kan du hämta ett standardvärde från XML och ange det i kontrollen själv.
SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)
Den här metoden sparar fältvärden i aktivitetssekvensvariabler och till sammanfattningsdata som visas på sidan Sammanfattning . Genom att ange en pekare i pFieldCallback kan du hantera sparande värden för kontroller som inte stöder CONTROL_STATIC_TEXT.
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
Med den här metoden kan du avgöra om ett fält har inaktiverats i XML-koden.
InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)
Den här metoden initierar de sammanfattningsdata som visas på sidan Sammanfattning , enligt tabell 36. Anropa den här metoden i metoden OnNextSelected innan du anropar SaveFields. Den här metoden returnerar alltid S_OK.
Tabell 36. HRESULT-initSection
Parameter | Beskrivning |
---|---|
Nyckel | Den här parametern ska vara unik för din sida. Den används för att säkerställa att varje sida har sin egen sammanfattningsinformation. |
sectionCaption | Rubriken som visas på sidan Sammanfattning för den här sidans sammanfattningsinformation. Vanligtvis använder du DisplayName() som värde för den här parametern. |
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)
Med den här metoden kan du lägga till sammanfattningsobjekt på sidan Sammanfattning utöver de objekt som angetts med XML. Se Tabell 37.
Tabell 37. HRESULT AddSummaryItem
Parameter | Beskrivning |
---|---|
Första | Bildtext för sammanfattningsobjektet, som visas på vänster sida |
Andra | Det värde som visas på höger sida |
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)
Anropa den här metoden för aktivitetssekvensvariabler som du inte vill att värdena ska skrivas till loggfilen för. Anropa den här metoden för aktivitetssekvensvariabler som lagrar lösenord, PIN-koder eller andra känsliga värden som en användare kan ange.
Sparatext
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)
Den här metoden sparar värdet för en textkontroll till både en aktivitetssekvensvariabel och sammanfattningsavsnittet. Normalt behöver du inte anropa den här metoden själv, eftersom formulärkontrollanten gör detta för alla fält. Se Tabell 38.
Tabell 38. HRESULT SaveText
Parameter | Beskrivning |
---|---|
controlId | ID:t för textrutan som innehåller det värde som du vill spara (eller någon annan kontroll som kan returnera text) |
tsVariableName | Namnet på aktivitetssekvensvariabeln som du vill ändra |
summaryCaption | Bildtext på sidan Sammanfattning för det här värdet |
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)
Den här metoden läser värdet för en aktivitetssekvensvariabel och anger textrutan till det här värdet.
ControlEvent
void ControlEvent(WORD eventId, WORD controlId)
Anropa den här metoden på OnControlEvent-metoden för att säkerställa att formulärkontrollanten kan bearbeta kontrollhändelser, vilket den behöver göra för att fungera korrekt. De värden som du skickar till den här metoden är samma värden som skickas till metoden OnControlEvent .
IsValid
BOOL IsValid(void)
Den här metoden returnerar status för den senaste verifieringen av formuläret. Om någon av kontrollverifierarna rapporterade ett fel returnerar den här metoden FALSE. Med andra ord returnerar den bara TRUE om alla kontroller på sidan är giltiga.
IValidator-gränssnitt
__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);
};
Översikt
Validatorer är komponenter som kan verifiera en enda kontroll på sidan. Det enklaste sättet att implementera en validerare är att göra den till en underklass till klassen BaseValidator , som definieras i basevalidator.h-huvudfilen.
HRESULT Init(IControl *pControl, LPCTSTR-meddelande)
Om du skapar en validerare i kod kan du anropa den här metoden för att initiera valideraren. Se Tabell 39.
Tabell 39. HRESULT Init
Parameter | Beskrivning |
---|---|
pControl | Kontrollen som validatorn måste verifiera |
Meddelande | Meddelandet som ska visas på sidan om kontrollen inte är giltig |
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)
Formulärkontrollanten anropar den här metoden för att initiera validatorer som skapas baserat på sidans XML. Se Tabell 40.
Tabell 40. HRESULT Init-metod
Parameter | Beskrivning |
---|---|
pControl | Kontrollen som validatorn måste verifiera |
pContainer | Om validatorn behöver åtkomst till loggaren eller behöver skapa andra komponenter |
pEgenskaper | Ger åtkomst till egenskaperna (set-element) för validatorn |
BOOL, IsValid(LPBSTR pMessage)
Den här metoden returnerar TRUE om kontrollen är giltig eller FALSE om kontrollen är ogiltig. Vid retur ska pMessage fyllas i med en ny BSTR som innehåller meddelandet som ska visas när kontrollen inte är giltig.
HRESULT SetProperty(int propertyId, LPVARIANT pValue)
Du kan implementera den här metoden om du behöver extra värden som inte anges i XML-koden.
HRESULT SetProperty(int propertyId, IUnknown *pUnknown)
Du kan implementera den här metoden om du behöver extra värden som inte anges i XML-koden.
HRESULT SetProperty)(int propertyId, LPCTSTR pValue)
Du kan implementera den här metoden om du behöver extra värden som inte anges i XML-koden.
IRegEx-gränssnitt
__interface IRegEx : IUnknown
{
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);
HRESULT GetMatch(size_t index, LPBSTR pValue);
};
Den här metoden implementeras av komponenten ID_Regex (IRegex.h) och ger stöd för bearbetning av reguljära uttryck.
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)
Den här metoden kör det reguljära uttrycket mot indatatexten. Den använder C++-standardbibliotekets regex_match-funktion för att utföra det faktiska arbetet. Metoden returnerar TRUE om det fanns matchningar, ANNARS FALSKT.
HRESULT GetMatch(size_t index, LPBSTR pValue)
Med den här metoden kan du hämta matchningarna från det senaste MatchesRegex-anropet . Observera att det inte finns något fel vid bearbetning i den här metoden och antingen returnerar den S_OK eller utlöser ett undantag.
Gränssnitt för ISummaryInfo
__interface ISummaryInfo : IUnknown
{
size_t Count(void);
HRESULT Clear(void);
HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);
HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);
HRESULT GetCaption(LPBSTR pCaption);
HRESULT SetCaption(LPCTSTR caption);
};
Du bör inte behöva använda det här gränssnittet direkt. Använd i stället IFormController.
ISummaryBag
__interface ISummaryBag : IUnknown
{
size_t Count(void);
HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);
HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);
};
Du bör inte behöva använda det här gränssnittet direkt. Använd i stället IFormController.
ITSVariableBag-gränssnitt
__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);
};
Det här gränssnittet ger åtkomst till aktivitetssekvensvariabler. Du kan komma åt det här gränssnittet med hjälp av sidans TSVariables() -metod.
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)
Den här metoden läser värdet för en aktivitetssekvensvariabel.
Obs!
Värden cachelagras efter den första läsningen.
void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)
Den här metoden anger värdet för en aktivitetssekvensvariabel. Det här värdet sparas i minnet. Aktivitetssekvensvärden skrivs när du väljer Slutför i UDI-guiden.
void Clear(void)
Den här metoden tar bort alla aktivitetssekvensvärden som har sparats i minnet.
HRESULT Remove([in] LPCTSTR variableName)
Den här metoden tar bort ett specifikt aktivitetssekvensvärde från minnet. Nästa gång du anropar GetValue med samma aktivitetssekvensnamn försöker metoden hämta den från aktivitetssekvensen.
HRESULT SuppressLogValue([in] LPCTSTR variableName)
När aktivitetssekvensvariabler skrivs, till exempel när du väljer Slutför i UDI-guiden, skrivs namn och värden till loggfilen. Anropa den här metoden för att förhindra loggning av känsliga värden, till exempel lösenord eller PIN-koder, för en specifik aktivitetssekvensvariabel.
void Save(void)
Den här metoden sparar alla aktivitetssekvensvärden som har angetts med anrop till SetValue.
ITSVariableRepository-gränssnitt
__interface ITSVariableRepository : IUnknown
{
void GetValue([in] LPCTSTR variableName, BOOL logValue, [out] LPBSTR pValue);
void SetValue([in] LPCTSTR variableName, BOOL logValue, [in] LPCTSTR value);
};
Det här gränssnittet används internt av TSVariableBag för läsning och skrivning av aktivitetssekvensvariabler.
IWizardFinish-gränssnitt
__interface IWizardFinish : IUnknown
{
HRESULT Canceled(void);
HRESULT Finished(void);
};
Det här gränssnittet är användbart i avancerade scenarier där du vill utföra ytterligare bearbetning när du väljer Slutför eller Avbryt i UDI-guiden. UDI-guiden innehåller en slutförd uppgift som sparar aktivitetssekvensvariabler när du väljer Slutför. Om du avbryter guiden anger aktiviteten endast aktivitetssekvensvariabeln OSDSetupWizCancelled till TRUE och sparar inte ändringar i andra aktivitetssekvensvariabler.
Om du skapar en egen slutkomponent måste du registrera den med kod som den här:
Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);
PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);
PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);
pService->Register(pFinish);
IBindableList-gränssnitt
__interface IBindableList : IUnknown
{
size_t Count(void);
HRESULT GetCaption(size_t index, LPBSTR pCaption);
};
Implementera det här gränssnittet om du har en komponent för datakällan som du vill binda till en kombinationsruta genom att anropa dess bindningsmetod .
size_t Count(void)
Den här metoden returnerar antalet objekt i listan.
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Den här metoden returnerar objektets bildtext vid ett specifikt index.
IDataNodes-gränssnitt
__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);
};
Det här gränssnittet ger åtkomst till hierarkiska data som kan sparas på en sida. Du får det här gränssnittet via metoder i gränssnittet ISettingsProperties , som är tillgängligt för din sida via metoden Inställningar .
Data i en sidas XML kan se ut ungefär så här
<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>
Anropsinställningar()->GetDataNode(L"Network", &pData) ger dig en IDataNodes-instans med två dataobjekt (som var och en i sin tur har två egenskaper).
size_t Count()
Den här metoden returnerar antalet DataItem-element .
HRESULT SetCaptionProperty(LPCTSTR captionProperty)
Komponenten som stöder det här gränssnittet stöder också IBindableList, vilket gör det enkelt att fylla i en kombinationsruta med data från sidans XML. Den här metoden styr vilken egenskap (setter) i varje DataItem-element som ska användas för den här bindningen. Du kan till exempel anropa den här metoden med DisplayName och använda den här setter-egenskapen för databindning. Kombinationsrutan skulle sedan innehålla Offentliga och Dev Team som objekt.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)
Den här metoden hämtar en egenskap från ett av DataItem-elementen . Se Tabell 41 och Tabell 42.
Tabell 41. DataItem GetProperty
Parameter | Beskrivning |
---|---|
Index | Indexvärdet (börjar med 0) för dataobjektet som du vill hämta ett egenskapsvärde för |
PropertyName | Namnet på den uppsättningsegenskap som du vill hämta ett värde för |
propertyValue | Vid retur innehåller strängvärdet för en egenskap |
Tabell 42. HRESULT GetProperty
HRESULT | Beskrivning |
---|---|
S_OK | Egenskapen hämtades. |
E_INVALIDARG | Indexet är förbi slutet av matrisen. |
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)
Den här metoden liknar GetProperty, men i stället för att returnera ett värde från en DataItem returnerar den hela DataItem som omsluts i ett ISettingsProperties-gränssnitt . Se Tabell 43 och Tabell 44.
Tabell 43. HRESULT GetNode
Parameter | Beskrivning |
---|---|
Index | Indexvärdet (börjar med 0) för dataobjektet som du vill hämta ett egenskapsvärde för |
ppNode | Vid avslut, ISettingsProperties-gränssnittet som omsluter DataItem-noden |
Tabell 44. HRESULT GetNode-resultat
HRESULT | Beskrivning |
---|---|
S_OK | Noden hämtades. |
E_INVALIDARG | Indexet är förbi slutet av matrisen. |
Gränssnitt för IFactoryRegistry
__interface IFactoryRegistry : IUnknown
{
void Register(LPCTSTR type, IClassFactory *pFactory);
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);
BOOL Contains(LPCTSTR type);
HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory);
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance);
HRESULT SetContainer(IWizardPageContainer *pContainer);
HRESULT RegisterService(REFGUID iid, IUnknown *pService);
HRESULT GetService(REFGUID iid, IUnknown **ppService);
};
Översikt
När du skapar en ny anpassad sida måste du minst skapa en sidfabrik – en klass som implementerar IClassFactory. (Du kan använda ClassFactoryImpl som basklass för din fabrik.)
void Register(LPCTSTR-typ, IClassFactory *pFactory)
Den här metoden registrerar en klassfabrik med registret. Se Tabell 45.
Tabell 45. IClassFactory void Register
Parameter | Beskrivning |
---|---|
Typ | En sträng som identifierar den fabrik som du registrerar. i allmänhet bör den här parametern ha företagets namn i strängen för att säkerställa att den är unik |
pFactory | En pekare till din klassfabriksinstans |
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)
Den här metoden är endast avsedd för internt bruk.
BOOL Contains(LPCTSTR-typ)
Den här metoden är vanligtvis avsedd för intern användning. Den kontrollerar om en klassfabrik har registrerats för en typ.
HRESULT GetFactory(LPCTSTR-typ, IClassFactory **ppFactory)
Med den här metoden kan du hämta klassfabriken. Vanligtvis anropar du CreateInstance. Men om du ska skapa ett stort antal av samma komponent är det mer effektivt att hämta fabriken och sedan be den att skapa instanserna åt dig.
HRESULT CreateInstance(LPCTSTR-typ, IUnknown **ppInstance)
Den här metoden skapar en ny instans av en komponent, givet dess typ. Använd mallmetoden CreateInstance i stället, vilket gör det möjligt att skapa typsäkra objekt.
HRESULT SetContainer(IWizardPageContainer *pContainer)
Den här metoden är endast avsedd för internt bruk.
HRESULT RegisterService(REFGUID iid, IUnknown *pService)
Tjänster är enskilda instanser av en komponent som kan användas på flera platser. Du kan använda den här metoden för att registrera en tjänst på en sida och sedan hämta samma instans från en annan sida.
HRESULT GetService(REFGUID iid, IUnknown **ppService)
Den här metoden hämtar en tjänst som tidigare har registrerats med ett anrop till RegisterService.
HRESULT SetLanguage(LANGID languageId)
Den här metoden anger språket i UDI-guiden till den språkidentifierare som du angav i parametern languageId .
LANGID GetLanguage()
Den här metoden returnerar värdet för språkidentifieraren som du angav med kommandoradsparametern /locale för UDI-guiden. Metoden returnerar något av följande värden:
Värdet för språkidentifieraren som medföljer kommandoradsparametern /locale
0, om du inte angav kommandoradsparametern /locale
ILogger-gränssnitt
__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);
};
Översikt
UDI-guiden loggar information till en loggfil, vilket hjälper dig att felsöka problem som finns i fältet. Det är en bra idé att dina sidor loggar information. Du kan hämta en pekare till det här gränssnittet från sidan med hjälp av sidans Logger() -metod. Raderna i loggfilen innehåller ett "nivånummer" som representerar felmeddelanden, normalmeddelanden, utförliga meddelanden eller felsökningsmeddelanden.
Obs!
Felsökningsmeddelanden sparas inte i loggfilen om inte felsökningsstöd är aktiverat. Du kan aktivera felsökningsstöd genom att lägga till följande rad i formatelementet i .config-filen:
<Setter Property="debug">true</Setter>
Init
HRESULT Init(LPCWSTR logFilename)
Den här metoden är endast avsedd för internt bruk.
MoveLog
HRESULT MoveLog(LPCWSTR logFilename)
Den här metoden är endast avsedd för internt bruk.
LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)
Den här metoden är endast avsedd för internt bruk.
Logg
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)
Den här metoden är endast avsedd för internt bruk.
Fel
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)
Anropa den här metoden för att logga information om ett fel. Se Tabell 46.
Tabell 46. HRESULT-fel
Parameter | Beskrivning |
---|---|
Fel | Felkoden som returneras av ett anrop (Den här koden visas i loggposten som ett tal.) |
Komponent | En sträng som identifierar källan till felet, som vanligtvis är din sida eller komponenten som du har skrivit |
Meddelande | Meddelandet som förklarar vad som orsakade felet |
Fel 2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Den här metoden liknar felmetoden men gör att du kan ange ett meddelande i två delar. Det slutliga meddelandet har "message" och sedan "message2" i utdatafilen. Detta är helt enkelt en bekvämlighetsmetod.
Normal
HRESULT Normal(LPCTSTR component, LPCTSTR message)
Den här metoden loggar ett normalt meddelande. Se beskrivningen av felmetoden för parametrar.
Normal2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Den här metoden loggar ett normalt meddelande. Se beskrivningen av error2-metoden för parametrar.
Mångordig
HRESULT Verbose(LPCTSTR component, LPCTSTR message)
Den här metoden loggar ett utförligt meddelande. Se beskrivningen av felmetoden för parametrar.
Utförlig2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Den här metoden loggar ett utförligt meddelande. Se beskrivningen av error2-metoden för parametrar.
Felsöka
HRESULT Debug(LPCWSTR component, LPCWSTR message)
Den här metoden loggar ett felsökningsmeddelande. Se beskrivningen av felmetoden för parametrar. Felsökningsmeddelanden sparas inte i filen om de inte är aktiverade. Mer information finns i avsnittet Översikt.
EnableDebug
HRESULT EnableDebug(BOOL debug)
Den här metoden är endast avsedd för internt bruk.
Stänga
HRESULT Close(void)
Den här metoden är endast avsedd för internt bruk.
GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)
Den här metoden hämtar namnet på loggfilen.
IOrientation Interface
__interface IOrientation : IUnknown
{
void SetController(IWizardDialogController *pController);
int AddPage(LPCTSTR name);
void SelectPage(int index);
};
Det här gränssnittet är endast för internt bruk.
ISettings-gränssnitt
__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);
};
Det här gränssnittet är endast för internt bruk.
ISettingsProperties-gränssnitt
__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);
};
Översikt
Det här gränssnittet ger åtkomst till siddata. Om du vill komma till den översta nivån av siddata använder du sidans inställningsmetod().
HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)
Med den här metoden kan du hämta attributvärdena på huvudnoden, vilket är sidnoden när du använder metoden Settings() på sidan.
IStringProperties * Properties()
Den här metoden ger åtkomst till set-egenskapsvärdena under huvudnoden. För en sida är det här egenskaperna på den översta nivån.
HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)
Anropa den här metoden om du vill hämta en lista över XML-noder direkt med ett XPath-uttryck. Det är bättre att använda någon av de andra metoderna om du kan. Använd endast den här metoden om du inte kan komma åt noder på något annat sätt.
HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)
Anropa den här metoden om du vill hämta en enda XML-nod direkt med ett XPath-uttryck. Det är bättre att använda någon av de andra metoderna om du kan. Använd bara den här metoden om du inte kan komma till en nod på något annat sätt.
HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)
Hämta ett dataelement baserat på elementets namnattribut .
HRESULT GetDataNodes(IDataNodes **ppNodes)
Den här metoden hämtar en lista över DataItem-element under den aktuella noden. Från sidnivå anropar du GetDataNode för att hämta ett ISettingsProperty-gränssnitt för data. På den instansen anropar du sedan GetDataNodes för att hämta listan över poster. Med den här XML-koden kan du till exempel:
<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)
Den här metoden ger ett snabbt sätt att komma till uppsättningen DataItem-noder under en specifik datanod . Med hjälp av XML från exemplet GetDataNodes gör följande kod exakt samma sak som de fyra kodraderna i exemplet under GetDataNodes men med felkontroll:
ISimpleStringProperties Interface
Gränssnitt för ISimpleStringProperties
__interface ISimpleStringProperties : IStringProperties
{
void Add(LPCTSTR propertyName, LPCTSTR value);
};
Det här gränssnittet kanske inte är användbart i sig. Den implementeras dock av komponenten ID_SimpleStringProperties , som även implementerar gränssnittet IStringProperties . Du kan använda den här komponenten om du behöver skicka en uppsättning egenskaper till en annan komponent, till exempel en aktivitet, men du vill lägga till värden programmatiskt i stället för att använda värden från XML. Här är ett exempel på hur du använder det här gränssnittet:
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);
};
Det här gränssnittet ger enkel åtkomst till en uppsättning setter-element som kommer från XML. Det här gränssnittet är tillgängligt för egenskaperna för en sida med hjälp av Settings()->Properties().
HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)
Den här metoden hämtar ett enda egenskapsvärde. Se Tabell 47 och Tabell 48.
Tabell 47. Hämta egenskapsvärde för IHRESULT
Parameter | Beskrivning |
---|---|
PropertyName | Namnet på den egenskap som du vill läsa |
pPropValue | Vid avslut innehåller egenskapsvärdet som en sträng (Det här värdet blir nullptr om det inte finns någon sådan egenskap.) |
Tabell 48. Hämta egenskapsvärderesultat för IHRESULT
HRESULT | Beskrivning |
---|---|
S_OK | Egenskapsvärdet hämtas. |
E_INVALIDARG | Det finns ingen egenskap med det namn som du angav. |
ITaskManager-gränssnitt
__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);
}
Det här gränssnittet implementeras av TaskManager-komponenten (ID_TaskManager i ITaskManager.h), som är komponenten som kör uppgifter på sidan preflight. Du kan antingen använda sidan preflight direkt, vilket är vad du gör för det mesta, eller skapa en egen sida, så att den här komponenten kan utföra det mesta av arbetet.
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)
Du måste anropa den här metoden innan du anropar någon annan metod. Den initierar TaskManager-komponenten . Se Tabell 49.
Tabell 49. HRESULT Init
Parameter | Beskrivning |
---|---|
pPageView | Ger åtkomst till den sida som ska köra uppgifter (Den här sidan måste ha en specifik uppsättning kontroller som beskrivs i de närmaste parametrarna.) |
idListView | Kontroll-ID för en ListView-kontroll som visar listan över uppgifter och status för dessa aktiviteter |
idMessage | Kontroll-ID för en textruta som ska användas för att visa ett meddelande för den uppgift som du väljer |
idRetryButton | Kontroll-ID för en knapp som du kan välja för att köra aktiviteterna igen |
pPageInfo | En omslutning runt sidans XML (TaskManager läser in den uppsättning uppgifter som ska köras från denna XML.) |
pCallback | Kan vara null (Om den här parametern inte är null anropar TaskManager metoden Startad när en aktivitet startas och metoden Slutförd för varje aktivitet som har körts klart.) |
HRESULT SetFailMessage(LPCWSTR-meddelande)
Den här metoden anger det meddelande som ska visas om en eller flera aktiviteter misslyckas.
HRESULT Start(void)
Den här metoden startar alla uppgifter. Varje uppgift startas i en separat tråd.
HRESULT GetTaskMessage(size_t index, LPBSTR-meddelande)
Den här metoden är endast avsedd för internt bruk. Det hämtar det aktuella meddelandet för en aktivitet baserat på dess index i listan över aktiviteter.
HRESULT GetResultType)(size_t index, LPBSTR-typ)
Den här metoden hämtar den aktuella "typen" för en aktivitet. Tabell 50 visar tillgängliga typer.
Tabell 50. HRESULT GetResultType
Typ | Beskrivning |
---|---|
0 | Representerar en uppgift som lyckades |
1 | Representerar en uppgift som returnerade en varning |
-1 | Representerar en misslyckad uppgift |
Typen hämtas genom att titta på aktivitetens slut- eller felkod och hitta en matchning i aktivitetens <ExitCodes> XML-element.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR-värde)
Den här metoden används av förlopps- och preflight-sidorna för att hämta egenskapen BitmapFilename setter så att den kan visa en bild bredvid meddelandet för den uppgift som du markerar. Med andra ord kan du lägga till en anpassad setter i uppgiftens XML och sedan hämta den med den här metoden.
int GetSelectedIndex(void)
Den här metoden hämtar indexet för den markerade aktiviteten, vilket är användbart om du vill hämta ytterligare information om aktiviteten (se GetProperty-metoden ) som ska visas för den valda aktiviteten. Förlopps- och förloppssidorna använder den här metoden för att visa en bild för den valda aktiviteten.
HRESULT Wait(DWORD waitMilliseconds)
Den här metoden hjälper främst till med enhetstester så att testet kan se till att aktiviteterna slutförs innan enhetstestet avslutas. Normalt skulle du inte anropa den här metoden. Den returnerar antingen när alla aktiviteter har slutförts eller väntetiden har förflutit.
size_t FailedCount(void)
Den här metoden returnerar antalet aktiviteter som för närvarande är markerade som misslyckade.
size_t WarningCount(void)
Den här metoden returnerar det antal aktiviteter som för närvarande är markerade som varning.
size_t SucceedCount(void)
Den här metoden returnerar antalet aktiviteter som för närvarande har markerats som slutförda.
size_t RunningCount(void)
Den här metoden returnerar antalet aktiviteter som körs för närvarande.
void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)
Anropa den här metoden från sidans OnCommonControlEvent så att TaskManager kan bearbeta händelser som den behöver.
void OnControlEvent(WORD eventId, WORD controlId)
Anropa den här metoden från sidans OnControlEvent så att TaskManager kan bearbeta händelser som den behöver.
void EnableButtons(BOOL enable)
Den här metoden är endast avsedd för internt bruk.
IWizardComponent-gränssnitt
__interface IWizardComponent : IUnknown
{
HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Översikt
Vanligtvis implementerar du inte det här gränssnittet direkt utan i stället via mallklassen WizardComponent . Om komponenten implementerar det här gränssnittet och du har registrerat en klassfabrik med registret får komponenten en pekare till IWizardPageContainer-instansen när den skapas. Detta hjälper dig till exempel att komma åt loggaren eller registret för att skapa andra komponenter som komponenten kan behöva.
IWizardDialogController-gränssnitt
__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);
};
Det här gränssnittet är endast för internt bruk.
IWizardDialogView-gränssnitt
__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);
};
Det här gränssnittet är endast för internt bruk.
IWizardPage-gränssnitt
__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);
};
Översikt
Det här gränssnittet implementeras av WizardPageImpl, så normalt behöver du inte implementera det själv. Guiden anropar alla dessa metoder åt dig när den interagerar med dina anpassade sidor.
IWizardPageContainer-gränssnitt
__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);
};
Översikt
Det här gränssnittet är tillgängligt för din sida via containermetoden (implementerad av WizardPageImpl) och ger dig åtkomst till olika tjänster i guiden.
ILogger * Logger(void)
Använd den här metoden för att skriva meddelanden till loggfilen, till exempel:
Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * Properties(void)
Den här metoden ger åtkomst till "minnesvariabler", som är egenskaper som endast finns i minnet när UDI-guiden körs. Dessa egenskaper är tillgängliga för andra sidor antingen i kod eller i XML med hjälp av $memoryVarName$- syntaxen.
HRESULT CreateInstance(LPCTSTR-typ, [out] IUnknown **ppInstance)
Med den här metoden kan du skapa en ny instans av alla komponenter som har registrerats. Det är dock bättre att använda mallfunktionen CreateInstance, eftersom den är starkt skriven.
HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance)
Med den här metoden kan du hämta en tjänst som har registrerats. Det är dock bättre att anropa funktionen GetService-mall , som är starkt skrivet (i stället för att använda IUnknown).
HRESULT ReplaceVariables(LPCTSTR-källa, [out] LPBSTR pDest)
Den här metoden hanterar arbete med variabler inuti strängvärden. Den stöder de format som visas i tabell 51 och tabell 52.
Tabell 51. HRESULT ReplaceVariables
Format | Beskrivning |
---|---|
$Name$ | Ersätter värdet för en minnesvariabel med det här namnet (om det inte finns någon minnesvariabel med namnet tas "token" bort.) |
%Name% | Antingen en aktivitetssekvensvariabel eller en miljövariabel. Ordningen är följande: 1. Använd värdet för en aktivitetssekvensvariabel, om den finns. 2. Använd värdet för en miljövariabel, om den finns. 3. Annars tar du bort den här texten från strängen. |
Tabell 52. HRESULT-parameter
Parameter | Beskrivning |
---|---|
Source | Indatasträngen, som kan innehålla valfri kombination av $ variabler och % eller ingen alls |
pDest | Vid retur innehåller en ny sträng som har alla token ersatta enligt tabell 51 |
HRESULT GotoPage(LPCTSTR pageName)
Den här metoden har inte testats fullständigt. Tanken är att du kan växla direkt till en specifik sida baserat på namnet på sidan enligt definitionen i den .config XML-filen. Om du anropar den här metoden kringgås OnNextSelected på sidan. Dessutom kan beteendet för den här metoden ändras, så använd den på egen risk.
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)
Den här metoden visar en meddelanderuta med texten och bildtext som du anger. uType-parametern är ett värde som du kan ange för Funktionen MessageBox Win32.
BOOL InPreview(void)
Den här metoden returnerar TRUE om du startade guiden i läget "förhandsversion" genom att ange /preview-växeln . I förhandsgranskningsläge inaktiveras aldrig knappen Nästa . Med den här metoden kan du kringgå kod i förhandsgranskningsläge, till exempel som kan orsaka problem när du inte har giltiga data på sidan.
HWND GetHwnd(void)
Den här metoden returnerar HWND för huvuddialogrutan. Använd den här metoden med försiktighet. I allmänhet är programmeringsgränssnittet för UDI-guiden utformat så att du aldrig arbetar direkt med fönsterhandtag.
IWizardPageView-gränssnitt
__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);
};
Det här gränssnittet är tillgängligt för koden på sidan via view-metoden (implementerad av WizardPageImpl).
HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown *ppControl)
UDI-guiden använder omslutning, som verkligen är fasader för att interagera med kontrollerna på sidan. Om du använder de här fasaderna i stället för de faktiska kontrollerna blir det mycket enklare att skriva tester för sidan, eftersom du kan tillhandahålla modeller från dina tester.
I stället för att använda den här metoden direkt är det bättre att använda mallmetoden GetControlWrapper , som är starkt skrivet, till exempel:
PComboBox m_pLanguagePackCombo;
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);
HWND GetHwnd(void)
Den här metoden returnerar fönsterhandtaget för sidan. I allmänhet bör du inte behöva åtkomst till det här fönsterhandtaget.
HWND GetControl(int itemId)
Om du måste kan du anropa den här metoden för att hämta fönsterhandtaget för en kontroll på sidan. (Det är bättre att anropa mallfunktionen GetControlWrapper ).
HRESULT Show (void)
Den här metoden är endast avsedd för internt bruk.
HRESULT Hide(void)
Den här metoden är endast avsedd för internt bruk.
HRESULT Focus(int itemId)
Ange indatafokus till en specifik kontroll.
IWizardPage * Page(void)
Den här metoden är endast avsedd för internt bruk.
IFormController * Form(void)
Den här metoden är endast avsedd för internt bruk.
HRESULT FocusWizardButton(knappen WizardButtons)
Ställer in fokus på någon av guidens knappar. WizardButtons har två värden: BackButton och NextButton.
HRESULT SetEnable(wizardButtons button, BOOL enable)
Begär att en av guideknapparna ska aktiveras eller inaktiveras. Knappen kanske inte matchar det tillstånd som du begär. Om du till exempel kör UDI-guiden med /preview-växeln aktiveras alltid knapparna. WizardButtons har två värden: BackButton och NextButton.
void ShowWarningMessage(LPCTSTR-meddelande)
Den här metoden visar ett varningsmeddelande längst ned i sidans innehållsområde. Det här meddelandet kan vara vilken text du vill.
void HideWarningMessage(void)
Dölj ett varningsmeddelande som du visade med ett anrop till ShowWarningMessage.
IXmlDocument-gränssnitt
__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);
};
Översikt
Det här gränssnittet implementeras av komponenten ID_IXmlDocument , som är en fasad som är utformad för att göra det enklare att arbeta med XML-dokument i C++.
HRESULT Load(LPCTSTR-filnamn)
Den här metoden läser in ett XML-dokument från en extern fil. Den returnerar S_OK om filen lästes in utan fel eller S_FALSE om ett fel uppstod. När det uppstår ett fel kan du få felmeddelandet genom att anropa GetParseErrorMessage.
HRESULT LoadXml(LPCTSTR xml)
Den här metoden läser in ett XML-dokument från en sträng i stället för en extern fil. Förutom källan för att läsa XML-koden är beteendet detsamma som metoden Load .
HRESULT Save(LPCWSTR-filnamn)
Den här metoden sparar XML-dokumentet som finns i minnet till en extern fil.
HRESULT GetParseErrorMessage(LPBSTR pMessage)
Den här metoden returnerar en ny sträng med felmeddelandet från att läsa in XML-dokumentet, om det finns några. Den returnerar alltid S_OK.
HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)
Med den här metoden kan du använda ett XPath-uttryck för att hämta en samling noder från dokumentet. Den returnerar alltid S_OK.
HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)
Med den här metoden kan du använda ett XPath-uttryck för att hämta en nod från dokumentet. Den returnerar alltid S_OK.
HRESULT AddSchema(LPCTSTR-filnamn, LPCTSTR ns)
Den här metoden lägger till namnet på en extern schemafil som ska användas för att verifiera schemat för XML-dokumentet när det läses in. Namnområdet som du anger är den sträng som du kan använda i XPath-frågor, även om detta inte har testats.
HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value)
Den här metoden lägger till ett nytt attribut till en befintlig nod i XML-dokumentet. Se Tabell 53.
Tabell 53. HRESULT AddAttribute
Parameter | Beskrivning |
---|---|
pNode | Den nod som du vill lägga till ett attribut till |
Namn | Namnet på det nya attributet |
Värde | Värdet för det nya attributet |
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode)
Anropa den här metoden för att skapa en ny nod:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
När du har skapat en ny nod kan du lägga till den som underordnad till en annan nod genom att anropa den överordnade appendChild-metoden .
Hjälpfunktioner
CreateInstance-mallfunktion
HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)
Den här funktionen definieras i IWizardPageContainer.h och tillhandahåller en typsäker omslutning över metoden IWizardPageContainer-CreateInstance>, till exempel:
CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);
Den här koden skapar en ny ID_Directory komponent för att hämta IDirectory-gränssnittet för komponenten.
Funktionen GetService-mall
void GetService(IWizardPageContainer *pContainer, I **ppService)
Den här funktionen definieras i IWizardPageContainer.h och tillhandahåller en typsäker omslutning över metoden IWizardPageContainer-GetService>, till exempel:
GetService<ITSVariableBag>(Container(), &pTsBag);
Den här funktionen hämtar aktivitetssekvenskomponenten, som stöder ITSVariableBag-gränssnittet . (För ITSVariableBag kan du använda metoden TSVariables i klassen WizardPageImpl i stället.)
UDI-guiden Designer schemareferens för konfigurationsfil
Den här filen används av UDI-guiden Designer. En separat fil skapas för varje anpassad .dll fil, som kan innehålla anpassade sidredigerare för guider, anpassade uppgifter eller anpassade validerare. Filen måste sluta med .config och finnas i mappen installation_folder\Bin\Config (där installation_folder är mappen där du installerade MDT).
Tabell 54 visar elementen i UDI-guiden Designer konfigurationsfilen och deras beskrivningar. DesignerConfig-elementet är rotnoden för den här referensen.
Tabell 54. Element i UDI-guiden Designer konfigurationsfilen och deras beskrivningar
Elementnamn | Beskrivning |
---|---|
DesignerConfig | Anger roten för alla andra element |
DesignerMappings | Grupper en uppsättning sidelement |
Sida | Anger en sidredigerare som ska läsas in i UDI-guiden Designer, som används för att redigera konfigurationsinställningarna för en guidesida |
Param | Anger en parameter som skickas till det överordnade aktivitets - eller validatorelementet och motsvarar ett Setter-element i konfigurationsfilen för UDI-guiden Obs! Attributen för det här elementet är olika om det överordnade elementet är elementet Aktivitet eller Validator . |
Uppgift | Anger en aktivitet i aktivitetsbiblioteket |
TaskItem | Anger en grupp med parametrar som skickas till aktiviteten |
TaskLibrary | Grupper en uppsättning aktivitetselement |
Validerare | Anger en validerare i valideringsbiblioteket |
ValidatorLibrary | Grupper en uppsättning validatorelement |
DesignerConfig
Det här elementet anger roten för alla andra element.
Elementinformation
Tabell 55 innehåller information om elementet DesignerConfig .
Tabell 55. Information om DesignerConfig-element
Attribut | Värde |
---|---|
Antal förekomster | Ett: Det här elementet krävs. |
Överordnade element | Ingen |
Innehåll | DesignerMappings, TaskLibrary, ValidatorLibrary |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings
Det här elementet grupperar en uppsättning sidelement .
Elementinformation
Tabell 56 innehåller information om elementet DesignerMappings .
Tabell 56. Information om DesignerMappings-element
Attribut | Värde |
---|---|
Antal förekomster | Noll eller ett i designerkonfigurationselementet (det här elementet är valfritt om det inte finns någon anpassad guidesida i DLL-filen som motsvarar den här UDI-guiden Designer konfigurationsfil.) |
Överordnade element | DesignerConfig |
Innehåll | Sida |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<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>
Sida
Det här elementet anger en guidesideredigerare som ska läsas in i UDI-guiden Designer, som i sin tur används för att redigera konfigurationsinställningarna för en guidesida.
Elementinformation
Tabell 57 innehåller information om sidelementet .
Tabell 57. Information om sidelement
Attribut | Värde |
---|---|
Antal förekomster | En eller flera för varje guidesida som definierats i elementet DesignerMappings |
Överordnade element | DesignerMappings |
Innehåll | Valfritt välformat XML-innehåll |
Elementattribut
Tabell 58 visar attributen för sidelementet och en beskrivning för var och en.
Tabell 58. Attribut och motsvarande värden för sidelementet
Attribut | Beskrivning |
---|---|
Beskrivning | Anger text som innehåller information om parametern som visas i UDI-guiden Designer |
DesignerAssembly | Anger namnet på den .dll fil som är associerad med guidens sidredigerare (filen .dll måste finnas i mappen installation_folder\Bin (där installation_folder är mappen där du installerade MDT.) |
DesignerType | Anger namnet på guidens sidredigerare i .dll fil som anges i attributet DesignerAssembly (Det här är Microsoft .NET-typen för guidens sidredigerare, med det fullständigt kvalificerade Microsoft .NET-namnområdet.) |
DisplayName | Anger det användarvänliga namnet på sidredigeraren, som visas i UDI-guiden Designer |
DLL | Anger namnet på den .dll fil som är associerad med guidesidan (den .dll filen måste finnas i mappen installation_folder\Templates\Distribution\Tools\platform (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 är för 64-bitarsversionen.) Not: Kontrollera att DLL-processorarkitekturen matchar MDT-processorarkitekturen som är installerad. Om du till exempel har installerat en 32-bitarsversion av MDT kontrollerar du att du använder en 32-bitars DLL för guidesidan. |
Bild | Anger namnet på en bild på sidan som är i PNG-format (Portable Network Graphics) (filen .png måste finnas i mappen installation_folder\Bin\Images (där installation_folder är mappen där du installerade MDT.) |
Typ | Anger guidens sidredigerare och måste matcha namnet som användes när den anpassade sidan registrerades |
Anmärkningar
UDI-guiden Designer använder sidelementet som en mall för att skapa den första XML-koden för en ny guide. UDI-guiden Designer utför schemaverifiering för att säkerställa att sid- och underordnade element har ett giltigt format. Det här elementet innehåller en mappning mellan UDI-guidens sidtyp och den information som UDI-guiden Designer behöver för att redigera och skapa sidor av den här typen med hjälp av en anpassad sidredigerare.
Exempel
Ingen.
Param
Det här elementet anger en parameter som skickas till det överordnade aktivitets - eller validatorelementet och motsvarar ett Setter-element i konfigurationsfilen för UDI-guiden.
Obs!
Attributen för det här elementet är olika om det överordnade elementet är elementet Task eller Validator .
Elementinformation
Tabell 59 innehåller information om Param-elementet .
Tabell 59. Param-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | En eller flera för varje överordnat Element för TaskItem eller Validator |
Överordnade element | TaskItem, validator |
Innehåll | Valfritt välformat XML-innehåll |
Elementattribut
Tabell 60 visar attributen för elementet Param och innehåller en beskrivning av var och en.
Tabell 60. Attribut och motsvarande värden för Param-elementet
Attribut | Beskrivning |
---|---|
Beskrivning | Anger text som innehåller information om parametern som visas i UDI-guiden Designer Obs! Det här attributet är endast giltigt för elementet Validator. |
DisplayName | Anger det användarvänliga namnet på validatorparametern, som visas för lämplig UDI-guidesida i UDI-guiden Designer (Det här namnet är vanligtvis mer beskrivande än attributet Namn.) Obs! Det här attributet är endast giltigt för elementet Validator. |
Namn | Anger namnet på parametern som skickas till aktiviteten eller valideraren, beroende på det överordnade elementet (Det här attributet blir egenskapsattributet i ett Setter-element i konfigurationsfilen för UDI-guiden.)Not: Den här parametern används för både överordnade Element för TaskItem och Validator. |
Anmärkningar
Ingen.
Exempel
Ingen.
Uppgift
Det här elementet anger en aktivitet i aktivitetsbiblioteket.
Elementinformation
Tabell 61 innehåller information om aktivitetselementet .
Tabell 61. Information om aktivitetselement
Attribut | Värde |
---|---|
Antal förekomster | Ett eller flera element i TaskLibrary-elementet (Det här elementet är inte valfritt om elementet TaskLibrary har angetts.) |
Överordnade element | TaskLibrary |
Innehåll | TaskItem |
Elementattribut
Tabell 62 visar attributen för aktivitetselementet och innehåller en beskrivning av var och en.
Tabell 62. Attribut och motsvarande värden för aktivitetselementet
Attribut | Beskrivning |
---|---|
Beskrivning | Anger text som innehåller information om uppgiften, som visas i UDI-guiden Designer |
DLL | Anger namnet på den .dll fil som är associerad med uppgiften (filen .dll måste finnas i mappen installation_folder\Templates\Distribution\Tools\platform (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 för 64-bitarsversionen.) |
Namn | Anger namnet på aktiviteten, som visas på lämplig UDI-guidesida och i UDI-guiden Designer |
Typ | Anger aktivitetstypen, som är registrerad i fabriksregistret och används för att anropa en viss aktivitet i en .dll fil |
Anmärkningar
Ingen.
Exempel
Ingen.
TaskItem
Det här elementet anger en grupp med parametrar som skickas till aktiviteten.
Elementinformation
Tabell 63 innehåller information om elementet TaskItem .
Tabell 63. TaskItem-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | En eller flera för varje aktivitetselement |
Överordnade element | Uppgift |
Innehåll | Param |
Elementattribut
Tabell 64 visar attributen för elementet TaskItem och innehåller en beskrivning av var och en.
Tabell 64. Attribut och motsvarande värden för TaskItem-elementet
Attribut | Beskrivning |
---|---|
Typ | Anger vilken elementtyp som ska skapas i konfigurationsfilen för UDI-guiden. Ett XML-element skapas som motsvarar värdet för det här attributet. Om värdet för det här attributet till exempel är File skapas ett filelement i konfigurationsfilen för UDI-guiden. För närvarande stöds endast följande värden: - Fil, som kräver två underordnade Param-element (ett underordnat Param-element med attributet Namn inställt på Källa och ett annat underordnat Param-element med attributet Namn inställt på Dest) - Setter, som kräver ett underordnat Param-element |
Anmärkningar
Ingen.
Exempel
Ingen.
TaskLibrary
Det här elementet grupperar en uppsättning aktivitetselement .
Elementinformation
Tabell 65 innehåller information om elementet TaskLibrary .
Tabell 65. Information om TaskLibrary-element
Attribut | Värde |
---|---|
Antal förekomster | Noll eller en i elementet DesignerConfig (det här elementet är valfritt om det inte finns några anpassade uppgifter i DLL-filen som motsvarar den här UDI-guiden Designer konfigurationsfilen.) |
Överordnade element | DesignerConfig |
Innehåll | Uppgift |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<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>
Validerare
Det här elementet anger en validerare i valideringsbiblioteket.
Elementinformation
Tabell 66 innehåller information om elementet Validator .
Tabell 66. Information om validatorelement
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i elementet ValidatorLibrary (det här elementet är valfritt.) |
Överordnade element | ValidatorLibrary |
Innehåll | Param |
Elementattribut
Tabell 67 visar attributen för elementet Validator och innehåller en beskrivning av var och en.
Tabell 67. Attribut och motsvarande värden för validatorelementet
Attribut | Beskrivning |
---|---|
Beskrivning | Anger text som innehåller information om valideraren, som visas i UDI-guiden Designer |
DisplayName | Anger det användarvänliga namnet på validatorn som visas i UDI-guiden Designer (Det här namnet är vanligtvis mer beskrivande än attributet Namn.) |
DLL | Anger namnet på den .dll fil som är associerad med validatorn (filen .dll måste finnas i mappen installation_folder\Templates\Distribution\Tools\platform (där installation_folder är mappen där du installerade MDT och plattformen är x86 för 32-bitarsversionen eller x64 för 64-bitarsversionen.) |
Namn | Anger namnet på valideraren, som visas på lämplig UDI-guidesida och i UDI-guiden Designer |
Typ | Anger valideringstypen, som är registrerad med registerfaktorn och används för att anropa en specifik validerare i en .dll fil |
Anmärkningar
Ingen.
Exempel
Ingen.
ValidatorLibrary
Det här elementet grupperar en uppsättning validatorelement .
Elementinformation
Tabell 68 innehåller information om elementet ValidatorLibrary .
Tabell 68. Information om ValidatorLibrary-element
Attribut | Värde |
---|---|
Antal förekomster | Noll eller ett i DesignerConfig-elementet (det här elementet är valfritt om det inte finns några anpassade validatorer i DLL-filen som motsvarar den här UDI-guiden Designer konfigurationsfil.) |
Överordnade element | DesignerConfig |
Innehåll | Validerare |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<DesignerConfig> + <TaskLibrary> – <ValidatorLibrary> +<Validator DLL="" Description="Requires text in a field" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Doesn'T t allow certain characters to be in a field" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Require the contents match a regular expression" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>
Referens för UDI-guiden Designer
Kontroller
De kontroller som används för att skapa anpassade sidredigerare för användning i UDI-guiden Designer är WPF UserControl-instanser. Tabell 69 visar de kontroller som du kan använda för att skapa anpassade sidredigerare för guider.
Tabell 69. Kontroller som kan användas för att skapa anpassade sidredigerare för guider
Kontroll | Beskrivning |
---|---|
CollectionTControl | Den här kontrollen används för att redigera data som lagras i dataelementet i ett sidelement . |
FieldElementControl | Den här kontrollen används för att redigera ett fält, som vanligtvis är länkat till en TextBox-kontroll på .xaml-sidan. |
SetterControl | Den här kontrollen används för att ändra värdet för ett setter-element i konfigurationsfilen för UDI-guiden. |
CollectionTControl
Den här kontrollen innehåller många funktioner för att redigera data. Det bästa sättet att lära sig hur du använder den här kontrollen är att titta på exemplet, som visar hur du redigerar data under en sidas dataelement . I synnerhet visar exemplet hur du lägger till, tar bort och redigerar objekt i den här kontrollen.
FieldElementControl
Använd den här kontrollen för att redigera ett fält, som vanligtvis är länkat till en TextBox-kontroll på .xaml-sidan.
Exempel
Följande utdrag från en .xaml-fil illustrerar användningen av FieldElementControl för att konfigurera standardvärdet för ett fält på en guidesida med hjälp av en underordnad TextBox-kontroll :
<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>
Egenskaper
FieldData
Den här strängegenskapen innehåller information om hur du ansluter FieldElementControl till den underliggande XML-koden för fältet. Anslutningen görs till en egenskap för sidredigerarens gränssnitt. Följande utdrag från en .xaml-fil illustrerar användningen av egenskapen FieldData :
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
I det här utdraget heter sidredigerarens gränssnitt ControlRoot och anges i parametern ElementName . Bindningen utförs till egenskapen DataContext.Location i controlRoot-sidredigerarens gränssnitt. DataContext är en vymodell som pekar på sidelementet i konfigurationsfilen för UDI-guiden. Plats är en egenskap för vyn som returnerar en lista över möjliga platser och definieras av ett dataelement i konfigurationsfilen för UDI-guiden. Varje plats definieras av ett DataItem-element i konfigurationsfilen för UDI-guiden.
HeaderText
Med den här strängegenskapen kan du ange en rubrik för FieldElementControl-kontrollen . Rubriken fungerar som en rubrik för kontrollen och formateras som fet, orange text som visas direkt ovanför kontrollen.
Instruktionstext
Med den här strängegenskapen kan du ange informationstext för FieldElementControl-kontrollen . Normalt används texten för att ge en kort beskrivning av fältet och förklara hur konfigurering av fältet påverkar motsvarande guidesida.
HideEnableButton
Med den här booleska egenskapen kan du styra synligheten för knappen som ändrar tillstånd mellan Olåst och Låst (aktiverat eller inaktiverat). Om det är inställt på:
Sant, knappen är inte synlig
Falskt, knappen är synlig (det här är standardvärdet.)
HideDefaultTab
Med den här booleska egenskapen kan du styra synligheten för avsnittet som innehåller den kontroll som används för att ange standardvärdet. Även om egenskapen refererar till en flik finns det ingen flik i FieldElementControl utan i stället ett avsnitt som kan döljas. Om det är inställt på:
Sant, avsnittet är inte synligt
Falskt, avsnittet är synligt (det här är standardvärdet.)
HideBorder
Med den här booleska egenskapen kan du styra synligheten för kantlinjen runt fältkontrollen. Om det är inställt på:
Sant, kantlinjen är inte synlig
False, kantlinjen är synlig (detta är standardvärdet.)
HideImage
Med den här booleska egenskapen kan du styra synligheten för den bild som egenskapen FieldImageSource konfigurerar. Om det är inställt på:
Sant, bilden är inte synlig
Falskt, bilden är synlig (det här är standardvärdet.)
HideValidationTab
Med den här booleska egenskapen kan du styra synligheten för avsnittet där listan över validerare hanteras. Även om egenskapen refererar till en flik finns det ingen flik i FieldElementControl utan i stället ett avsnitt som kan döljas. Om det är inställt på:
Sant, avsnittet är inte synligt
Falskt, avsnittet är synligt (det här är standardvärdet.)
HideSummaryTab
Med den här booleska egenskapen kan du styra synligheten för avsnittet där du konfigurerar fältsammanfattningen bildtext. Det bildtext och motsvarande värde från fältet visas i en sammanfattningssida i ett stegflöde. Även om egenskapen refererar till en flik finns det ingen flik i FieldElementControl utan i stället ett avsnitt som kan döljas. Om det är inställt på:
Sant, avsnittet är inte synligt
Falskt, avsnittet är synligt (det här är standardvärdet.)
HideTaskSequenceTab
Med den här booleska egenskapen kan du styra synligheten för avsnittet där du konfigurerar aktivitetssekvensvariabeln som motsvarar fältet. Även om egenskapen refererar till en flik finns det ingen flik i FieldElementControl utan i stället ett avsnitt som kan döljas. Om det är inställt på:
Sant, avsnittet är inte synligt
Falskt, avsnittet är synligt (det här är standardvärdet.)
SetterControl
Använd den här kontrollen för att ändra värdet för ett Setter-element i konfigurationsfilen för UDI-guiden. Den här kontrollen innehåller en underordnad kontroll som används för att ändra värdet för setter-elementet .
Exempel
Följande utdrag från en .xaml-fil illustrerar användningen av SetterControl för att ändra ett Setter-element med namnet KeyLocationSetter med hjälp av en underordnad TextBox-kontroll .
<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>
Egenskaper
SetterData
Du måste binda detta till en egenskap för din vy eller vymodell som ansluter till setter. Det liknar hur du binder till ett fält, enligt beskrivningen för FieldElementControl.
HeaderText
Med den här egenskapen kan du ange den text som ska visas i kontrollens rubrik. Tänk på den här egenskapen som en rubrik för kontrollen; Som standard visas den som fet, orange text.
Instruktionstext
Ange den här egenskapen till den text som du vill ska visas under rubriken , vanligtvis instruktionstext som talar om för användaren i din anpassade redigerare när och varför de vill ändra beteendet för fältet.
Gränssnitt
Tabell 70 visar de gränssnitt som du kan använda för att skapa anpassade sidredigerare för guider.
Tabell 70. Gränssnitt som kan användas för att skapa anpassade guider för sidredigerare
Gränssnitt | Beskrivning |
---|---|
IDataService | Använd det här gränssnittet för att ansluta fält till dataelementen i konfigurationsfilen för UDI-guiden. |
IMessageBoxService | Det här gränssnittet ger åtkomst till metoder som du kan använda för att visa meddelanderutor. |
IDataService
Det här gränssnittet innehåller flera egenskaper och metoder, men det finns bara en egenskap som du vill ha. Den egenskapen är den enda som dokumenteras här.
Du kan använda beroendeinmatning för att hämta en pekare till det här gränssnittet med hjälp av kod som den här i klassen:
[Dependency]
public IDataService DataService { get; set; }
Egenskaper
Tabell 71 visar egenskaperna för IDataService-gränssnittet .
Tabell 71. Egenskaper för IDataService-gränssnittet
Gränssnitt | Beskrivning |
---|---|
CurrentPage | Den här egenskapen ger åtkomst till XML-element, attribut och värden under kontexten för den aktuella sidan som redigeras i konfigurationsfilen för UDI-guiden |
CurrentPage
XElement CurrentPage { get; set; }
Den här egenskapen ger åtkomst till XML för den aktuella sidan. Du bör aldrig ange den här egenskapen, men du kan ändra XML-koden för sidan. Exempelsideredigeraren visar exempel på hur du ändrar XML-koden. Du använder den här egenskapen främst när du har anpassade data. För fält och egenskaper (seters) kan du använda fördefinierade kontroller som tar hand om all information.
IMessageBoxService
Det här gränssnittet ger åtkomst till metoder som du kan använda för att visa meddelanderutor. Du kanske undrar varför du behöver ett gränssnitt för att visa en meddelanderuta. Verkligheten är att du inte gör det: Microsoft använder det här gränssnittet med i kod, eftersom det underlättar skrivning av automatiserade tester för designersidor.
Men att använda dessa metoder ger en användbar fördel: Dialogrutorna har alltid "ägare" inställt på UDI-guiden, vilket säkerställer att dialogrutan är korrekt grupperad med huvudfönstret.
Du kan använda beroendeinmatning för att hämta en pekare till det här gränssnittet med hjälp av kod som den här i klassen:
[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Metoder
Tabell 72 visar metoderna för gränssnittet IMessageBoxService .
Tabell 72. Metoder för IMessageBoxService-gränssnittet
Metod | Beskrivning |
---|---|
ShowMessageBox | Den här överlagrade metoden används för att visa en meddelanderuta med följande medlemmar: - ShowMessageBox(Strängmeddelande, Sträng bildtext, MessageBoxImage-ikon) - ShowMessageBox(strängmeddelande, sträng bildtext, MessageBoxButton-knapp, MessageBoxImage-ikon) - ShowMessageBox(undantagsfel) |
ShowDialogWindow | Använd den här metoden för att skapa en ny dialogruta. |
ShowWizardWindow | Använd den här metoden om du vill visa en anpassad redigerare i en dialogruta som innehåller knapparna Nästa och Bakåt för navigering. |
ShowMessageBox
Den här metoden visar en meddelanderuta som är underordnad den anpassade guidens sidredigerare. Den här medlemmen är överbelastad: Tabell 73 innehåller en lista över medlemmarna och en kort beskrivning av var och en. Fullständig information om varje medlem (inklusive syntax, användning och exempel) finns i avsnittet som motsvarar varje medlem.
Tabell 73. Överlagrade medlemmar för ShowMessagBox-metoden
Medlem | Beskrivning |
---|---|
ShowMessageBox(Strängmeddelande, Sträng bildtext, MessageBoxImage-ikon) | Visar en meddelanderuta med en ikon och en OK-knapp |
ShowMessageBox(strängmeddelande, sträng bildtext, MessageBoxButton-knapp, MessageBoxImage-ikon) | Visar en meddelanderuta med en ikon och olika möjliga kombinationer av knappar |
ShowMessageBox(undantagsfel) | Visar en meddelanderuta som innehåller information om ett undantag och har en OK-knapp |
ShowMessageBox(Strängmeddelande, Sträng bildtext, MessageBoxImage-ikon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
Den här metoden visar en meddelanderuta med en OK-knapp . Se Tabell 74.
Tabell 74. Parametrar för metoden ShowMessageBox(String message, String bildtext, MessageBoxImage)
Parameter | Beskrivning |
---|---|
meddelande | Meddelandet som ska visas i meddelanderutans innehållsområde |
bildtext | Texten som ska visas i namnlisten i dialogrutan |
ikon | Den typ av ikon som ska visas i meddelanderutan |
ShowMessageBox(strängmeddelande, sträng bildtext, MessageBoxButton-knapp, MessageBoxImage-ikon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);
Den här metoden visar en meddelanderuta med den uppsättning knappar som du vill visa och rapporterar vilken knapp du har valt. Se Tabell 75.
Tabell 75. Parametrar för metoden ShowMessageBox(strängmeddelande, sträng bildtext, MessageBoxButton-knapp, MessageBoxImage-ikon)
Parameter | Beskrivning |
---|---|
meddelande | Meddelandet som ska visas i meddelanderutans innehållsområde |
bildtext | Texten som ska visas i namnlisten i dialogrutan |
knapp | Vilka knappar som ska visas |
ikon | Den typ av ikon som ska visas i meddelanderutan |
ShowMessageBox(undantagsfel)
void ShowMessageBox(Exception exception);
Den här metoden visar en meddelanderuta som rapporterar information om ett undantag. Den här meddelanderutan har en enda OK-knapp . Se Tabell 76.
Tabell 76. Parametrar för metoden ShowMessageBox(undantagsfel)
Parameter | Beskrivning |
---|---|
undantag | Det undantag som du vill rapportera (i dialogrutan används undantag. Meddelande som innehåll.) |
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
Den här metoden skapar en ny dialogruta, vars innehåll är den text som du anger i parametern viewType . UDI-Designer skapar en ny instans av den här typen och omsluter den i en dialogruta med knapparna OK och Avbryt.
Du skickar data till din kontroll med hjälp av parametern dialogPayload. SampleEditor-lösningen i SDK-katalogen har ett exempel på hur du använder den här funktionen.
ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
Med den här metoden kan du visa en anpassad redigerare i en dialogruta som innehåller knapparna Nästa och Bakåt för navigering. Microsoft har inte angett något exempel för hur du använder den här metoden.
Referens för konfigurationsfilschema för UDI-guiden
Den här filen används av UDI-guiden och konfigureras av UDI-guiden Designer. Den här filen används för att konfigurera:
Guidesidor som visas i UDI-guiden
Sekvensen för guidesidorna i UDI-guiden
Inställningar för fälten på varje guidesida
Tillgängliga stagegroups i UDI-guiden Designer
Tillgängliga faser i varje distributionsguide i UDI-guiden Designer
77 visar elementen i konfigurationsfilen för UDI-guiden och deras beskrivningar. Wizard-elementet är rotnoden för den här referensen.
Tabell 77. Element i konfigurationsfilen för UDI-guiden och deras beskrivningar
Elementnamn | Beskrivning |
---|---|
Data | Grupper de enskilda DataItem-elementen i ett sidelement och namnges av attributet Namn. |
DataItem | Grupper enskilda Setter-element i ett sidelement. Du kan skapa hierarkiska data genom att inkludera ett eller flera dataelement i ett DataItem-element . Varje DataItem-element representerar ett enskilt objekt. En lista över tillgängliga enheter kan till exempel ha en DataItem för visningsnamnet och ett annat DataItem-element för motsvarande enhetsbeteckning. |
Standard | Anger ett standardvärde för det fält som anges i det överordnade elementet Fält eller RadioGroup . Standardvärdet är inställt på det värde som har hakparerats av det här elementet. |
DLL | Anger en DLL som ska läsas in och refereras av UDI-guiden och UDI-guiden Designer. |
DLL:er | Grupper de enskilda DLL-elementen. |
Fel | Anger en möjlig felkod som en uppgift kan returnera. Värdet för felkoden returneras av aktivitetens HRESULT och fångas av det här elementet för att tillhandahålla mer specifik felinformation. |
ExitCode | Anger en möjlig slutkod för en aktivitet. Slutkoderna är returkoder som aktiviteten förväntar sig. Skapa ett ExitCode-element för varje möjlig slutkod. Annars kan du ange en asterisk (*) i attributet Value för att hantera returkoder som inte anges i andra ExitCode-element . |
ExitCodes | Grupper en uppsättning exitcode- och felelement för ett aktivitetselement eller ett felelement. |
Fält | Anger en instans av en kontroll i ett sidelement som används för att anpassa med XML. Alla kontroller tillåter inte anpassning med XML – endast kontroller som använder elementet Fält . |
Fält | Grupper de enskilda fältelementen i ett sidelement. |
Fil | Anger källan och målet för en filkopieringsåtgärd med aktivitetstypen Microsoft.Wizard.CopyFilesTask . Du kan inkludera ett separat filelement för att kopiera mer än en fil i en enda uppgift. |
Sida | Anger en instans av en sida och innehåller alla konfigurationsinställningar för sidan. |
PageRef | Anger en referens till en instans av en sida i en fas i en StageGroup. |
Sidor | Grupper de enskilda sidelementen. |
RadioGroup | Anger en grupp med alternativknappar i ett Fält-element . |
StageGroup | Anger en grupp med en eller flera faser. |
StageGroups | Grupper en uppsättning fasgrupper i en konfigurationsfil för UDI-guiden. |
Setter | Anger en egenskapsinställning för ett värde för en egenskap med namnet i egenskapen Egenskap . |
Fas | Anger en fas i en StageGroup och innehåller ett eller flera PageRef-element . |
Format | Grupper de enskilda setterelementen som konfigurerar UDI-guidens utseende och känsla, inklusive rubriken som visas överst i guiden och banderollsbilden som visas i UDI-guiden. |
Uppgift | Anger en aktivitet som ska köras på sidan som anges i det överordnade sidelementet . |
Uppgifter | Grupper en uppsättning uppgifter för ett sidelement. |
Validerare | Anger en validerare för fältkontrollen som anges i det överordnade fältelementet . |
Trollkarl | Anger roten för alla andra element. |
Data
Det här elementet grupperar de enskilda DataItem-elementen i ett sidelement och namnges av attributet Namn .
Elementinformation
Tabell 78 innehåller information om dataelementet .
Tabell 78. Information om dataelement
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje sidelement (det här elementet är valfritt.) |
Överordnade element | Sida, DataItem |
Innehåll | DataItem, Setter |
Elementattribut
Tabell 79 visar attributen för dataelementet och innehåller en beskrivning av var och en.
Tabell 79. Attribut och motsvarande värden för dataelementet
Attribut | Beskrivning |
---|---|
Namn | Anger namnet på dataelementet |
Anmärkningar
Med attributet Namn kan kod hämta en specifik uppsättning data.
Exempel
Ingen.
DataItem
Det här elementet grupperar enskilda Setter-element i ett sidelement . Du kan skapa hierarkiska data genom att inkludera ett eller flera dataelement i ett DataItem-element . Varje DataItem-element representerar ett enskilt objekt. En lista över tillgängliga enheter kan till exempel ha en DataItem för visningsnamnet och ett annat DataItem-element för motsvarande enhetsbeteckning.
Elementinformation
Tabell 80 innehåller information om DataItem-elementet .
Tabell 80. DataItem-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje dataelement (det här elementet är valfritt.) |
Överordnade element | Data |
Innehåll | Data, Setter |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
Ingen.
Standard
Det här elementet anger ett standardvärde för fältet som anges i det överordnade elementet Fält eller RadioGroup . Standardvärdet är inställt på det värde som elementet har hakparenteser.
Elementinformation
Tabell 81 innehåller information om standardelementet .
Tabell 81. Standardelementinformation
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i ett Fält - eller RadioGroup-element (det här elementet är valfritt.) |
Överordnade element | Fält, RadioGroup |
Innehåll | Kan vara valfritt välformat XML-innehåll men är vanligtvis standardtext |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
I följande exempel är standardvärdet för fältet Tidszon inställt på "Pacific Standard Time":
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
DLL
Det här elementet anger en DLL för UDI-guiden och UDI-guiden Designer att läsa in och referera till.
Elementinformation
Tabell 82 innehåller information om DLL-elementet .
Tabell 82. Information om DLL-element
Attribut | Värde |
---|---|
Antal förekomster | En eller flera i DLL-elementet |
Överordnat element | DLL:er |
Innehåll | Inget innehåll tillåts för det här elementet |
Elementattribut
Tabell 83 visar attributen för DLL-elementet och innehåller en beskrivning av var och en.
Tabell 83. Attribut och motsvarande värden för DLL-elementet
Attribut | Beskrivning |
---|---|
Namn | Anger namnet på DLL-filen för UDI-guiden och UDI-guiden Designer att referera till |
Anmärkningar
Ingen.
Exempel
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
DLL:er
Det här elementet grupperar de enskilda DLL-elementen .
Elementinformation
Tabell 84 innehåller information om DLL-elementet .
Tabell 84. Information om DLL-element
Attribut | Värde |
---|---|
Antal förekomster | Ett |
Överordnade element | Trollkarl |
Innehåll | DLL |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Fel
Det här elementet anger en möjlig felkod som en uppgift kan returnera. Värdet för felkoden returneras och fångas av aktivitetens HRESULT för att ge mer specifik felinformation.
Elementinformation
Tabell 85 innehåller information om elementet Error .
Tabell 85. Information om felelement
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje ExitCode-element (det här elementet är valfritt.) |
Överordnade element | ExitCodes |
Innehåll | Valfritt välformat XML-innehåll |
Elementattribut
Tabell 86 visar attributen för elementet Error och innehåller en beskrivning av var och en.
Tabell 86. Information om felelement
Attribut | Beskrivning |
---|---|
Tillstånd | Anger returtillståndet för en aktivitet som påträffade ett fel. Vanligtvis anges värdet för det här attributet till Fel. Det här värdet visas i kolumnen Tillstånd på guidesidan i UDI-guiden. |
Text | Anger den beskrivande texten om felvillkoret som aktiviteten påträffade. |
Typ | Anger om det här elementet representerar ett fel, en varning eller ett lyckat resultat. Värdet som anges iTyp måste vara unikt i ett ExitCodes-element . Följande är giltiga värden för det här elementet: - **0.**Elementet representerar ett lyckat resultat. - 1. Elementet representerar en varning. - -1. Elementet representerar ett fel. |
Värde | Anger värdet för den kod som aktiviteten returnerade som ett numeriskt värde. Om du anger värdet för en asterisk (*) anger du standardelementet för returkoder som inte visas i andra felelement . |
Anmärkningar
Ingen.
Exempel
Ingen.
ExitCode
Det här elementet anger en möjlig slutkod för en aktivitet. Slutkoderna är returkoder som aktiviteten förväntar sig. Skapa ett ExitCode-element för varje möjlig slutkod. Annars kan du ange en asterisk (*) i attributet Value för att hantera returkoder som inte anges i andra ExitCode-element .
Elementinformation
Tabell 87 innehåller information om ExitCode-elementet .
Tabell 87. Information om ExitCode-element
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje ExitCodes-element (det här elementet är valfritt.) |
Överordnade element | ExitCodes |
Innehåll | Minst ett ExitCode-element och noll eller fler felelement |
Elementattribut
Tabell 88 visar attributen för ExitCode-elementet och innehåller en beskrivning av var och en.
Tabell 88. Attribut och motsvarande värden för ExitCode-elementet
Attribut | Beskrivning |
---|---|
Tillstånd | Anger returtillståndet för en aktivitet. Värdet för det här attributet visas i kolumnen Delstat på motsvarande guidesida i UDI-guiden. Du kan använda alla värden för det här attributet som är meningsfulla för din uppgift. Följande är vanliga värden som används för det här attributet: -Framgång -Varning -Fel |
Text | Anger den beskrivande texten om aktivitetens befintliga kod. |
Typ | Anger om det här elementet representerar ett fel, en varning eller ett lyckat resultat. Värdet som anges i typen måste vara unikt i ett ExitCodes-element . Följande är giltiga värden för det här elementet: - 0. Elementet representerar en framgång. - 1. Elementet representerar en varning. - -1. Elementet representerar ett fel. |
Värde | Anger värdet för den kod som aktiviteten returnerade som ett numeriskt värde. Om du anger värdet för en asterisk (*) anger du standardelementet för returkoder som inte visas i andra ExitCode-element . |
Anmärkningar
Ingen.
Exempel
Ingen.
ExitCodes
Det här elementet grupperar en uppsättning exitcode - och felelement för en aktivitet eller ett felelement .
Elementinformation
Tabell 89 innehåller information om exitCodes-elementet .
Tabell 89. ExitCodes-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | En i varje aktivitetselement |
Överordnade element | Uppgift |
Innehåll | Fel, ExitCode |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
Ingen.
Fält
Det här elementet anger en instans av en kontroll i ett sidelement som används för att anpassa med XML. Alla kontroller tillåter inte anpassning med XML – endast kontroller som använder elementet Fält .
Elementinformation
Tabell 90 innehåller information om elementet Fält .
Tabell 90. Fältelementinformation
Attribut | Värde |
---|---|
Antal förekomster | Noll eller fler i varje fältelement (det här elementet är valfritt.) |
Överordnade element | Fält |
Innehåll | Standard, validator |
Elementattribut
Tabell 91 visar attributen för elementet Fält och innehåller en beskrivning av var och en.
Tabell 91. Attribut och motsvarande värden för fältelementet
Attribut | Beskrivning |
---|---|
Aktiverat | Anger om fältet är aktiverat för användarindata (Attributet kan anges till Sant eller Falskt.) |
Namn | Anger namnet på fältet |
Sammanfattning | Anger den beskrivande text som visas på sidan Sammanfattningsguide för det värde som det här fältet anger |
VarName | Anger namnet på aktivitetssekvensvariabeln som lästs eller konfigurerats med hjälp av fältet i det överordnade fältelementet |
Anmärkningar
Det här elementet kan innehålla noll eller fler standardelement och noll eller fler valideringselement .
Exempel
Ingen.
Fält
Det här elementet grupperar de enskilda fältelementen i ett sidelement .
Elementinformation
Tabell 92 innehåller information om elementet Fält .
Tabell 92. Elementinformation för fält
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje sidelement (det här elementet är valfritt.) |
Överordnade element | Sida |
Innehåll | Fält, RadioGroup |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
Ingen.
Fil
Det här elementet anger källan och målet för en filkopieringsåtgärd med aktivitetstypen Microsoft.Wizard.CopyFilesTask . Du kan inkludera ett separat filelement för att kopiera mer än en fil i en enda uppgift.
Elementinformation
Tabell 93 innehåller information om filelementet .
Tabell 93. Information om filelement
Attribut | Värde |
---|---|
Antal förekomster | En eller flera för varje aktivitet som har en aktivitetstyp av Microsoft.Wizard.CopyFilesTask |
Överordnade element | Uppgift |
Innehåll | Ingen |
Elementattribut
Tabell 94 visar attributen för filelementet och innehåller en beskrivning av var och en.
Tabell 94. Attribut och motsvarande värden för filelementet
Attribut | Beskrivning |
---|---|
Dest | Anger den fullständigt kvalificerade eller relativa sökvägen till målmappen för filen som anges i källattributet . Miljövariabler tillåts som en del av sökvägen. |
Source | Anger den fullständigt kvalificerade eller relativa sökvägen till källfilen som aktivitetstypen Microsoft.Wizard.CopyFilesTask kopierar. Det här attributet stöder jokertecken så att flera filer kan kopieras med ett enda filelement . Miljövariabler tillåts som en del av sökvägen. |
Anmärkningar
Ingen.
Exempel
Ingen.
Sida
Det här elementet anger en instans av en sida och innehåller alla konfigurationsinställningar för sidan.
Elementinformation
Tabell 95 innehåller information om sidelementet .
Tabell 95. Information om sidelement
Attribut | Värde |
---|---|
Antal förekomster | En eller flera i varje pages-element |
Överordnade element | Sidor |
Innehåll | Data, Fält, Setter, Uppgifter |
Elementattribut
Tabell 96 visar attributen för sidelementet och innehåller en beskrivning av var och en.
Tabell 96. Attribut och motsvarande värden för sidelementet
Attribut | Beskrivning |
---|---|
DisplayName | Anger det användarvänliga namnet på den guidesida som visas i UDI-guiden Designer. Det här namnet är vanligtvis mer beskrivande än attributet Namn . |
Namn | Anger namnet på den guidesida som visas i UDI-guiden Designer. |
Typ | Anger vilken typ av guidesida som direkt relaterar till en specifik guidesida i en DLL. |
Anmärkningar
Ingen.
Exempel
Ingen.
PageRef
Det här elementet anger en referens till en instans av en sida i en fas i en StageGroup.
Elementinformation
Tabell 97 innehåller information om PageRef-elementet .
Tabell 97. PageRef-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | Ett eller flera i ett stegelement |
Överordnade element | Fas |
Innehåll | Ingen |
Elementattribut
Tabell 98 visar attributet för PageRef-elementet och innehåller en beskrivning av det.
Tabell 98. Attribut och motsvarande värden för PageRef-elementet
Attribut | Beskrivning |
---|---|
Sida | Anger instansen av en sida i en fas i en StageGroup. Ange det här värdet till attributet Namn för ett sidelement . |
Anmärkningar
Ingen.
Exempel
Ingen.
Sidor
Det här elementet grupperar de enskilda sidelementen .
Elementinformation
Tabell 99 innehåller information om elementet Sidor .
Tabell 99. Information om sidelement
Attribut | Värde |
---|---|
Antal förekomster | Ett |
Överordnade element | Trollkarl |
Innehåll | Sida |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<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
Det här elementet anger en grupp med alternativknappar med i ett fältelement .
Elementinformation
Tabell 100 innehåller information om RadioGroup-elementet .
Tabell 100. RadioGroup-elementinformation
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i ett Fält-element (det här elementet är valfritt.) |
Överordnade element | Fält |
Innehåll | Standard |
Elementattribut
Tabell 101 visar attributen för RadioGroup-elementet och innehåller en beskrivning av var och en.
Tabell 101. Attribut och motsvarande värden för RadioGroup-elementet
Attribut | Beskrivning |
---|---|
Låst | Anger om gruppen med alternativknappar är aktiverad för användarindata. Attributet kan anges till: - Sant. Anger att alternativknapparna är inaktiverade och att användarna inte kan välja en alternativknapp i gruppen. - Falskt. Anger att alternativknapparna är aktiverade och att användarna kan välja en alternativknapp i gruppen. |
Namn | Anger namnet på alternativalternativgruppen. |
Anmärkningar
Ingen.
Exempel
Ingen.
StageGroup
Det här elementet anger en distributionsstegsgrupp.
Elementinformation
Tabell 102 innehåller information om stagegroup-elementet .
Tabell 102. Elementinformation för StageGroup
Attribut | Värde |
---|---|
Antal förekomster | Ett eller flera i ett StageGroups-element |
Överordnade element | StageGroups |
Innehåll | Fas |
Elementattribut
Tabell 103 visar attributen för stagegroup-elementet och en beskrivning av attributet.
Tabell 103. Attribut och motsvarande värden för StageGroup-elementet
Attribut | Beskrivning |
---|---|
DisplayName | Anger det användarvänliga namnet på den fasgrupp som visas i UDI-guiden Designer. Det här namnet är vanligtvis mer beskrivande än attributet Namn . |
Anmärkningar
Ingen.
Exempel
Ingen.
StageGroups
Det här elementet grupperar en uppsättning fasgrupper i en konfigurationsfil för UDI-guiden.
Elementinformation
Tabell 104 innehåller information om elementet StageGroups .
Tabell 104. Elementinformation för StageGroups
Attribut | Värde |
---|---|
Antal förekomster | Noll eller ett i ett guideelement |
Överordnade element | Trollkarl |
Innehåll | StageGroup |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
Ingen.
Setter
Det här elementet anger en egenskapsinställning för värdet för en egenskap som heter i egenskapen Egenskap .
Elementinformation
Tabell 105 innehåller information om Setter-elementet .
Tabell 105. Information om Setter-element
Attribut | Värde |
---|---|
Antal förekomster | Noll eller mer i varje överordnat element (det här elementet är valfritt.) |
Överordnade element | Data, DataItem, Page, Style, Task, Validator |
Innehåll | Innehåller ett strängvärde i egenskapsattributet |
Elementattribut
Tabell 106 visar attributet för Setter-elementet och innehåller en beskrivning av det.
Tabell 106. Attribut och motsvarande värden för Setter-elementet
Attribut | Beskrivning |
---|---|
Egenskap | Anger det egenskapsnamn som anges. Egenskapsnamnet är inställt på det värde som det här attributet har parenteser. |
Anmärkningar
Ingen.
Exempel
Ingen.
Fas
Det här elementet anger en fas i en StageGroup och innehåller ett eller flera PageRef-element .
Elementinformation
Tabell 107 innehåller information om elementet Stage .
Tabell 107. Information om faselement
Attribut | Värde |
---|---|
Antal förekomster | Ett eller flera i ett StageGroup-element |
Överordnade element | StageGroup |
Innehåll | PageRef |
Elementattribut
Tabell 108 visar attributen för elementet Stage och innehåller en beskrivning av var och en.
Tabell 108. Attribut och motsvarande värden för faselementet
Attribut | Beskrivning |
---|---|
DisplayName | Anger det användarvänliga namnet på den guidesida som visas i UDI-guiden Designer. Det här namnet är vanligtvis mer beskrivande än attributet Namn . |
Namn | Anger namnet på fasen. Värdet för det här elementet används när du startar UDI-guiden med kommandoradsparametern /stage: name . |
Anmärkningar
Ingen.
Exempel
Ingen.
Format
Det här elementet grupperar de enskilda Setter-elementen som konfigurerar UDI-guidens utseende och känsla, inklusive rubriken som visas överst i guiden och banderollsbilden som visas i UDI-guiden.
Elementinformation
Tabell 109 innehåller information om elementet Style.
Tabell 109. Information om formatelement
Attribut | Värde |
---|---|
Antal förekomster | Ett |
Överordnade element | Trollkarl |
Innehåll | Setter |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<Style>
<Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
<Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>
Uppgift
Det här elementet anger en aktivitet som ska köras på sidan som anges i det överordnade sidelementet .
Elementinformation
Tabell 110 innehåller information om elementet Aktivitet .
Tabell 110. Information om aktivitetselement
Attribut | Värde |
---|---|
Antal förekomster | Ett eller flera i ett aktivitetselement |
Överordnade element | Uppgifter |
Innehåll | ExitCodes, File, Setter |
Elementattribut
Tabell 111 visar attributen för aktivitetselementet och innehåller en beskrivning av var och en.
Tabell 111. Attribut och motsvarande värden för aktivitetselementet
Attribut | Beskrivning |
---|---|
DependsOn | Anger om aktiviteten är beroende av en annan aktivitet. Värdet för det här attributet är inställt på attributet Namn för ett annat aktivitetselement . Not: Det går inte att konfigurera det här attributet med hjälp av UDI-guiden Designer. Du kan dock lägga till det här attributet manuellt i ett aktivitetselement genom att direkt ändra .xml-filen. |
DisplayName | Anger det användarvänliga namnet på uppgiften som visas i UDI-guiden Designer. Det här namnet är vanligtvis mer beskrivande än attributet Namn . |
Namn | Anger namnet på aktiviteten. Det här namnet måste vara unikt. |
Typ | Anger aktivitetstypen för aktiviteten som ska köras, vilket definieras i DLL-filen som innehåller aktiviteten. |
Anmärkningar
Ingen.
Exempel
Ingen.
Uppgifter
Det här elementet grupperar en uppsättning uppgifter för ett sidelement .
Elementinformation
Tabell 112 innehåller information om elementet Uppgifter .
Tabell 112. Information om aktivitetselement
Attribut | Värde |
---|---|
Antal förekomster | Noll eller ett i varje sidelement (det här elementet är valfritt.) |
Överordnade element | Sida |
Innehåll | Uppgift |
Elementattribut
Tabell 113 visar attributen för elementet Uppgifter och innehåller en beskrivning av var och en.
Tabell 113. Attribut och motsvarande värden för aktivitetselementet
Attribut | Beskrivning |
---|---|
NameTitle | Anger bildtext som visas överst i kolumnen som innehåller namnet på aktiviteterna på lämplig guidesida. |
StatusTitle | Anger bildtext som visas överst i kolumnen som innehåller status för aktiviteterna på lämplig guidesida. |
Anmärkningar
Ingen.
Exempel
Ingen.
Validerare
Det här elementet anger en validerare för fältkontrollen som anges i det överordnade fältelementet .
Elementinformation
Tabell 114 innehåller information om elementet Validator .
Tabell 114. Information om validatorelement
Attribut | Värde |
---|---|
Antal förekomster | Noll eller ett i ett fältelement |
Överordnade element | Fält |
Innehåll | Setter |
Elementattribut
Tabell 115 visar attributet för elementet Validator och innehåller en beskrivning av det.
Tabell 115. Attribut och motsvarande värden för validatorelementet
Attribut | Beskrivning |
---|---|
Typ | Anger typen för validatorn, som definieras i den DLL som innehåller validatorn |
Anmärkningar
Ingen.
Exempel
Ingen.
Trollkarl
Det här elementet anger roten för alla andra element.
Elementinformation
Tabell 116 innehåller information om elementet Guide .
Tabell 116. Information om guideelement
Attribut | Värde |
---|---|
Antal förekomster | Ett |
Överordnade element | Ingen |
Innehåll | DLL:er, sidor, mellangrupper, formatmallar |
Elementattribut
Det här elementet har inga attribut.
Anmärkningar
Ingen.
Exempel
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>