Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die benutzergesteuerte Installation (User Driven Installation, UDI) vereinfacht die Bereitstellung von Windows-Clientbetriebssystemen® wie Windows 8.1 auf Computern mithilfe des Features Betriebssystembereitstellung (OSD) im Microsoft® System Center 2012 R2 Konfigurations-Manager. UDI ist Teil des Microsoft Deployment Toolkit (MDT).
Einführung
In der Regel müssen Sie beim Bereitstellen von Betriebssystemen mithilfe des OSD-Features alle erforderlichen Informationen für die Bereitstellung des Betriebssystems bereitstellen. Die Informationen werden in Konfigurationsdateien oder in Datenbanken (z. B. in der CustomSettings.ini-Datei oder in der MDT-Datenbank [MDT DB]) konfiguriert. Sie müssen alle Konfigurationseinstellungen angeben, bevor Sie mit der Bereitstellung beginnen können.
UDI bietet eine assistentengesteuerte Schnittstelle, mit der Sie Konfigurationsinformationen unmittelbar vor der Bereitstellung bereitstellen können. Dieses Verhalten ermöglicht es Ihnen, generische OSD-Tasksequenzen zu erstellen und dann computerspezifische Informationen zum Zeitpunkt der Bereitstellung bereitzustellen, was eine größere Flexibilität im Bereitstellungsprozess ermöglicht.
Zielgruppe
Dieses Handbuch richtet sich an Entwickler, die benutzerdefinierte Assistentenseiten für den UDI-Assistenten und Editoren für benutzerdefinierte Assistentenseiten für den UDI-Assistenten-Designer erstellen. In diesem Leitfaden wird davon ausgegangen, dass Sie mit der Entwicklung von Windows-Anwendungen vertraut sind:
C++, das zum Erstellen benutzerdefinierter Assistentenseiten verwendet wird
Microsoft .NET Framework, das zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet wird
Windows Presentation Foundation (WPF) zur Erstellung benutzerdefinierter Assistentenseiten-Editoren
Von WPF unterstützte Sprachen wie C#, C++ oder Microsoft Visual Basic® .NET, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet werden
Informationen zu diesem Handbuch
Dieses Handbuch enthält die erforderlichen Referenzinformationen, die Ihnen helfen, UTI für Ihre Organization anzupassen. In diesem Handbuch werden keine administrativen oder betrieblichen Themen behandelt, wie z. B. die Installation von MDT (einschließlich UDI), das Konfigurieren von UDI zum Bereitstellen von Betriebssystemen und Anwendungen oder das Ausführen von Bereitstellungen mithilfe des UDI-Assistenten. Weitere Informationen zu diesen Themen finden Sie in den UDI-Themen unter Verwenden des Microsoft Deployment Toolkit, das in MDT enthalten ist.
Übersicht über die UDI-Entwicklung
Mit der UDI-Entwicklung können Sie die Funktionen erweitern, die UDI bereitstellt. In der Regel ist die UDI-Entwicklung erforderlich, wenn Sie zusätzliche Informationen sammeln möchten, die der UDI-Bereitstellungsprozess verbraucht. Diese zusätzlichen Informationen werden in der Regel als Tasksequenzvariablen gespeichert, die die Tasksequenzschritte in einer UDI-Tasksequenz im Konfigurations-Manager lesen.
UDI-Architektur
Das übergeordnete Ziel der UDI-Entwicklung besteht darin, benutzerdefinierte Assistentenseiten zu erstellen, die im UDI-Assistenten angezeigt werden können. Durch die Erstellung benutzerdefinierter Assistentenseiten können Sie die vorhandenen Features von UDI erweitern, um die geschäftlichen und technischen Anforderungen Ihrer organization zu erfüllen. Eine benutzerdefinierte Assistentenseite sammelt Informationen zusätzlich zu oder anstelle der Assistentenseiten, die UDI bereitstellt.
Abbildung 1 zeigt die Beziehung zwischen dem UDI-Assistenten-Designer und dem UDI-Assistenten.
Abbildung 1. Beziehung zwischen dem UDI-Assistenten und dem UDI-Assistenten-Designer
Abbildung 1: Beziehung zwischen dem UDI-Assistenten und dem UDI-Assistenten-Designer
Auf konzeptioneller Ebene umfasst die UDI-Entwicklung die Erstellung von:
Benutzerdefinierte Assistentenseiten. Assistentenseiten werden im UDI-Assistenten angezeigt und enthalten die Informationen, die zum Abschließen des Bereitstellungsprozesses erforderlich sind. Sie erstellen Assistentenseiten mit C++ in Microsoft Visual Studio®. Die benutzerdefinierten Assistentenseiten werden als DLLs implementiert, die vom UDI-Assistenten gelesen werden. Das UDI Software Development Kit (SDK) enthält ein Beispiel für das Erstellen benutzerdefinierter Assistentenseiten.
Benutzerdefinierte Assistentenseiten-Editoren. Sie verwenden Assistentenseiten-Editoren, um das Verhalten Ihrer benutzerdefinierten Assistentenseite zu konfigurieren. Die Editoren der benutzerdefinierten Assistentenseiten werden als DLLs implementiert, die vom UDI-Assistenten-Designer gelesen werden. Sie erstellen Assistentenseiten-Editoren mit:
WPF Version 4.0
Microsoft Prism Version 4.0
Microsoft Unity Application Block (Unity) Version 2.1
MDT enthält alle erforderlichen Assemblys zum Erstellen eines benutzerdefinierten Assistentenseiten-Editors zur Verwendung im UDI-Assistenten-Designer. Das UDI SDK enthält ein Beispiel für die Erstellung benutzerdefinierter Assistentenseiten-Editoren.
Darüber hinaus verwendet der UDI-Assistenten-Designer unterstützende Konfigurationsdateien des Assistentenseiten-Editors. Sie erstellen die Konfigurationsdateien für den Assistentenseiten-Editor als Teil des Prozesses zum Erstellen Ihrer benutzerdefinierten Assistentenseiten und benutzerdefinierten Assistentenseiten-Editoren. Der UDI-Assistent erstellt Designer die erforderlichen XML-Informationen in der Konfigurationsdatei des UDI-Assistenten und der entsprechenden .app-Datei.
Vorbereiten der UDI-Entwicklungsumgebung
Bevor Sie mit dem Erstellen eigener benutzerdefinierter Assistentenseiten und Assistentenseiten-Editoren beginnen, führen Sie die folgenden Schritte aus, um die UDI-Entwicklungsumgebung vorzubereiten:
Bereiten Sie die Voraussetzungen für die UDI-Entwicklungsumgebung vor, wie unter Vorbereiten der UDI-Entwicklungsumgebungsvoraussetzungen beschrieben.
Konfigurieren Sie die UDI-Entwicklungsumgebung wie unter Konfigurieren der UDI-Entwicklungsumgebung beschrieben.
Stellen Sie sicher, dass die UDI-Entwicklungsumgebung ordnungsgemäß konfiguriert ist, wie unter Überprüfen der UDI-Entwicklungsumgebung beschrieben.
Vorbereiten der Voraussetzungen für die UDI-Entwicklungsumgebung
Führen Sie die folgenden Schritte aus, um die Voraussetzungen für die UDI-Entwicklungsumgebung vorzubereiten:
Bereiten Sie die Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung vor, wie unter Vorbereiten der Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung beschrieben.
Bereiten Sie die Softwarevoraussetzungen für die UDI-Entwicklungsumgebung vor, wie unter Vorbereiten der Softwarevoraussetzungen für die UDI-Entwicklungsumgebung beschrieben.
Vorbereiten der Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung
Die Hardwareanforderungen für die UDI-Entwicklungsumgebung sind die gleichen Hardwareanforderungen wie für die Edition von Microsoft Visual Studio, die Sie verwenden. Weitere Informationen zu diesen Anforderungen finden Sie in den Systemanforderungen für jede Edition in der Visual Studio-Dokumentation.
Vorbereiten der Softwarevoraussetzungen für die UDI-Entwicklungsumgebung
Für die UDI-Entwicklungsumgebung gelten folgende Softwarevoraussetzungen:
Jedes Windows-Betriebssystem, das Visual Studio 2010 unterstützt (Windows 7 oder Windows Server ® 2008 R2 wird empfohlen.)
Sie benötigen ein Windows-Betriebssystem, das die Prozessorarchitektur unterstützt, für die Sie entwickeln möchten. Sie können die Entwicklung von 32-Bit- und 64-Bit-UDI mit einem 64-Bit-Betriebssystem durchführen. Sie führen die Entwicklung von 32-Bit-UDI nur unter 32-Bit-Betriebssystemen durch. Aus diesem Grund sollten Sie ein 64-Bit-Betriebssystem verwenden.
Hinweis
IntelItanium-Versionen (IA-64) des Windows-Betriebssystems werden für UDI-Entwicklungsumgebungen nicht unterstützt.
Weitere Informationen zu den von Visual Studio 2010 unterstützten Betriebssystemen finden Sie in den Systemanforderungen der einzelnen Editionen in der Visual Studio-Dokumentation.
Microsoft .NET Framework, Version 4.0 (erforderlich für Visual Studio 2010)
Sprache C++ (die Sprache, die zum Erweitern von UDI-Assistentenseiten verwendet wird)
Andere Sprachen, die WPF unterstützt, z. B. C#, Visual Basic .NET oder C++/Common Language Infrastructure, die zum Erweitern der UDI-Assistenten-Editoren verwendet werden Assistenten-Editoren für Designer-Assistenten
Hinweis
Der Beispielquellcode für die Editoren für die Assistentenseite des UDI-Assistenten Designer ist in C# geschrieben. Installieren Sie die Sprache C#, wenn Sie den Beispielquellcode verwenden möchten.
Konfigurieren der UDI-Entwicklungsumgebung
Wenn die Voraussetzungen für die UDI-Entwicklungsumgebung erfüllt sind, führen Sie die folgenden Schritte aus, um die UDI-Entwicklungsumgebung zu konfigurieren:
Installieren Sie Visual Studio 2010.
Stellen Sie sicher, dass Sie die Sprache C++ und alle anderen Sprachen installieren, die WPF unterstützt.
Hinweis
Der Quellcode für die Seiten des UDI-Assistenten-Designer-Editors ist in C# geschrieben. Installieren Sie die Sprache C#, wenn Sie den Beispielquellcode verwenden möchten.
Weitere Informationen zum Installieren von Visual Studio 2010 finden Sie unter Installieren von Visual Studio.
Installieren Sie MDT.
Weitere Informationen zum Installieren von MDT finden Sie im Abschnitt "Installieren oder Aktualisieren auf MDT" im MDT-Dokument Verwenden des Microsoft Deployment Toolkit.
Erstellen Sie in Windows Explorer local_folder (wobei local_folder ein Ordner auf einem lokalen Laufwerk auf dem Entwicklungscomputer ist).
Kopieren Sie den Ordner "installation_folder\SDK " nach local_folder (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben, und local_folder ein beliebiger Ordner auf einem lokalen Laufwerk auf dem Entwicklungscomputer).
Sie kopieren den SDK-Ordner an einen anderen Speicherort, da MDT im Ordner "Program Files" installiert ist, in den nicht ohne erhöhte Berechtigungen geschrieben werden kann. Wenn Sie den SDK-Ordner an einen anderen Speicherort kopieren, können Sie die Dateien im SDK-Ordner ändern, ohne dass erhöhte Berechtigungen erforderlich sind.
Kopieren Sie den Ordner installation_folder\Templates\Distribution\Tools nach local_folder (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben, und local_folder der Ordner, den Sie zuvor im Prozess erstellt haben).
Benennen Sie den Ordner local_folder\Tools in local_folder\OSDSetupWizard um(wobei local_folder der Ordner ist, den Sie zuvor im Prozess erstellt haben).
Nach Abschluss des Vorgangs sollte die Ordnerstruktur unter local_folder wie in Abbildung 2 dargestellt aussehen (wobei local_folder der Ordner ist, den Sie zuvor im Prozess erstellt haben und in der Abbildung als UDIDevelopment dargestellt wird).
Abbildung 2. Ordnerstruktur für die UDI-EntwicklungAbbildung 2: Ordnerstruktur für die UDI-Entwicklung
Überprüfen der UDI-Entwicklungsumgebung
Stellen Sie nach der Konfiguration der UDI-Entwicklungsumgebung sicher, dass die UDI-Entwicklungsumgebung ordnungsgemäß konfiguriert ist, indem Sie sicherstellen, dass die Beispielprojekte in Visual Studio 2010 ordnungsgemäß erstellt werden.
Stellen Sie sicher, dass die UDI-Entwicklungsumgebung ordnungsgemäß konfiguriert ist, indem Sie ermitteln, ob:
Das SamplePage-Projekt wird ordnungsgemäß erstellt, wie unter Überprüfen, ob das SamplePage-Projekt richtig erstellt wird
Das SampleEditor-Projekt wird ordnungsgemäß erstellt, wie unter Überprüfen, ob das SampleEditor-Projekt ordnungsgemäß erstellt wird
Überprüfen, ob das SamplePage-Projekt ordnungsgemäß erstellt wird
Das Projekt "SamplePage" enthält ein Beispiel für das Erstellen einer benutzerdefinierten Assistentenseite für den UDI-Assistenten. Weitere Informationen zum Projekt SamplePage finden Sie unter Überprüfen der Visual Studio-Projektmappe SamplePage.
So überprüfen Sie, ob das SamplePage-Projekt ordnungsgemäß erstellt wird
Starten Sie Visual Studio 2010.
Öffnen Sie das Projekt "SamplePage".
Das Projekt "SamplePage" befindet sich im Ordner "local_folder\SDK\UDI\SamplePage" ( local_folder ist der Ordner, den Sie zuvor im Prozess erstellt haben).
Klicken Sie in Visual Studio 2010 im Projektmappen-Explorer mit der rechten Maustaste auf das SamplePage-Projekt, und wählen Sie dann Eigenschaften aus.
Das Dialogfeld " Beispielseite-Eigenschaftenseiten " wird angezeigt.
Wechseln Sie im Dialogfeld " Beispielseite-Eigenschaftenseiten " zu Konfigurationseigenschaften/Debugging.
Wählen Sie in den Debugging-Eigenschaften unter Konfigurationdie Option Alle Konfigurationen aus.
Geben Sie in den Debugeigenschaften unter Befehlden Befehl $(TargetDir)\OSDSetupWizard.exe ein.
Geben Sie in den Debugging-Eigenschaften unter Arbeitsverzeichnis den Befehl $(TargetDir) ein.
Wechseln Sie im Dialogfeld " Beispielseite-Eigenschaftenseiten " zu Konfigurationseigenschaften/Buildereignisse/Postbuildereignis.
Geben Sie in den Eigenschaften des Postbuildereignisses unter Befehlszeile Folgendes ein:
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"Wählen Sie im Dialogfeld " Beispielseite-Eigenschaftenseiten " die Option "OK" aus.
Speichern Sie das Projekt.
Wählen Sie im Menü "Debuggen " die Option "Debuggen starten" aus.
Das Dialogfeld Microsoft Visual Studiowird angezeigt, das angibt, dass die Quelle veraltet ist, und fragt, ob Sie das Projekt erstellen möchten.
Klicken Sie im Dialogfeld Microsoft Visual Studioauf Ja.
Das Dialogfeld "Keine Debuginformationen " wird angezeigt, das Sie darüber informiert, dass für OSDSetupWizard.exe keine Debuginformationen verfügbar sind.
Klicken Sie im Dialogfeld "Keine Debuginformationen " auf "Ja".
Der UDI-Assistent wird geöffnet, und die Seite des benutzerdefinierten Assistenten wird angezeigt.
Stellen Sie sicher, dass Sie unter Standort auswählen einen Wert auswählen können.
Wählen Sie im Assistenten mit dem Beispielseitenformulardie Option Abbrechen aus.
Das Dialogfeld Abbruch-Assistent wird angezeigt.
Klicken Sie im Dialogfeld Abbruch-Assistentauf Ja.
Schließen Sie Visual Studio 2010.
Überprüfen, ob das SampleEditor-Projekt ordnungsgemäß erstellt wird
Das SampleEditor-Projekt enthält ein Beispiel für das Erstellen eines benutzerdefinierten Assistentenseiten-Editors für den UDI-Assistenten-Designer. Weitere Informationen zum SampleEditor-Projekt finden Sie unter Überprüfen der Visual Studio-Projektmappe SamplePage.
So überprüfen Sie, ob das SampleEditor-Projekt korrekt erstellt wird
Starten Sie Visual Studio 2010.
Öffnen Sie das SampleEditor-Projekt.
Das SampleEditor-Projekt befindet sich im Ordner local_folder\SDK\UDI\SampleEditor ( local_folder ist der Ordner, den Sie zuvor im Prozess erstellt haben).
Wählen Sie in Visual Studio 2010 im Projektmappen-Explorer das SampleEditor-Projekt aus.
Wählen Sie im Menü Projekt die Option Verweis hinzufügen aus.
Das Dialogfeld Verweis hinzufügen wird geöffnet.
Wählen Sie im Dialogfeld Verweis hinzufügen die Registerkarte Durchsuchen aus.
Navigieren Sie auf der Registerkarte "Durchsuchen" zu "installation_folder\Bin" (in dem installation_folder der Ordner ist, in dem Sie MDT installiert haben). Wählen Sie die folgenden Dateien aus, und klicken Sie dann auf "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
Hinweis
Sie können mehrere Dateien auf der Registerkarte "Durchsuchen" auswählen, indem Sie beim Auswählen der Dateien die STRG-TASTE gedrückt halten.
Wechseln Sie im Projektmappen-Explorer zu SampleEditor/References.
Stellen Sie sicher, dass keiner der Verweise Warnungen oder Fehler enthält.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das SampleEditor-Projekt, und wählen Sie dann Eigenschaften aus.
Das Dialogfeld SampleEditor-Eigenschaftenseiten wird angezeigt.
Wählen Sie im Dialogfeld SampleEditor-Eigenschaftenseiten die Registerkarte Debuggen aus.
Wählen Sie auf der Registerkarte Debuggen die Option Externes Programm starten aus.
Geben Sie unter Externes Programm starteninstallation_folder\Bin\UDIDesigner.exe ein, wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben), und wählen Sie dann OK aus.
Tipp
Sie können die Schaltfläche mit den Auslassungspunkten (...) auswählen, um zu dem Ordner zu navigieren und UDIDesigner.exe auszuwählen.
Wählen Sie im Menü "Datei " die Option "Alle speichern" aus.
Kopieren Sie die local_folder\SDK\SamplePage\SamplePage.dll.config Datei in den Ordner installation_folder\Bin\Config ( local_folder ist der Ordner, den Sie zuvor im Konfigurationsprozess auf dem Entwicklungscomputer erstellt haben, undinstallation_folder der Ordner, in dem Sie MDT installiert haben).
Wählen Sie in Visual Studio 2010 im Menü Debuggendie Option Debuggen starten aus.
Der UDI-Assistenten-Designer wird gestartet.
Wählen Sie im UDI-Assistenten-Designer im Menüband die Option Öffnen aus.
Das Dialogfeld Öffnen wird angezeigt.
Öffnen Sie im Dialogfeld "Öffnen " die Datei "local_folder\SDK\SamplePage\SamplePage\Config.xml" (wobei local_folder der Ordner ist, den Sie zuvor im Konfigurationsprozess auf dem Entwicklungscomputer erstellt haben).
Die Config.xml Datei wird geöffnet und die benutzerdefinierte StageGroup wird im Detailbereich angezeigt.
Wählen Sie im Detailbereich die Registerkarte Konfigurieren aus.
Überprüfen Sie die Konfigurationsinformationen für das Feld "Speicherort ", einschließlich der folgenden:
Schaltfläche "Entsperrt", mit der Sie das Feld "Ort" aktivieren oder deaktivieren
Standardwertfeld , in das Sie einen Standardwert eingeben, der im Feld "Position" angezeigt werden soll
Anzeigename auf der Zusammenfassungsseite, auf der Sie die Untertitel für die Informationen eingeben, die auf der Seite "Zusammenfassung" angezeigt werden
Listenfeld "Standort", das eine Liste möglicher Standorte enthält
Schließen Sie den UDI-Assistenten-Designer.
Schließen Sie Visual Studio 2010.
Überprüfen der UDI-SDK-Beispiele
Bevor Sie mit der Entwicklung beginnen, sehen Sie sich die Beispiele an, die im UDI SDK bereitgestellt werden. Verwenden Sie die Informationen in diesem Handbuch und den Quellcode in den Beispielen, um Ihre eigenen benutzerdefinierten UDI-Assistentenseiten und Assistentenseiten-Editoren zu erstellen.
Gehen Sie die UDI SDK-Beispiele durch, indem Sie Folgendes lesen:
Inhalt des SDK-Ordners, den Sie zuvor im Installationsvorgang kopiert haben, wie unter Überprüfen des Inhalts des SDK-Ordners
Beispiel für eine benutzerdefinierte UDI-Assistentenseite, wie in Überprüfen der Visual Studio-Projektmappe "SamplePage" beschrieben
Beispiel für einen benutzerdefinierten UDI-Assistentenseiten-Editor, wie in Überprüfen der Visual Studio-Lösung SampleEditor beschrieben
Überprüfen des Inhalts des SDK-Ordners
Während der Konfiguration der UDI-Entwicklungsumgebung haben Sie den SDK-Ordner aus dem Ordner, in dem Sie MDT installiert haben, in einen anderen Ordner kopiert, den Sie erstellt haben. Tabelle 1 listet die Ordner direkt unter dem SDK-Ordner auf und enthält eine kurze Beschreibung der einzelnen Ordner.
Tabelle 1. Ordner im UDI-SDK
| Folder | Dieser Ordner enthält |
|---|---|
| Beinhaltet | Die C++-Headerdateien, die zum Erstellen benutzerdefinierter Assistentenseiten für den UDI-Assistenten erforderlich sind |
| Bibliotheken | Die C++-Bibliotheksdateien, die mit Ihrer benutzerdefinierten Seite verknüpft werden; Es gibt 32-Bit- und 64-Bit-Versionen der Static Link Libraries. Hinweis: Itanium-Versionen der Bibliotheken (IA-64) sind nicht verfügbar. |
| SampleEditor | Ein Visual Studio-Projekt zum Erstellen eines benutzerdefinierten Editors, der zum Bearbeiten der Seite "SamplePage" im UDI-Assistenten-Designer verwendet wird, der in C geschrieben ist.# |
| SamplePage | Ein Visual Studio-Projekt zum Erstellen einer benutzerdefinierten UDI-Assistentenseite, die in Visual C++ geschrieben ist |
Visual Studio-Projektmappe "SamplePage" überprüfen
Bevor Sie mit dem Erstellen Ihrer benutzerdefinierten Assistentenseiten und Assistentenseiten-Editoren beginnen, führen Sie die folgenden Aufgaben aus, um die UDI-Entwicklungsumgebung vorzubereiten:
Überprüfen Sie die Phasen im Lebenszyklus einer UDI-Assistentenseite, wie unter Überprüfen des Lebenszyklus der Assistentenseite beschrieben.
Überprüfen Sie die Visual Studio-Lösung für das SamplePage-Beispiel im UDI-SDK, wie unter Überprüfen des Beispiels "SamplePage" beschrieben.
Lebenszyklus der Seite "Assistent" überprüfen
Eine UDI-Assistentenseite verfügt über Methoden, die jeder Phase (oder Phase) des Lebenszyklus der Seite entsprechen. Im Rahmen der Erstellung Ihrer benutzerdefinierten Assistentenseite müssen Sie diese Methoden mit Ihrem Code überschreiben. Tabelle 2 listet die Methoden auf, die Sie außer Kraft setzen müssen, und enthält eine kurze Beschreibung der einzelnen Methoden, einschließlich der Verwendungszeiten der Methode im Lebenszyklus der Assistentenseite.
Tabelle 2. Methoden in einem Lebenszyklus der Assistentenseite
| Methode | Beschreibung |
|---|---|
| OnWindowCreated | Diese Methode wird einmal aufgerufen, nachdem das Fenster der Seite erstellt wurde. Schreiben Sie für diese Methode Code, der die Seite zum ersten Mal initialisiert und nur einmal ausgeführt werden muss. Verwenden Sie diese Methode beispielsweise, um Felder zu initialisieren oder Konfigurationsinformationen aus den Setter-Elementen in der UDI-Assistenten-Konfigurationsdatei zu lesen. |
| OnWindowShown | Diese Methode wird jedes Mal aufgerufen, wenn die Seite im UDI-Assistenten angezeigt wird. Er wird aufgerufen, wenn die Seite zum ersten Mal angezeigt wird und jedes Mal, wenn Sie im Assistenten zur Seite navigieren, indem Sie Weiter oder Zurück auswählen. Schreiben Sie für diese Methode Code, der die anzuzeigende Seite vorbereitet, z. B. das Lesen von Speichervariablen, Tasksequenzvariablen oder Umgebungsvariablen, und aktualisieren Sie die Seite dann basierend auf Änderungen an diesen Variablen. |
| OnCommonControlEvent | Diese Methode kann jedes Mal aufgerufen werden, wenn die Assistentenseite angezeigt wird und eine WM_NOTIFY Nachricht von einem untergeordneten Element empfängt (in der Regel übliche Steuerelemente). Schreiben Sie für diese Methode Code, der basierend auf der Benachrichtigungsmeldung WM_NOTIFY behandelt. Sie können z. B. auf Ereignisse eines allgemeinen Steuerelements reagieren, z. B. auf ausgewählte oder doppelklickende Ereignisse für ein TreeView-Steuerelement . |
| OnUnhandledEvent | Diese Methode wird jedes Mal aufgerufen, wenn eine unbehandelte Fensternachricht für Ihre Assistentenseite auftritt. Diese Methode bietet die Möglichkeit, diese ansonsten unbehandelten Fensternachrichten abzufangen und zu verarbeiten. Schreiben Sie für diese Methode Code, der die Fenstermeldungen behandelt, die für Ihre Assistentenseite relevant sind. In der Regel müssen Sie diese Methode nicht außer Kraft setzen. |
| OnNextSelected | Diese Methode wird aufgerufen, wenn Sie im Assistenten "Weiter" auswählen. Schreiben Sie für diese Methode Code, der alle erforderlichen Aktionen ausführt, bevor Sie zur nächsten Assistentenseite wechseln, z. B. eine Überprüfung, die lange dauern kann. Wenn die Überprüfung fehlschlägt, können Sie die nächste Anforderung abbrechen und eine Meldung anzeigen. |
| OnWindowHidden | Diese Methode wird jedes Mal aufgerufen, wenn die Seite ausgeblendet wird, wenn die vorherige oder die nächste Seite des Assistenten angezeigt wird. Schreiben Sie für diese Methode Code, der Aktionen ausführt, bevor die Seite ausgeblendet wird, bevor eine andere Seite angezeigt wird. In der Regel müssen Sie diese Methode nicht außer Kraft setzen. |
Sehen Sie sich das Beispiel "SamplePage" an.
Sehen Sie sich das Beispiel "SamplePage" anhand der folgenden Liste an, die die Abfolge von Ereignissen während des Lebenszyklus der Assistentenseite des Beispiels "SamplePage" darstellt:
Der UDI-Assistent OSDSetupWizard.exe liest die Konfigurationsinformationen aus der UDI-Assistenten-Konfigurationsdatei im Beispiel (die Config.xml-Datei), wie in Schritt 1 beschrieben: Der UDI-Assistent (OSDSetupWizard.exe) liest die Config.xml Datei.
Der UDI-Assistent lädt die DLLs, die für jede Assistentenseite in der Konfigurationsdatei des UDI-Assistenten erforderlich sind, wie in Schritt 2 beschrieben: Der UDI-Assistent lädt die DLL für die benutzerdefinierte Assistentenseite.
Der UDI-Assistent zeigt die benutzerdefinierte Assistentenseite an und ermöglicht die gewünschte Steuerelementinteraktion, wie in Schritt 3 beschrieben: Der UDI-Assistent zeigt die Seite des benutzerdefinierten Assistenten an.
Wenn die benutzerdefinierte Assistentenseite die Informationen gesammelt hat, führen Sie alle erforderlichen Aufgaben aus, bevor Sie Weiter auswählen, um mit dem nächsten Assistenten fortzufahren, wie in Schritt 4 beschrieben: Die Schaltfläche "Weiter" wird auf der Seite des benutzerdefinierten Assistenten ausgewählt.
Schritt 1: Der UDI-Assistent (OSDSetupWizard.exe) liest die Config.xml Datei
Wenn der UDI-Assistent (OSDSetupWizard.exe) gestartet wird, liest er standardmäßig die Konfigurationsdatei des UDI-Assistenten, bei der es sich um die UDIWizard_Config.xml Datei handelt – die primäre Konfigurationsdatei für den UDI-Assistenten.
Hinweis
Im Beispiel wird die Config.xml Datei als Konfigurationsdatei verwendet. In MDT ist die Standardkonfigurationsdatei die UDIWizard_Config.xml Datei, die sich im Ordner "Skripts" im MDT Files-Paket für die Konfiguration befindet.
Sie können die vom UDI-Assistenten verwendete Standardkonfigurationsdatei außer Kraft setzen, indem Sie den Tasksequenzschritt des UDI-Assistenten so ändern, dass der Parameter /definition verwendet wird. Weitere Informationen zum Überschreiben der Standardkonfigurationsdatei, die vom UDI-Assistenten verwendet wird, finden Sie unter "Außerkraftsetzen der Konfigurationsdatei, die vom UDI-Assistenten verwendet wird".
Die Elemente der obersten Ebene in der Datei Config.xml sind die
-
Weitere Informationen zum Schema der UDI-Assistenten-Konfigurationsdatei und zu jedem dieser Elemente finden Sie unter UDI-Assistenten-Konfigurationsdatei-Schemareferenz.
Der UDI-Assistent durchsucht das DLL-Element nach den .dll Dateien, die geladen werden sollen. Im Beispiel werden zwei .dll Dateien aufgelistet: SamplePage.dll und SharedPages.dll. Diese .dll Dateien müssen sich im selben Ordner wie OSDSetupWizard.exe befinden – im Ordner Tools\platform (wobei Platform für die 32-Bit-Version x86 oder für die 64-Bit-Version x64 ist).
Der UDI-Assistent scannt das Pages-Element auf der Suche nach den definierten Seiten. Im Beispiel sind zwei Seiten definiert: Benutzerdefiniert und SummaryPage. Das Type-Attributdes Page-Elements wird in der Datei PageClassIDs.h definiert und definiert eindeutig den Typ Ihrer benutzerdefinierten Seite.
Im Beispiel ist Microsoft.SamplePage.LocationPage der definierte Typ. Ersetzen Sie Ihre benutzerdefinierte Seite durch Folgendes, um mögliche Konflikte mit anderen Seiten zu vermeiden, die Sie möglicherweise in Zukunft erstellen:
Name Ihrer organization anstelle von Microsoft.
Ihr Projektname anstelle von "SamplePage".
Ihr benutzerdefinierter Assistentenseitenname anstelle von LocationPage.
Schritt 2: Der UDI-Assistent lädt die DLL für die benutzerdefinierte Assistentenseite
Wenn der UDI-Assistent Ihre DLL lädt, ruft er die Funktion "RegisterFactorys " auf, die in Ihrer .dll Datei implementiert werden muss. Im Beispiel ist diese Funktion in der Datei dllmain.ccp implementiert. Jede Assistentenseite, die Sie erstellen, muss die Funktion RegisterFactories implementieren.
Die Funktion RegisterFactories wird verwendet, um die Factoryklasse Ihrer Assistentenseite mit der Klassenfactoryregistrierung für den UDI-Assistenten zu registrieren. Klassenfactorys sind Klassen, die eine Instance einer anderen Klasse erstellen können. Die RegisterFactories-Funktion erstellt eine neue Instance einer Factoryklasse und übergibt diese Klasse an die Klassenfactoryregistrierung für den UDI-Assistenten, der diese Factoryklasse für den Assistenten verfügbar macht. Der UDI-Assistent sucht nach einer Factoryklasse, die mit einer ID registriert ist, die demType-Attribut des Page-Elements für die benutzerdefinierte Assistentenseite entspricht.
Im Beispiel ist die ID als ID_Location in der Datei PageClassIds.h als Microsoft.SamplePage.LocationPage definiert, die dem Type-Attributfür das Page-Element in der Config.xml-Datei entspricht. ID_Location wird als Parameter in der Funktion RegisterFactories übergeben, die in der Datei dllmain.ccp implementiert ist.
Sie können eine Funktion mithilfe der Funktionsvorlage Register_Name erstellen, um die Erstellung einer neuen Factory-instance zu vereinfachen und die neu erstellte instance zu registrieren. Der mit der Funktionsvorlage Register bereitgestellte Namenswert muss die iClassFactory-Schnittstelle implementieren. Die ClassFactoryImpl-Klasse verarbeitet die meisten Details für die Implementierung einer Klassenfactory.
Sie können auch die Funktion RegisterFactories verwenden, um Aufgabentypen und Validierungstypen zu registrieren. Weitere Informationen finden Sie unter den folgenden Themen:
Hinweis
Das Beispiel enthält und registriert nur die eine benutzerdefinierte Assistentenseite. Das Beispiel enthält keine benutzerdefinierten Tasks oder Validatoren und registriert daher keine benutzerdefinierten Tasks oder Validatoren.
Schritt 3: Der UDI-Assistent zeigt die benutzerdefinierte Assistentenseite an
Die benutzerdefinierte Assistentenseite im Beispiel ist in der LocationPage.cpp Datei definiert. Assistentenseiten werden von Vorlagenklassen abgeleitet, die einen Großteil der Funktionalität einer Seite bereitstellen. Alle Assistentenseiten sollten von der WizardPageImpl-Vorlagenklasse abgeleitet werden, die die IWizardPage-Schnittstelle implementiert. Jede Assistentenseite kann je nach den Anforderungen der Seite weitere optionale Vorlagenklassen und entsprechende Schnittstellen implementieren.
Die WizardPageImpl-Vorlagenklasse verfügt über mehrere nützliche Schnittstellen, die Ihnen beim Schreiben benutzerdefinierter Assistentenseiten helfen können. Implementieren Sie die WizardPageImpl-Vorlagenklasse als Basisklasse für Ihre benutzerdefinierte Assistentenseite.
Für eine Liste der verfügbaren:
Vorlagenklassen für Assistentenseiten, siehe Hilfsklassen für Assistentenseiten
Schnittstellen für die Vorlagenklassen der Assistentenseite, siehe Schnittstellen für die Assistentenseite
Die benutzerdefinierte Assistentenseite im Beispiel ist von der WizardPageImpl-Vorlagenklasse abgeleitet und implementiert die IWizardPage-Schnittstelle. Darüber hinaus implementiert die benutzerdefinierte Assistentenseite die IFieldCallback-Schnittstelle . Beide sind in der LocationPage.cpp Datei implementiert.
Die Beispielseite für einen benutzerdefinierten Assistenten setzt die folgenden Methoden außer Kraft:
OnWindowCreated. Die OnWindowCreated-Methode auf der Beispiel-Assistentenseite ruft die folgenden Methoden auf:
AddField hinzu. Diese Methode setzt das IDC_COMBO_LOCATION Box-Steuerelement in der IDD_LOCATION_PAGE Ressource mit dem Data-ElementLocation in der Config.xml-Datei in Beziehung.
Zusätzlich zur AddField-Methode können Sie die AddRadioGroup-Methode und die AddToGroup-Methode verwenden, um andere Steuerelemente und Verhaltensweisen zu unterstützen.
Hinweis
Stellen Sie sicher, dass Sie die AddField-, AddRadioGroup- oder AddToGroup-Methode aufrufen, bevor Sie die InitFields-Methode aufrufen.
InitFields. Verwenden Sie diese Methode, um die Felder (Steuerelemente) zu initialisieren, die Sie dem Formular hinzugefügt haben. Der Mauszeiger auf die Seite ist ein Parameter. In diesem Beispiel wird der this-Zeiger übergeben, der auf die aktuelle Seite verweist.
Hinweis
Um die Verwendung dieses Zeigers zu unterstützen, müssen Sie die IFieldCallback-Schnittstelle zusätzlich zu den Schnittstellen implementieren, die die WizardPageImpl-Vorlagenklasse unterstützt.
Die IFieldCallback-Schnittstelle ruft die SetFieldDefault-Methode auf, die zum Festlegen der Standardwerte für andere Steuerelemente als Textfeld- und Kontrollkästchensteuerelemente verwendet wird. In diesem Beispiel legt die SetFieldDefault-Methode den Anfangsindex des Kombinationsfeld-Steuerelements basierend auf dem Standardwert fest, der im Default-Element für das Field-Element in der Config.xml-Datei angegeben ist.
Die OnWindowCreated-Methode richtet den Formularcontroller mithilfe der IFormController-Schnittstelle ein. Weitere Informationen zum Einrichten des Formularcontrollers finden Sie unter Einrichten des Formulars.
InitLocations. Diese Methode füllt das Kombinationsfeld aus der Liste der Speicherorte in der Config.xml Datei. Das Data-Element und das untergeordnete DataItem-Element Die Confg.xml Datei enthält die Liste möglicher Werte.
OnNextSelected. Diese Methode führt die folgenden Aufgaben aus:
Updates der Tasksequenzvariablen TSLocation mit dem im Kombinationsfeld ausgewählten Wert mithilfe der SaveFields-Methode
Fügt Informationen hinzu, die mithilfe der SaveFields-Methodeauf der Zusammenfassungsseite angezeigt werden
Schritt 4: Die Schaltfläche "Weiter" wird auf der Seite des benutzerdefinierten Assistenten ausgewählt
Wenn der Benutzer die Felder auf der benutzerdefinierten Assistentenseite ausfüllt, wählt er "Weiter" aus, wodurch die OnNextSelected-Methode aufgerufen wird. Die OnNextSelected-Methode führt alle erforderlichen Aufgaben aus, bevor sie mit der nächsten Assistentenseite fortfährt, z. B. das Aufzeichnen aller Konfigurationsänderungen, die auf der benutzerdefinierten Assistentenseite vorgenommen wurden.
Für die benutzerdefinierte Beispiel-Assistentenseite ist die Außerkraftsetzung für die OnNextSelected-Methode in der Datei "LocationPage.ccp" implementiert. In der OnNextSelected-Methode Auf der Beispielseite für einen benutzerdefinierten Assistenten werden die folgenden Methoden aufgerufen:
InitSection. Diese Methode initialisiert die Kopfzeile (Beschriftungs-Untertitel) für die Zusammenfassungsdaten, die auf der Seite Zusammenfassung angezeigt werden. In der Regel können Sie diesen Wert mit der DisplayName( )-Funktion festlegen. Die mit dieser Untertitel verbundenen Daten werden mithilfe der SaveFields-Methode gespeichert.
SaveFields. Diese Methode speichert Feldwerte in Tasksequenzvariablen und in den Daten, die auf der Seite Zusammenfassung angezeigt werden.
Überprüfen der Visual Studio-Projektmappe SampleEditor
Bevor Sie mit dem Erstellen eigener benutzerdefinierter Assistentenseiten und Assistentenseiten-Editoren beginnen, führen Sie die folgenden Schritte aus, um die UDI-Entwicklungsumgebung vorzubereiten:
Überprüfen Sie die Architektur des UDI-Assistenten-Designers, wie unter Überprüfen der UDI-Assistenten-Designer-Architektur beschrieben.
Überprüfen Sie die Komponenten einer UDI-Assistentenseite, die mit der Konfigurationsdatei des UDI-Assistenten angepasst werden können, wie unter Überprüfen konfigurierbarer Komponenten einer UDI-Assistentenseite beschrieben.
Sehen Sie sich das EditorPage-Beispiel an, das im UDI SDK bereitgestellt wird, wie unter Überprüfen des EditorPage-Beispiels beschrieben.
Überprüfen der Architektur des UDI-Assistenten für Designer
Der UDI Wizard Designer wurde unter Verwendung von WPF, Prism und Unity entwickelt. Der UDI-Designer dient zum Bearbeiten der UDI-Assistenten-Konfigurationsdatei (UDIWizard_Config.xml), die der UDI-Assistent (OSDSetupWizard.exe) zur Laufzeit liest. Das Pages-Element in der Konfigurationsdatei des UDI-Assistenten enthält eine Liste von Seiten, die für jede Assistentenseite ein eigenes Page-Element aufweist.
Wenn Sie die Konfigurationseinstellungen für eine Assistentenseite bearbeiten, lädt der UDI-Assistenten-Designer den Editor für benutzerdefinierte Seiten, der dem Assistentenseitentyp entspricht. Die benutzerdefinierten Assistentenseiten-Editoren wurden als WPF-Benutzersteuerelemente entwickelt. Die Editorseiten der benutzerdefinierten Assistentenseite verwenden das MVVM-Entwurfsmuster ( Model-View-ViewModel ) für WPF.
Das MVVM-Entwurfsmuster hilft dabei, die Benutzeroberfläche (UI, Präsentation) von den präsentierten Daten zu trennen. Die Daten sind eine Fassade über dem Page-Element in der Konfigurationsdatei des UDI-Assistenten (im Beispiel die Config.xml-Datei), auf die über die CurrentPage-Eigenschaft der IDataService-Schnittstelle zugegriffen wird.
Der UDI-Assistenten-Designer verwendet das DependencyAttribute, um Zugriff auf die DataService-Klasse basierend auf dem Dependency Injection-Framework in Unity zu erhalten. Weitere Informationen zum Dependency Interjection Framework in Unity finden Sie unter Inject Some Life into your Applications—Getting to Know the Unity Application Block.
Überprüfen konfigurierbarer Komponenten einer UDI-Assistentenseite
Wenn Sie Ihre benutzerdefinierte Assistentenseite erstellen, werden einige der Konfigurationseinstellungen möglicherweise im Code festgelegt und können nach dem Kompilieren der Seite nicht mehr geändert werden. Für andere Konfigurationseinstellungen müssen Sie jedoch zulassen, dass diese Konfigurationseinstellungen mit dem UDI-Assistenten-Designer geändert werden.
In der Regel werden die Konfigurationseinstellungen, die Sie mit dem UDI-Assistenten-Designer konfigurieren möchten, in der Konfigurationsdatei des UDI-Assistenten gespeichert (im Beispiel die Config.xml-Datei). Sie können jedoch bei Bedarf auch eigene separate Konfigurationsdateien erstellen. Ein Beispiel für die Verwendung einer separaten Konfigurationsdatei ist die Datei UDIWizard_Config.xml.app, die von der Aufgabe Application Discovery und dem Seitentyp ApplicationPage-Assistent verwendet wird.
Im Folgenden finden Sie eine Liste der typischen Konfigurationseinstellungen, die Sie mit dem UDI-Assistenten-Designer verwalten können:
Feld aus. Verwendungsfelder ermöglichen Benutzern das Bereitstellen von Eingaben. Felder werden als Feldelemente in der Konfigurationsdatei (UDIWizard_Config.xml des UDI-Assistenten) angezeigt, die die Konfigurationseinstellungen für jedes Feld enthält. Der entsprechende Assistentenseiten-Editor muss eine Methode zum Bearbeiten der Feldkonfigurationseinstellungen für das Feld mithilfe von FieldElementControl bereitstellen.
Properties. Setter helfen beim Erstellen von Eigenschaften für Entitäten auf der Seite, z. B. Seiten im Page-Element, Felder im Field-Element oder Daten im Data- oder DataItem-Element. Sie konfigurieren Eigenschaften in den Setter-Elementen . Fügen Sie ein separates Setter-Element für jede Eigenschaft hinzu, die Sie definieren möchten. Sie bearbeiten die Eigenschaften mit dem SetterControl und konfigurieren andere Setter-Elemente mit anderen Steuerelementen.
Daten: Daten werden zum Speichern von Informationen für die Verwendung auf der Assistentenseite und anderen Komponenten verwendet. Sie können Daten für Seiten oder Felder mit den Data - oder DataItem-Elementen definieren. Die Daten können durch die ordnungsgemäße Verwendung der Data - oder DataItem-Elemente in einer flachen oder hierarchischen Struktur definiert werden. Die Config.xml im Beispiel im SDK zeigt, wie flache Datenstrukturen erstellt werden.
Der von Ihnen erstellte benutzerdefinierte Assistentenseiten-Editor muss in der Lage sein, diese Konfigurationseinstellungen zu verwalten.
Sehen Sie sich das EditorPage-Beispiel an
Das EditorPage-Beispiel wird verwendet, um die Konfigurationseinstellungen für die SamplePage-Assistentenseite in der Konfigurationsdatei des UDI-Assistenten zu konfigurieren. Das EditorPage-Beispiel hat die folgenden Hauptkomponenten:
Benutzeroberfläche zum Konfigurieren der Einstellungen für das Kombinationsfeld "Speicherort "
Benutzeroberfläche zum Hinzufügen oder Bearbeiten eines Standorts in der Liste möglicher Standorte, die im Kombinationsfeld "Standort " angezeigt werden
Konfigurationseinstellungen, die aus der UDI-Assistenten-Konfigurationsdatei gelesen und dort gespeichert werden
Unterstützender Code für die anderen Komponenten
Überprüfen Sie das EditorPage-Beispiel in Visual Studio, indem Sie die folgenden Schritte ausführen:
Überprüfen Sie, wie der SampleEditor-Assistentenseiten-Editor im UDI-Assistenten-Designer geladen und initialisiert wird, wie unter Laden und Initialisierung der Überprüfungsassistentenseite beschrieben.
Überprüfen Sie die Benutzeroberfläche, die zum Bearbeiten des Kombinationsfelds Standort in den Dateien LocationPageEditor.xaml und LocationPageEditor.xaml.cs verwendet wird, wie unter Überprüfen der Benutzeroberfläche zum Konfigurieren des Kombinationsfelds Standort beschrieben.
Überprüfen Sie die Benutzeroberfläche, die zum Hinzufügen oder Bearbeiten von Speicherorten zur Liste in den Dateien AddEditLocationView.xaml und AddEditLocationView.xaml.cs verwendet wird, wie unter Überprüfen der Benutzeroberfläche, die zum Ändern der Liste möglicher Speicherorte verwendet wird.
Überprüfen Sie den Code zum Verwalten von Konfigurationsinformationen, die in der Konfigurationsdatei des UDI-Assistenten gespeichert sind, wie unter Überprüfen des Codes zum Verwalten von Konfigurationsinformationen.
Laden und Initialisieren des Überprüfungs-Assistenten-Editors
Benutzerdefinierte Assistentenseiten-Editoren werden nach Bedarf vom UDI-Assistenten-Designer geladen. Die Konfigurationsdateien des UDI-Assistenten-Designer werden geladen, wenn der UDI-Assistenten-Designer gestartet wird. Der UDI-Assistent durchsucht Designer den Ordner "install_folder\Bin\Config" (wobei install_folder der Name des Ordners ist, in dem MDT installiert ist) nach Dateien mit der Dateierweiterung ".config".
Während der Konfiguration der UDI-Entwicklungsumgebung haben Sie die Datei SamplePage.dll.confg in den Ordner install_folder\Bin\Config kopiert. Wenn Sie die Designer des UDI-Assistenten starten, wird die Datei SamplePage.dll.confg gefunden und geladen.
Der UDI-Assistent verwendet Designer die folgenden Attribute des Page-Elements in der Datei SamplePage.dll.confg, um das EditorPage-Beispiel zu laden und zu initialisieren:
DesignerAssembly. Dieses Attribut bestimmt den Namen der zu ladenden DLL. Diese DLL muss sich im selben Ordner wie die UDIDesigner.exe-Datei befinden, nämlich im Ordner "install_folder\Bin" (wobei install_folder der Name des Ordners ist, in dem MDT installiert ist).
DesignerType. Dieses Attribut ist der Microsoft .NET-Typname der Klasse, die das WPF-Benutzersteuerelement enthält.
Typ. Verwenden Sie dieses Attribut, um den Seitentyp der benutzerdefinierten Assistentenseite zu konfigurieren, die vom UDI-Assistenten geladen wird. Der UDI-Assistenten-Designer verwendet dieses Attribut, um das entsprechende Page-Element in der Konfigurationsdatei des UDI-Assistenten zu suchen.
DLL. Verwenden Sie dieses Attribut, um das DLL-Element in der Konfigurationsdatei des UDI-Assistenten zu konfigurieren, die vom UDI-Assistenten-Designer erstellt wird.
Beschreibung. Verwenden Sie dieses Attribut, um Informationen über den Editor der Assistentenseite bereitzustellen. Der Wert dieses Attributs wird im Dialogfeld Neue Seite hinzufügen im UDI-Assistenten-Designer angezeigt, mit dem die Assistentenseite zur "Seitenbibliothek" hinzugefügt wird.
DisplayName. Verwenden Sie dieses Attribut, um den Namen der benutzerdefinierten Assistentenseite anzugeben, die im UDI-Assistenten-Designer angezeigt wird. Der Wert dieses Attributs wird im Dialogfeld Neue Seite hinzufügen im UDI-Assistenten-Designer angezeigt, mit dem die Assistentenseite zur "Seitenbibliothek" hinzugefügt wird.
Im Beispiel ist der Typ der benutzerdefinierten SamplePage-Assistentenseite "Microsoft.SamplePage.LocationPage", die in der Config.xml Datei gespeichert ist. Die Config.xml Datei befindet sich im Ordner local_folder\SDK\SamplePage\SamplePage in (wobei local_folder der Ordner ist , den Sie zuvor im Konfigurationsprozess auf dem Entwicklungscomputer erstellt haben).
Überprüfen Sie die Benutzeroberfläche, die zum Konfigurieren des Kombinationsfelds "Standort" verwendet wird
Wenn der Assistentenseiten-Editor geladen und initialisiert wird, wird der SampleEditor-Assistentenseiten-Editor geladen, wenn eine Seite mit dem Typ Microsoft.SamplePage.LocationPage bearbeitet wird. Die Benutzeroberfläche für den Seiten-Editor ist in der Datei LocationPageEditor.xaml gespeichert.
Wenn Sie die Benutzeroberfläche auf der Registerkarte Entwurf und den Code auf der Registerkarte XAML untersuchen, können Sie die Beziehung zwischen der grafischen Benutzeroberfläche und den Elementen und Attributen in der Extensible Application Markup Language (XAML) erkennen.
Wenn Sie z. B. das Controls:FieldElementControl-Element im XAML-Code überprüfen, können Sie sehen, wie sich dies auf das Layout der entsprechenden Benutzeroberfläche bezieht. Verwenden Sie das Controls:FieldElementControl-Element , um das FieldElementControl-Steuerelement zu definieren.
Die Bindungsparameter in der XAML-Datei binden die Felder im Beispielseiten-Editor an die Informationen in der Konfigurationsdatei des UDI-Assistenten. Der folgende Code verknüpft z. B. das Textfeld " Standardwert " mit dem "Default "-Element in der Konfigurationsdatei des UDI-Assistenten (Config.xml im Beispiel):
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
Weitere Informationen finden Sie unter Gewusst wie: Bereitstellen von Daten für die Bindung in XAML.
Verwenden Sie das Element Views:CollectionTControl.ColumnCollectionView im XAML, um die Liste der verfügbaren Positionen in der Rasteransicht zu bearbeiten. Mit dem Steuerelement CollectionTControl zeigen Sie die Grid-Ansicht an und binden die Grid-View an das Data-Element mit dem Namen Location in der UDI-Konfigurationsdatei.
Überprüfen Sie die Benutzeroberfläche, die zum Ändern der Liste möglicher Speicherorte verwendet wird
Die Benutzeroberfläche zum Ändern der Liste möglicher Standorte besteht aus:
Ein kontextsensitives Menü und Menübandschaltflächen, mit denen Sie Elemente in der Liste der Speicherorte hinzufügen, bearbeiten, entfernen oder deren Reihenfolge ändern können, wie unter Überprüfen Kontextsensitiver Menü- und Menübandschaltflächen zum Ändern der Liste der Speicherorte
Ein Dialogfeld, das gestartet wird, wenn Sie ein Element in der Liste der Speicherorte hinzufügen oder bearbeiten, wie im Dialogfeld Überprüfen des Dialogfelds zum Hinzufügen oder Bearbeiten von Speicherorten beschrieben
Überprüfen der kontextsensitiven Menü- und Menübandschaltflächen zum Ändern der Liste der Speicherorte
Wenn Sie mit der rechten Maustaste in das Listenfeld klicken, das die Liste der Speicherorte enthält, wird ein kontextbezogenes Menü angezeigt. Das Menüband verfügt über entsprechende Schaltflächen, mit denen Sie die gleichen Aufgaben ausführen können. Das Steuerelementelement Views:CollectionsTControl in der Datei LocationPageEditor.xaml definiert die aufgerufenen Methoden basierend auf der ausgeführten Aktion und den Eigenschaften, die Sie wie folgt festlegen:
SelectedItem. Diese datengebundene Eigenschaft wird aktiviert, wenn der Benutzer ein Element aus der Liste auswählt. Diese Eigenschaft ist an die CurrentLocation-Eigenschaft im Ansichtsmodell gebunden, die sich in der LocationPageEditorViewModel.cs-Datei befindet und vom CollectionTControl-Steuerelement verwendet wird, um das ausgewählte Element zu übergeben, wenn Sie ein vorhandenes Element bearbeiten oder entfernen.
AddItemAction. Diese Aktion wird ausgeführt, wenn der Benutzer im kontextsensitiven Menü oder über die entsprechenden Schaltflächen im Menüband die Option "Element hinzufügen " auswählt. Es gibt eine Datenbindung an eine Eigenschaft im Ansichtsmodell, die das AddLocationAction-Objekt zurückgibt. Dieses Objekt ist die AddLocationCallback-Methode , die sich in der LocationPageEditorViewModel.cs Datei befindet und das Dialogfeld in der Datei AddEditLocationView.xaml anzeigt.
EditItemAction. Diese Aktion wird ausgeführt, wenn der Benutzer im kontextsensitiven Menü die Option "Element bearbeiten " auswählt. Es gibt eine Datenbindung an eine Eigenschaft im Ansichtsmodell, die das EditLocationAction-Objekt zurückgibt. Dieses Objekt ist die EditLocationCallback-Methode , die sich in der LocationPageEditorViewModel.cs Datei befindet und das Dialogfeld in der Datei AddEditLocationView.xaml anzeigt.
RemoveAction. Diese Aktion wird ausgeführt, wenn der Benutzer im kontextsensitiven Menü die Option "Element entfernen " auswählt. Es gibt eine Datenbindung an eine Eigenschaft im Ansichtsmodell, die das RemoveAction-Objekt zurückgibt. Dieses Objekt ist die EditLocationCallback-Methode , die sich in der LocationPageEditorViewModel.cs Datei befindet und eine Meldung anzeigt, die das Löschen des Speicherorts bestätigt.
Überprüfen Sie das Dialogfeld zum Hinzufügen oder Bearbeiten von Speicherorten
Wenn Sie der Liste der Standorte einen neuen Standort hinzufügen oder einen vorhandenen Standort bearbeiten, wird eine Meldung angezeigt, die sich in der Datei AddEditLocationView.xaml befindet. Die Meldung wird mit der ShowDialogWindow-Fenstermethode in der LocationPageEditorViewModel.cs-Datei angezeigt.
Die Benutzeroberfläche in der Datei AddEditLocationView.xaml besteht aus:
Ein Dialograhmen mit dem Namen DialogFrame, der die folgenden Elemente enthält:
Ein Titel, den Sie mit dem DialogTitle-Attribut des Dialograhmens konfigurieren
Eine OK-Schaltfläche, die die Rückgabe status wie für die Approved-Eigenschaft auf True festlegt (Die Rückgabe status wird in der AddLocationCallback-Methode in der LocationPageEditorViewModel.cs-Datei überprüft, um zu ermitteln, ob der Benutzer "OK" ausgewählt hat.)
Eine Schaltfläche "Abbrechen", mit der die Rückgabe status wie für die Approved-Eigenschaft auf "False" festgelegt wird (Die Rückgabe status wird in der AddLocationCallback-Methode in der LocationPageEditorViewModel.cs Datei überprüft, um zu ermitteln, ob der Benutzer "Abbrechen" ausgewählt hat.)
Ein WPF-Element, das Folgendes enthält:
Eine Bezeichnung, die Sie mit dem Content-Attribut konfigurieren
Ein Textfeld, das an das Data-Element mit dem Namen Location in der UDI-Konfigurationsdatei gebunden ist (im Beispiel die Config.xml Datei)
Überprüfen Sie den Code, der zum Verwalten von Konfigurationsinformationen verwendet wird.
Die Konfigurationsinformationen für Ihre benutzerdefinierte Assistentenseite werden in der Konfigurationsdatei des UDI-Assistenten gespeichert, die folgende Zeile lautet:
Config.xml Datei im Beispiel, die mit dem UDI SDK bereitgestellt wird (diese Datei enthält nur die Konfigurationseinstellungen für das Beispiel.)
UDIWizard_Config.xml mit MDT gelieferte Datei, die im Ordner "installation_folder\Templates\Distribution\Scripts" gespeichert ist (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben); Diese Datei enthält die Konfigurationseinstellungen für alle integrierten Assistentenseiten und -phasen
Im SampleEditor-Beispiel hilft die Routine Locations bei der Verwaltung der Konfigurationsinformationen und befindet sich in der LocationPageEditorViewModel.cs Datei. Die Routine "Standorte" gibt eine Liste der Speicherorte aus der Konfigurationsdatei des UDI-Assistenten zurück. Insbesondere enthält die zurückgegebene Liste ein Element für jedes DataItem-Element in der Konfigurationsdatei des UDI-Assistenten.
Benutzerdefinierte UDI-Assistentenseiten erstellen
Der allgemeine Prozess zum Erstellen benutzerdefinierter UDI-Assistentenseiten sieht wie folgt aus:
Erstellen Sie eine Kopie der SamplePage-Projektmappe als Ausgangspunkt.
Platzieren Sie die gewünschten Steuerelemente (Felder) auf dem Formular.
Schreiben Sie Code, um die entsprechenden Aufgaben auszuführen, wenn die Assistentenseite geladen wird (Außerkraftsetzungen für die OnWindowCreated-Methode ), einschließlich der folgenden Schritte:
Initialisieren Sie das Formular.
Lesen von Speichervariablen, Tasksequenzvariablen, Umgebungsvariablen oder XML-Dateiinformationen (z. B. Setter-Eigenschaften ).
Schreiben Sie beliebigen Code für die Ausführung der entsprechenden Aufgaben, wenn die Seite angezeigt wird (Außerkraftsetzungen für die OnWindowShown-Methode ), einschließlich der folgenden Schritte:
Aktivieren oder deaktivieren Sie Steuerelemente basierend auf Informationen, die beim Laden der Seite in Schritt 3 gelesen wurden.
Aktualisieren Sie die Steuerelemente basierend auf den Informationen, die beim Laden der Seite in Schritt 3 gelesen wurden, z. B. die Auffüllung der Steuerelemente basierend auf den gelesenen Informationen.
Schreiben Sie beliebigen Code, um die entsprechenden Aufgaben auszuführen, während der Benutzer mit der Assistentenseite interagiert.
Schreiben Sie beliebigen Code für die Ausführung der entsprechenden Aufgaben, wenn der Benutzer im UDI-Assistenten "Weiter " auswählt (Außerkraftsetzungen für die OnNextSelected-Methode ), einschließlich der folgenden Schritte:
Aktualisieren Sie alle Speichervariablen, Tasksequenzvariablen, Umgebungsvariablen oder XML-Dateiinformationen.
Aktualisieren der Informationen für die Zusammenfassungsseite (sofern nicht durch die Felder auf der Seite ausgeführt).
Erstellen Sie die Projektmappe.
Stellen Sie sicher, dass die Version der von Ihnen erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT aufweist, insbesondere die Prozessorplattform für Windows Preinstallation Environment (Windows PE). Der UDI-Assistent kann ausgeführt werden in:
Das vorhandene Betriebssystem auf dem Zielcomputer. Sie können 32-Bit-Versionen Ihrer Assistentenseite auf 32-Bit- oder 64-Bit-Windows-Betriebssystemen ausführen. 64-Bit-Versionen der Assistentenseite können jedoch nur unter 64-Bit-Windows-Betriebssystemen ausgeführt werden.
Windows PE auf dem Zielcomputer. Windows PE unterstützt nicht die Ausführung von 32-Bit-Anwendungen auf einer 64-Bit-Version von Windows PE. Sie müssen also für jede Prozessorarchitektur von Windows PE, die Sie verwenden möchten, eine Version für Ihre Assistentenseite erstellt haben.
Kopieren Sie die DLL für die benutzerdefinierte Assistentenseite in installation_folder Plattformordner \Templates\Distribution\Tools\ ( installation_folder ist der Ordner, in dem Sie MDT installiert haben, und die Plattformist x86 für die 32-Bit-Version oder x64 für die 64-Bit-Version).
Führen Sie die Schritte zum Erstellen eines benutzerdefinierten Seiteneditors aus.
Erstellen benutzerdefinierter Assistentenseiten-Editoren
Der allgemeine Prozess zum Erstellen benutzerdefinierter UDI-Assistentenseiten-Editoren sieht wie folgt aus:
Erstellen Sie eine Kopie der SampleEditor-Projektmappe als Ausgangspunkt.
Erstellen der primären Benutzeroberfläche des Seiteneditors in einer XAML-Datei.
Fügen Sie Instanzen des FieldElementControl-Steuerelements hinzu, wie es für die zu konfigurierende Assistentenseite erforderlich ist (falls erforderlich).
Fügen Sie Instanzen des SetterControl-Steuerelements hinzu, wie es für die Assistentenseite erforderlich ist, um sie zu konfigurieren (falls erforderlich).
Fügen Sie Instanzen des CollectionTControl-Steuerelements hinzu, die für die Konfiguration auf der Assistentenseite erforderlich sind (falls erforderlich).
Fügen Sie die IDataService-Schnittstelle hinzu.
Schreiben Sie den entsprechenden Code zum Aktualisieren der Konfigurationsdatei des UDI-Assistenten basierend auf den Konfigurationseinstellungen, die mit dem benutzerdefinierten Assistentenseiten-Editor konfiguriert werden sollen.
Erstellen Sie untergeordnete Dialogfelder in einer .xaml-Datei, und rufen Sie sie vom primären Seiteneditor aus auf, indem Sie die IMessageBoxService-Schnittstelle verwenden, wie es die zu konfigurierende Assistentenseite erfordert.
Fügen Sie dem Menüband des UDI-Assistenten Designer die entsprechenden Schnittstellen hinzu, basierend auf den Anforderungen der zu konfigurierenden Assistentenseite.
Erstellen Sie die Projektmappe.
Hinweis
Stellen Sie sicher, dass die Version der von Ihnen erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT aufweist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihres benutzerdefinierten Seiteneditors.
Erstellen Sie eine UDI-Assistenten- Designer Konfigurationsdatei, um die erforderlichen DLLs zu laden, und ordnen Sie den Editor der Assistentenseite der entsprechenden Assistentenseite zu (im Beispiel die SamplePage.dll.config Datei).
Weitere Informationen zu den Elementen, die zum Ausführen der Zuordnung zwischen der Assistentenseite und dem Assistentenseiteneditor erforderlich sind, finden Sie unter DesignerMappings-Element, untergeordnete Elemente und entsprechende Attribute.
Kopieren Sie die Konfigurationsdatei des UDI-Assistenten Designer Konfigurationsdatei, die Sie im vorherigen Schritt erstellt haben, in den Ordner installation_folder\Bin\Config (installation_folder ist der Ordner, in dem Sie die MDT-Version installiert haben).
Kopieren Sie die DLL für den benutzerdefinierten Assistentenseiten-Editor in den Ordner installation_folder\Bin ( installation_folder ist der Ordner, in dem Sie MDT installiert haben).
Erstellen benutzerdefinierter UDI-Aufgaben
UDI-Tasks sind in C++ geschriebene DLLs, die die ITask-Schnittstelle implementieren. Sie registrieren die DLL beim UDI-Assistenten Designer der Aufgabenbibliothek, indem Sie eine UDI-Assistenten-Konfigurationsdatei Designer (.config-Datei) erstellen und im Ordner installation_folder\Bin\Config ablegen (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).
Hinweis
Sie können eine DLL erstellen, die Assistentenseiten, Tasks und Validatoren in derselben .dll Datei enthält. Sie können auch eine einzelne UDI-Assistenten- Designer Konfigurationsdatei (.config) erstellen, die die Konfigurationseinstellungen für die Assistentenseiten, Tasks und Validatoren in der DLL enthält.
So erstellen Sie benutzerdefinierte UDI-Aufgaben
Schreiben Sie Code, der die ITask-Schnittstelle und die folgenden Methoden implementiert:
Schreiben Sie Code, der die benutzerdefinierte Aufgabenklassefactory bei der Werksregistrierung registriert.
Erstellen Sie die Lösung für Ihre benutzerdefinierte Aufgabe.
Hinweis
Stellen Sie sicher, dass die Version der von Ihnen erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT aufweist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihrer benutzerdefinierten UDI-Aufgabe.
Erstellen Sie ein Task-Element unter dem TaskLibrary-Element in der Konfigurationsdatei des UDI-Assistenten Designer ähnlich dem folgenden Auszug:
<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>Hinweis
Alle Task-Elemente sollten den Parameter BitmapFilename enthalten. Geben Sie alle anderen Parameter an, wenn dies für die Aufgabe erforderlich ist. Im vorherigen Auszug wird der Protokollparameter beispielsweise verwendet, um einen Parameter für den Speicherort einer Protokolldatei anzugeben.
Kopieren Sie die Konfigurationsdatei des UDI-Assistenten Designer der im vorherigen Schritt erstellten Konfigurationsdatei in den Ordner installation_folder\Bin\Config (in dem installation_folder Ordner installiert haben, in dem Sie MDT installiert haben).
Kopieren Sie die DLL für Ihre benutzerdefinierte Aufgabe in den Plattformordner installation_folder\Templates\Distribution\Tools\ ( installation_folder ist der Ordner, in dem Sie MDT installiert haben, und die Plattformist x86 für die 32-Bit-Version oder x64 für die 64-Bit-Version).
Erstellen von benutzerdefinierten UDI-Validatoren
UDI-Validatoren sind in C++ geschriebene DLLs, die die IValidator-Schnittstelle implementieren. Sie registrieren die DLL bei der UDI-Assistenten- Designer Validierungsbibliothek, indem Sie eine UDI-Assistenten- Designer Konfigurationsdatei (.config-Datei) erstellen und sie im Ordner installation_folder\Bin\Config ablegen (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).
So erstellen Sie benutzerdefinierte UDI-Validatoren
Schreiben Sie Code, der eine Unterklasse der BaseValidator-Klasse erstellt und die folgenden Methoden implementiert:
Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Der Formularcontroller ruft den Init-Member auf, um das Validierungssteuerelement zu initialisieren. Diese Methode muss die Init-Methode für die BaseValidator-Klasse aufrufen. Normalerweise werden alle Eigenschaften, die für das Validierungssteuerelement festgelegt wurden, aus der Konfigurationsdatei des UDI-Assistenten gelesen. Mit dieser Methode ruft beispielsweise das Validierungssteuerelement InvalidCharactersValidator den Wert der InvalidChars-Eigenschaft ab.
IsValid. Der Formularcontroller ruft diese Methode auf, um festzustellen, ob das Steuerelement gültigen Text enthält. Im Folgenden finden Sie ein Beispiel für die IsValid-Methode für ein Validierungssteuerelement, die überprüft, ob das Feld nicht leer ist:
BOOL IsValid(LPBSTR pMessage) { __super::IsValid(pMessage); _bstr_t text; m_pText->GetText(text.GetAddress()); return (text.length() > 0); }Init(IControl *pControl, LPCTSTR message). Der Formularcontroller ruft diesen Member für jeden Tastendruck und andere Ereignisse auf, damit das Validierungssteuerelement den Inhalt des Steuerelements und die aktualisierten Nachrichten am unteren Rand der Assistentenseite überprüfen (oder löschen) kann.
Normalerweise sind dies die einzigen Methoden, die Sie außer Kraft setzen müssen. Abhängig vom Validator müssen Sie jedoch möglicherweise andere Methoden in der Unterklasse der von Ihnen erstellten BaseValidator-Klasse überschreiben. Weitere Informationen zu diesen anderen Methoden finden Sie unter der BaseValidator-Klasse .
Schreiben Sie Code, der die benutzerdefinierte Aufgabenklasse bei der Registrierungsfactory registriert.
Erstellen Sie die Lösung für Ihre benutzerdefinierte Aufgabe.
Hinweis
Stellen Sie sicher, dass die Version der von Ihnen erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT aufweist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihrer benutzerdefinierten UDI-Aufgabe.
Erstellen Sie ein Validator-Element unter dem ValidatorLibrary-Element in der Konfigurationsdatei des UDI-Assistenten Designer wie im folgenden Auszug:
<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>Warnung
Alle Validator-Elemente sollten den Parameter Message enthalten. Geben Sie alle anderen Parameter an, die für das Validierungssteuerelement erforderlich sind. Im vorherigen Auszug wird der Parameter NamedPattern beispielsweise verwendet, um einen Parameter für den Namen eines vordefinierten Musters regulärer Ausdrücke anzugeben.
Kopieren Sie die Konfigurationsdatei des UDI-Assistenten Designer der im vorherigen Schritt erstellten Konfigurationsdatei in den Ordner installation_folder\Bin\Config (in dem installation_folder Ordner installiert haben, in dem Sie MDT installiert haben).
Kopieren Sie die DLL für Ihre benutzerdefinierte Aufgabe in den Plattformordner installation_folder\Templates\Distribution\Tools\ ( installation_folder ist der Ordner, in dem Sie MDT installiert haben, und die Plattformist x86 für die 32-Bit-Version oder x64 für die 64-Bit-Version).
Referenz für den UDI-Assistenten
Komponenten der Assistentenseite
Sie können eine von mehreren vordefinierten Komponenten verwenden, um Ihre benutzerdefinierten Seiten zu erstellen.
Erstellen von Komponenteninstanzen
Der UDI-Assistent verwendet Klassenfactorys, um neue Instanzen von Objekten für Sie zu erstellen. Diese Fabriken werden in einer Werksregistrierung registriert, wobei eine Zeichenfolge als Schlüssel zur Fabrik verwendet wird. Die WmiRepository-Komponente wird beispielsweise durch die Zeichenfolge "Microsoft.Wizard.WmiRepository" identifiziert, die in der IWmiRepository-Headerdatei als ID_WmiRepository verfügbar ist.
Unter der Annahme, dass Sie Ihre Seite als Unterklasse von WizardPageImpl geschrieben haben, können Sie eine neue Instance einer WmiRepoistory wie folgt erstellen:
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
Die CreateInstance-Funktion ist eine typsichere Vorlagenfunktion zum Erstellen neuer Instanzen von Komponenten. PWmiRepository ist ein intelligenter Zeiger, der die Referenzzählung für Sie übernimmt.
Erstellbare Komponenten
Es gibt eine Reihe von Komponenten, die Sie bei der Registrierung registrieren können. Der erste Satz von Komponenten wird immer registriert, da die ausführbare Hauptdatei des UDI-Assistenten ihn bereitstellt. Die anderen beiden Komponentensätze werden in "optionalen" DLLs bereitgestellt. Damit diese Komponenten verfügbar sind, muss die DLL im Abschnitt "DLLs" der XML-Datei von .config aufgeführt sein. Ihr Code muss nicht wissen, welche ausführbare Datei eine bestimmte Komponente enthält.
Die Liste der Komponenten-IDs für Komponenten (der Komponentenname ist identisch mit der ID, jedoch ohne die anfängliche ID_), die bei der Werksregistrierung (definiert im OSDSetupWizard) registriert sind, ist in Tabelle 3 aufgeführt.
Tabelle 3. Komponenten-IDs
| ID | Beschreibung |
|---|---|
| ID_ACPowerTask | (ITask, IWizardComponent) Eine Preflight-Aufgabe, die sicherstellt, dass der Computer nicht nur im Akkubetrieb läuft |
| ID_AppDiscoveryTask | (ITask, IWizardComponent) Eine spezielle Aufgabe zum Ermitteln der auf Ihrem Computer installierten Softwareelemente |
| ID_BackgroundTask | (IBackgroundTask, IWizardComponent) Kann verwendet werden, um eine Aufgabe in einem anderen Thread auszuführen |
| ID_CopyFilesTask | (ITask, IWizardComponent) Eine Aufgabe zum Kopieren einer oder mehrerer Dateien |
| ID_FormController | (IFormController) Sie müssen am liebsten nicht selbst eine Instance erstellen, da Ihre Seite eine eigene Instance erhält |
| ID_InvalidCharactersValidator | (IValidator) Stellt sicher, dass kein Textfeld Zeichen aus einer Liste enthält, die dem Validator zur Verfügung gestellt wird. |
| ID_Logger | (ILogger) Sie müssen höchstwahrscheinlich nicht selbst eine Instance erstellen, da Ihre Seite einen Zeiger auf die freigegebene Instance empfängt |
| ID_NonEmptyValidator | (IValidator) Ein Validator, der sicherstellt, dass kein Feld leer ist |
| ID_PasswordValidator | (IValidator) Ein Validierungssteuerelement, das sicherstellt, dass keine zwei Textfelder den gleichen Inhalt haben |
| ID_Regex | (IRegEx) Wertet reguläre Ausdrücke aus und sucht nach Übereinstimmungen. |
| ID_RegExValidator | (IValidator) Ein Validierungssteuerelement, das anhand eines regulären Ausdrucks oder eines bekannten Musters überprüft |
| ID_SimpleStringProperties | (IStringProperties, ISimpleStringProperties) Bietet eine einfache Möglichkeit, Eigenschaften an Aufgaben ohne Verwendung von XML zu senden |
| ID_ShellExecuteTask | (ITask, IWizardComponent) Ausführen eines externen Programms |
| ID_SummaryBag | (ISummaryBag) Indirekt von Ihrer Seite über die Formularmethode verfügbar |
| ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent) Verwaltet die Ausführung einer Reihe von Aufgaben und die Benutzeroberfläche |
| ID_WmiRepository | (IWmiRepository, IWizardComponent) Ermöglicht das Ausführen von Abfragen der Windows-Verwaltungsinstrumentation (WMI) |
| ID_IXmlDocument | (IXmlDocument) Bietet eine Fassade zum Lesen und Schreiben von XML-Dokumenten |
Die definierten OSDRefreshWizard.dll, freigegebenen Seiten und andere Steuerelementkomponenten sind in Tabelle 4 und Tabelle 5 aufgeführt.
Tabelle 4. Verzeichnissteuerelemente
| ID | Beschreibung |
|---|---|
| ID_Directory | (IDirectory) Eine Fassade zum Abrufen von Verzeichnisinformationen aus dem Dateisystem |
Tabelle 5. Defined SharedPages.dll
| ID | Beschreibung |
|---|---|
| ID_ADHelper | (IADHelper) Bietet eine Fassade für eine begrenzte Anzahl von Features in Active Directory® Domain Services (AD DS) |
| ID_CpuInfo | (ICpuInfo) Bestimmt, ob Ihre CPU 32- oder 64-Bit ist. |
| ID_DomainJoinValidator | (IDomainJoinValidator) Verfügt über einige Methoden zum Überprüfen, ob eine Gruppe von Anmeldeinformationen einer Domäne beitreten darf |
| ID_DriveList | (IDriveList, IBindableList, IWizardComponent) Verwendet WMI zum Abrufen einer Liste der Laufwerke auf Ihrem Computer |
| ID_WiredNetworkTask | (ITask) Ein Task, der überprüft, ob Sie mit einem fest verdrahteten (anstatt drahtlosen) Netzwerkadapter mit dem Netzwerk verbunden sind |
Steuerelement-Komponenten
Sie interagieren mit den Steuerelementen auf Ihrer Seite über die GetControlWrapper-Vorlagenfunktion , die Zugriff auf einen der in Tabelle 6 aufgeführten Komponententypen bietet.
Tabelle 6. Komponenten
| Typen von Dialogsteuerelementen | Beschreibung |
|---|---|
| CONTROL_CHECK_BOX | (ICheckBox) Eine Fassade zum Arbeiten mit Kontrollkästchen-Steuerelementen |
| CONTROL_COMBO_BOX | (IComboBox) Eine Fassade für Kombinationsfeld-Steuerelemente |
| CONTROL_GENERIC | (IControl) Ermöglicht Ihnen die Arbeit mit den meisten Arten von Steuerelementen, um den Aktivierungs- und sichtbaren Zustand zu steuern |
| CONTROL_LIST_VIEW | (IListView) Eine Fassade, die Zugriff auf die Features eines Listenansichtssteuerelements bietet |
| CONTROL_PROGRESS_BAR | (IProgressBar) Eine Fassade zum Arbeiten mit der Position eines Fortschrittsbalkensteuerelements |
| CONTROL_RADIO_BUTTON | (IRadioButton) Eine Fassade zum Arbeiten mit Optionsfeldsteuerungen |
| CONTROL_STATIC_TEXT | (IStaticText) Eine Fassade, die Lese-/Schreibberechtigungen für den Text eines Steuerelements bietet, z. B. einer Beschriftung oder eines Textfelds |
| CONTROL_TREE_VIEW | (ItreeView) Eine Fassade zum Arbeiten mit einem Strukturansichtssteuerelement |
Bildlistenkomponente
Diese Komponente ist eine Fassade für ein ImageList-Steuerelement auf Ihrer Seite. Eine Bildliste erstellen Sie über die IListView - oder ITreeView-Schnittstelle .
FormController-Komponente
Der Assistent erstellt diese Komponente für Sie und übergibt sie an Ihre Seite. Sie greifen von Ihrer Seite aus mit der Form-Methode darauf zu, die von der Basisklasse WizardPageImpl implementiert wird.
InvalidCharacterValidator-Komponente
Dies ist eine Art von Validierungssteuerelement, das Sie auf einer Seite einfügen können. Die ID ist ID_InvalidCharactersValidator (definiert in IValidator.h) und hat den Textwert "Microsoft.Wizard.Validation.InvalidChars".
Dieses Validierungssteuerelement sucht nach einer einzelnen Eigenschaft (einem Setter-Element in der .config Datei) namens InvalidChars, bei der es sich um eine Liste von Zeichen handelt, die nicht zulässig sind. Es überprüft die Zeichen in einem Textfeld; Wenn der Text Zeichen aus dieser Liste enthält, meldet die Komponente einen Fehler.
NonEmptyValidator-Komponente
Dies ist eine Art von Validierungssteuerelement, das Sie auf einer Seite einfügen können. Die ID ist ID_NonEmptyValidator (definiert in IValidator.h) und hat den Textwert "Microsoft.Wizard.Validation.NonEmpty".
Dieses Validierungssteuerelement meldet einen Fehler, wenn das Textfeld (oder ein anderes Steuerelement, das IStaticText unterstützt) einen leeren Zeichenfolgenwert enthält.
PasswordValidator-Komponente
Dies ist eine Art von Validierungssteuerelement, das Sie auf einer Seite einfügen können. Die ID ist ID_PasswordValidator (definiert in IValidator.h) und hat den Textwert "Microsoft.Wizard.Validation.Password".
Dieses Validierungssteuerelement arbeitet mit zwei verschiedenen Textsteuerelementen (Steuerelementen, die IStaticText unterstützen) und meldet einen Fehler, wenn sie nicht dieselben Werte enthalten. Anders ausgedrückt: Sie schlägt fehl, wenn die Textfelder "Kennwort" und " Kennwort bestätigen " nicht übereinstimmen.
Da dieser Validator zwei Steuerelemente erfordert, muss er mehr eingerichtet werden als andere Validatoren. Das Setup könnte in etwa wie folgt aussehen:
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);
Zunächst definieren Sie das Steuerelement Kennwort bestätigen als "untergeordnet" des Kennwortsteuerelements . Auf diese Weise deaktiviert der Formularcontroller, wenn er das Kennwortsteuerelement deaktiviert, auch das Steuerelement Kennwort bestätigen . Fügen Sie als Nächstes eine Kennwortüberprüfung zum Formular hinzu. Stellen Sie schließlich dem Passwortvalidator die Schnittstelle zum Steuerelement Confirm Password zur Verfügung .
Da zwei Steuerelemente erforderlich sind, müssen Sie Code anstelle der .config XML-Datei verwenden, um dieses Validierungssteuerelement einzurichten.
RegExValidator-Komponente
Dies ist eine Art von Validierungssteuerelement, das Sie auf einer Seite einfügen können. Die ID ist ID_RegExValidator (definiert in IValidator.h) und hat den Textwert "Microsoft.Wizard.Validation.RegEx".
Dieses Validierungsprogramm vergleicht den Inhalt eines Textsteuerelements (das IStaticText unterstützt) mit einem regulären Ausdruck und schlägt fehl, wenn der Text nicht mit dem regulären Ausdruck übereinstimmt.
Alternativ können Sie diesen Validator mit einem vordefinierten benannten Muster verwenden. Um einen regulären Ausdruck verwenden zu können, muss der XML-Code eine Settereigenschaft namens Pattern enthalten. Wenn Sie stattdessen ein benanntes Muster verwenden möchten, verwenden Sie einen Setter namens NamedPattern , der auf einen der Werte in Tabelle 7 festgelegt ist.
Tabelle 7. Benannte Mustersetzer
| Pattern | Beschreibung |
|---|---|
| Benutzername | Überprüft, ob der Text entweder das Format "Domäne\Benutzer" oder "user@domain |
| Computername | Der Name muss zwischen 1 und 15 Zeichen lang sein und darf keine Gruppe von Zeichen enthalten (z. B. : und ?). |
| Workgroup | Der Name muss zwischen 1 und 15 Zeichen lang sein und darf keine Zeichen enthalten (z. B. =, + und ?) |
FactoryRegistry-Komponente
Diese Komponente verfolgt alle Klassen-Factorys und -Dienste. Sie implementiert die IFactoryRegistry-Schnittstelle und ist indirekt über die Containermethode Ihrer Seite verfügbar. Darüber hinaus lädt die Registrierung Erweiterungs-DLLs. Nach dem Laden einer DLL sucht die Registrierung nach einer exportierten Funktion namens "RegisterFactorys". Sie müssen diese Funktion implementieren und darin die Klassenfactorys für Ihre Seiten, Aufgaben und Validatoren (sowie alle anderen Klassenfactorys, die Sie registrieren möchten) registrieren. Hier ein Beispiel aus dem Beispielprojekt:
extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)
{
Register<LocationPageFactory>(ID_LocationPage, factories);
}
Logger-Komponente
Diese Komponente steht Ihrer Seite über die Logger-Methode (implementiert durch WizardPageImpl) zur Verfügung. Mit dieser Methode schreiben Sie Einträge in die Protokolldatei. Der Inhalt der Protokolldatei ist nützlich, um Probleme zu diagnostizieren, die Benutzer bei der Ausführung des UDI-Assistenten möglicherweise haben.
PropertyBag-Komponente
Der Eigenschaftsbeutel ist ein Container für Speichervariablen. Es ist auf Ihrer Seite über Container()->Properties() verfügbar. Speichervariablen sind nützlich, um temporäre Daten zwischen verschiedenen Seiten zu übergeben.
TSVariableBag- und TSRepository Komponenten
Mit der TSVariableBag-Komponente können Sie Tasksequenzvariablen lesen und schreiben. Die Werte werden im Arbeitsspeicher beibehalten, bis der Benutzer (standardmäßig) "Fertig stellen " auswählt. Sie können über die TSVariables-Methode der Seite (implementiert durch die WizardPageImpl-Basisklasse) auf den TSVariable-Beutel zugreifen. Diese Komponenten protokollieren alle Lese- und Schreibvorgänge von Tasksequenzvariablen.
WmiRepository-Komponente
Diese Komponente bietet eine Fassade für die Arbeit mit WMI-Abfragen. Sie können die CreateInstance-Hilfsfunktion mit ID_WmiRepository aufrufen, um eine instance dieser Komponente zu erhalten, die die IWmiRepository-Schnittstelle unterstützt. Diese Komponente gibt Ergebnisdatensätze über die IWmiIterator-Schnittstelle zurück.
Hilfsklassen für Assistentenseiten
Sie können benutzerdefinierte UDI-Assistentenseiten mithilfe integrierter Hilfsklassen erstellen, die mit dem UDI SDK bereitgestellt werden. Tabelle 8 listet die Hilfsklassen auf, die Sie verwenden können, um benutzerdefinierte Assistentenseiten zu erstellen.
Tabelle 8. Hilfsklassen
| Hilfsklasse | Beschreibung |
|---|---|
| ClassFactoryImpl Klasse | Dies ist eine nützliche Basisklasse zum Erstellen einer Klassenfactory, die Sie dann bei der Factoryregistrierung registrieren können. |
| Schnittstellenvorlagenklasse | Verwenden Sie diese Vorlagenklasse, wenn Sie eine Komponente erstellen möchten, die mehr als eine Schnittstelle implementiert. |
| Pfadhelferklasse | Diese Klasse bietet allgemeine Datei-/Verzeichnisoperationen. |
| Zeigervorlagenklasse | Diese Klasse stellt die Referenzzählung für die Lebensdauerverwaltung in COM-Komponenten bereit. Es ist wichtig, Schnittstellen freizugeben, wenn Sie mit ihnen fertig sind. Diese Vorlagenklasse verarbeitet die Lebensdauer automatisch. |
| PUnknown-Klasse | Diese Klasse ist ein intelligenter Zeiger speziell für die IUnknown-Schnittstelle. Verwenden Sie für alle anderen Schnittstellen die Zeigervorlagenklasse. |
| StringUtil Helper Class | Diese Klasse stellt Hilfsmethoden bereit, die die Arbeit mit Zeichenfolgen erleichtern. |
| Subinterface-Vorlagenklasse | Diese Basisklasse erleichtert die Implementierung einer Komponente, die eine Schnittstelle unterstützt, die ihrerseits von einer anderen Schnittstelle erbt. |
| UnknownImpl Vorlagenklasse | Diese Klasse verarbeitet die meisten Details der Erstellung einer COM-Komponente. |
| WizardComponent-Vorlagenklasse | Diese Basisklasse wird zum Erstellen von Komponenten verwendet, die Zugriff auf die Assistentendienste benötigen, z. B. Komponentenerstellung und Protokollierung. |
| WizardPageImpl Vorlagenklasse | Diese Basisklasse sollte als Basisklasse für alle benutzerdefinierten Assistentenseiten verwendet werden |
ClassFactoryImpl Klasse
Dies ist eine nützliche Basisklasse zum Erstellen einer Klassenfactory, die Sie dann bei der Factoryregistrierung registrieren können.
Es folgt ein Auszug aus der Datei "LocationPage.h" im Beispielprojekt zum Definieren der Klasse "ClassFactoryImpl ".
#pragma once
#include "ClassFactoryImpl.h"
class LocationPageFactory :public ClassFactoryImpl
{
protected:
IUnknown *CreateNewInstance();
};
Der folgende Auszug ist ein Auszug aus der LocationPage.cpp Datei auf der Beispiel-Assistentenseite, die zum Definieren der Klassenfactory für die Seite verwendet wird.
IUnknown *LocationPageFactory::CreateNewInstance()
{
return static_cast<IWizardPage *>(new LocationPage);
}
Schnittstellenvorlagenklasse
Verwenden Sie diese Vorlagenklasse, wenn Sie eine Komponente erstellen möchten, die mehr als eine Schnittstelle implementiert, z. B.:
classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>
Dieser Code erstellt eine Basisklassenkette, die sowohl IFieldCalback als auch die von WizardPageImpl unterstützten Schnittstellen unterstützt (zufällig IWizardPage).
Pfadhelferklasse
Diese Klasse bietet allgemeine Datei-/Verzeichnisoperationen:
static inline std::wstring GetModulePath(HINSTANCE hModule)
Außerdem wird der vollständige Pfad zur .exe- oder .dll-Datei mit dem instance Handle zurückgegeben, das Sie für diese Methode angeben:
static inline std::wstring GetModuleFilename(HINSTANCE hModule)
Die Klasse gibt den vollständigen Pfad und Dateinamen der .exe und .dll Datei mit dem instance Handle zurück, das Sie für diese Methode bereitstellen:
static inline std::wstring GetDirectoryName(LPCWSTR fullName)
. . . Oder nur der Pfad beim Entfernen des Dateinamens:
static inline std::wstring GetFileName(LPCWSTR fullName)
Bei einem Pfad mit einem Dateinamen gibt die Pfadhilfsklasse nur den Dateinamen zurück:
static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)
Schließlich gibt die Klasse eine neue Zeichenfolge zurück, die der kombinierte Pfad und Dateiname (oder ein anderer Pfad) ist.
Zeigervorlagenklasse
Diese Klasse ist in Pointer.h definiert. Da COM-Komponenten die Referenzzählung für die Lebensdauerverwaltung verwenden, ist es wichtig, dass Sie Schnittstellen immer freigeben, wenn Sie sie nicht mehr verwenden. Microsoft stellt eine Vorlagenklasse bereit, die die Lebensdauer automatisch verarbeitet. Wenn Sie beispielsweise einen intelligenten Zeiger für eine XML-Schnittstelle benötigen, können Sie so etwas schreiben:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Die erste Zeile definiert den intelligenten Mauszeiger. Die zweite Zeile zeigt das Abrufen eines Smart-Zeigers über einen anderen Aufruf. Der & Operator gibt immer eine vorhandene Schnittstelle frei, wenn sie eine enthält, und gibt die Adresse für den internen Zeiger zurück. Sobald Sie einen Zeiger wie diesen abgerufen haben, ruft die Pointer-instanceRelease für Sie auf, wenn die Variable den Gültigkeitsbereich überschreitet. Microsoft empfiehlt, intelligente Zeiger zu verwenden, anstatt AddRef und Release manuell aufzurufen.
Darüber hinaus ruft die Pointer-Smart-Pointer-Klasse QueryInterface auf, um andere Schnittstellen für Sie abzurufen. Wenn beispielsweise die Werksregistrierung eine neue Instance einer Komponente erstellt, enthält diese Code wie diesen:
PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
pComp->SetContainer(m_pContainer);
Die erste Zeile ruft QueryInterface im Hintergrund auf, um die IWizardComponent-Schnittstelle anzufordern. Der resultierende Smartpointer ist gleich nullptr , wenn die Komponente diese Schnittstelle nicht unterstützt.
PUnknown-Klasse
Diese Klasse ist ein intelligenter Zeiger speziell für die IUnknown-Schnittstelle . Verwenden Sie für alle anderen Schnittstellen die Zeigervorlagenklasse .
StringUtil Helper Class
Diese Klasse ist in Utilities.h definiert und stellt Hilfsmethoden bereit, die die Arbeit mit Zeichenfolgen erleichtern:
static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)
Diese Methode vergleicht zwei Zeichenfolgen, wobei die Groß-/Kleinschreibung ignoriert wird (siehe Tabelle 9).
Tabelle 9. StringUtil Helper Class
| gibt zurück | Beschreibung |
|---|---|
| 0 | Zeichenfolgen stimmen überein, Groß-/Kleinschreibung wird ignoriert |
| <0 | Erste < Sekunde |
| >0 | Erste > Sekunde |
Hier ein Beispiel:
static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)
Diese Methoden ähneln den Microsoft .NET Format-Methoden in dem Sinne, dass Parameter die Form von {0}. Sie führen jedoch keine Formatierung der Eingabe durch, sondern nur eine Ersetzung:
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)
Dies sind Wrapper um StringCchPrintf , die einen wstring zurückgeben, sodass Sie nicht selbst Speicher für Zeichenfolgen oder Puffer zuweisen müssen.
Subinterface-Vorlagenklasse
Diese Basisklasse erleichtert die Implementierung einer Komponente, die eine Schnittstelle unterstützt, die ihrerseits von einer anderen Schnittstelle erbt. Zum Beispiel erbt die ICheckBox-Schnittstelle von IControl. So wird diese Klasse verwendet, um den CheckBoxWrapper zu definieren:
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
Die Basisschnittstelle ist der erste Parameter, während die abgeleitete Schnittstelle der zweite Parameter ist.
UnknownImpl Vorlagenklasse
Diese Klasse ist in UnknownImpl.h definiert und verarbeitet die meisten Details der Erstellung einer COM-Komponente. Hier ist ein Beispiel dafür, wie Sie diese Basisklasse verwenden würden:
classDirectory :public UnknownImpl<IDirectory>
Dieser Code definiert eine Klasse, die die IDirectory-Schnittstelle unterstützt.
WizardComponent-Vorlagenklasse
Diese Klasse wird in IWizardComponent.h definiert und ist eine nützliche Basisklasse zum Erstellen von Komponenten, die Zugriff auf die Assistentendienste benötigen, z. B. Komponentenerstellung und Protokollierung.
So ist beispielsweise die CopyFilesTask-Komponente definiert:
classCopyFilesTask :public WizardComponent<ITask>
{
...
Der Parameter für diese Vorlagenklasse ist die "Hauptschnittstelle", die Sie für Ihre Komponente verwenden möchten, was im Falle von Aufgaben ITask ist. Die Verwendung von WizardComponent bedeutet, dass Ihre Komponente sowohl die von Ihnen bereitgestellte Schnittstelle (in diesem Beispiel ITask ) als auch IWizardComponent unterstützt.
Wenn Sie die Klassenfactory-Registrierung verwenden, um eine neue Komponente zu erstellen, ruft die Registrierung die IWizardComponent-SetContainer-Methode> der Komponente auf, um Ihrer Komponente Zugriff auf die Assistentendienste zu gewähren.
WizardPageImpl Vorlagenklasse
Verwenden Sie diese Klasse als Basisklasse für Ihre benutzerdefinierten Seiten, z. B.:
class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>
Der Parameter ist die Ressourcen-ID für Ihre Dialogfeldvorlage.
Schnittstellen zur Seite "Assistent"
Der UDI-Assistent verwendet Schnittstellen, um auf die verschiedenen Steuerelemente auf Ihrer Seite zuzugreifen. Auf Ihrer Seite verwenden Sie die GetControlWrapper-Funktion , um einen Steuerelement-Wrapper abzurufen. Hier ein Beispiel:
PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);
Hier ist PStaticText ein intelligenter Zeiger auf die IStaticText-Schnittstelle . Intelligente Zeiger rufen automatisch die COM Release()- Methode auf, wenn sie den Gültigkeitsbereich überschreiten oder Sie die Adresse einer Variablen (z. B. &pFormat) an eine Methode übergeben.
IADHelper-Schnittstelle
__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)
Initialisieren Sie diese Komponente, und übergeben Sie sie an die Protokollierung, damit diese Informationen protokollieren kann.
HRESULTValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain)
Diese Methode überprüft, ob ein Satz von Anmeldeinformationen gültig ist, wie in Tabelle 10 dargestellt.
Tabelle 10. HResultValidLogon
| HResult | Beschreibung |
|---|---|
| S_OK | Anmeldeinformationen sind gültig |
| S_FALSE | Anmeldeinformationen sind ungültig |
| E_FAIL | Der Domänencontroller konnte nicht gefunden werden. Überprüfen der Protokolle auf Details |
HRESULT HasAccess(LPCTSTR Benutzername, LPCTSTR Kennwort, LPCTSTR Domäne, LPCTSTR ComputerName, LPCTSTR accountDomain)
Diese Methode überprüft, ob ein Satz Anmeldeinformationen Lese-/Schreibzugriff auf das Computerobjekt in AD DS hat, wie in Tabelle 11 dargestellt.
Tabelle 11. HResult HasAccess
| [HRESULT] | Description |
|---|---|
| S_OK | Der Benutzer hat Zugriff |
| E_FAIL | Der Benutzer hat keinen Zugriff. Weitere Informationen finden Sie in der Protokolldatei. |
IBackgroundTask Interface
__interface IBackgroundTask : IUnknown
{
HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback);
void Start(void);
BOOL Running(void);
HRESULT Wait(DWORD waitMilliseconds);
HRESULT Terminate(DWORD exitCode);
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult);
HRESULT Close(void);
};
Übersicht
Die Statusseite verwendet diese Klasse, um Aufgaben in einem separaten Thread auszuführen. Sie können diese Klasse auch immer dann verwenden, wenn Sie Operationen in einem separaten Thread ausführen möchten. Aufgaben sind alle Klassen, die die ITask-Schnittstelle unterstützen.
Diese Schnittstelle wird von der Komponente ID_BackgroundTask (" Microsoft.Wizard.BackgroundTask") implementiert, die in der IBackgroundTask.h-Schnittstelle definiert ist.
HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)
Diese Schnittstelle initialisiert die Komponente, wie in Tabelle 12 dargestellt.
Tabelle 12. HRESULT Init
| Parameter | Beschreibung |
|---|---|
| pTask | Zeiger auf die Klasse, die den Code enthält, den Sie in einem anderen Thread ausführen möchten |
| Id | Eine Zahl, die Sie in der Finished-Methode des Rückrufs verwenden können, um anzugeben, welche Aufgabe ausgeführt wurde. Nützlich, wenn Sie mehrere Aufgaben mit derselben Rückrufmethode starten |
| pCallback | Eine Klasse, die die Finished-Methode implementiert, die immer dann aufgerufen wird, wenn die Ausführung einer Aufgabe beendet ist; Der Aufruf der Finished-Methode erfolgt im Hintergrundthread, nicht im UI-Thread |
void Start(void)
Diese Methode startet die Aufgabe in einem Hintergrundthread und gibt die in Tabelle 13 gezeigten Elemente zurück.
Tabelle 13. Hintergrundthread zurückgeben
| gibt zurück | Beschreibung |
|---|---|
| E_INVALIDARG | Der Task wird bereits ausgeführt, sodass Sie ihn derzeit nicht starten können. |
| E_FAIL | Beim Starten des Threads ist ein Problem aufgetreten. |
| S_OK | Der Thread wurde gestartet. |
BOOL Running()
Diese Methode gibt TRUE zurück, wenn die Hintergrundaufgabe derzeit ausgeführt wird, und FALSE, wenn sie nicht ausgeführt wird.
HRESULT wait(DWORD waitMilliseconds)
Diese Methode wartet, bis entweder der Thread nicht mehr ausgeführt wird oder die Anzahl der Millisekunden abgelaufen ist.
HRESULT Terminate(DWORD exitCode)
Diese Methode beendet den Thread, der gerade ausgeführt wird (siehe Tabelle 14 und Tabelle 15). Dieser Vorgang kann eine kurze Zeit dauern, bis er abgeschlossen ist, nachdem diese Methode zurückgegeben wurde.
Tabelle 14. HRESULT: Exitcode beenden
| Parameter | Beschreibung |
|---|---|
| exitCode | Der Exitcode, der an die Finished-Rückrufmethode gesendet wird, die auch über die GetExitCode-Methode verfügbar ist. |
Tabelle 15. Abbruchcodes
| gibt zurück | Beschreibung |
|---|---|
| E_FAIL | Der Aufruf zum Beenden ist fehlgeschlagen. |
| S_OK | Die Anforderung zum Beenden des Threads war erfolgreich. |
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)
Verwenden Sie diese Methode, um die Ergebnisse der Ausführung der Aufgabe im Hintergrundthread abzurufen (siehe Tabelle 16).
Tabelle 16. Ergebniscodes
| Parameter | Beschreibung |
|---|---|
| pCode | Zeiger auf ein DWORD , das bei return festgelegt wird, oder nullptr , wenn Sie den Rückgabewert nicht benötigen. Beim Beenden wird dieser Parameter auf STILL_ACTIVE festgelegt, wenn der Thread ausgeführt wird, auf den Code, der von der Execute-Methode der Aufgabe zurückgegeben wird, oder auf den Wert, der an die Terminate-Methode übergeben wird, wenn Sie diese Methode aufgerufen haben. |
| pH-Ergebnis | Zeiger auf ein HRESULT , das bei return festgelegt wird, oder nullptr , wenn Sie den HRESULT-Wert nicht benötigen. |
HRESULT Close(void)
Diese Methode gibt den Hintergrundthread frei. Sie gibt E_INVALIDARG zurück, ob der Thread derzeit ausgeführt wird, andernfalls S_OK .
ICheckBox-Schnittstelle
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void Check(BOOL-Prüfung)
Aktiviert das Kontrollkästchen setzen. Wenn die Methode TRUE ist, ist das Kontrollkästchen aktiviert. Wenn die Methode FALSE ist, wird das Kontrollkästchen deaktiviert.
BOOL IsButtonChecked()
Diese Methode meldet den aktuellen Prüfstatus eines Kontrollkästchens.
IComboBox-Schnittstelle
__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();
};
Übersicht
Diese Schnittstelle wird von der CheckBoxWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_COMBO_BOX ab.
HRESULT Bind([in] IBindableList *pList)
Verwenden Sie diese Methode, wenn Sie über eine Datenquelle verfügen, die die IBindableList-Schnittstelle implementiert. Das Listenfeld initialisiert den Inhalt mit den Beschriftungen aus dieser Liste.
HRESULT Select(int index)
Wählen Sie das Element im Kombinationsfeld am Index aus.
int Selected(void)
Diese Methode gibt den Index des ausgewählten Elements oder -1 zurück, wenn nichts ausgewählt ist.
void Add([in] LPCTSTR Untertitel)
Fügen Sie dem Kombinationsfeld manuell ein Element hinzu.
HRESULT GetText([out, retval] LPBSTR pText)
Ruft die Zeichenfolge des aktuell ausgewählten Elements im Kombinationsfeld ab.
void clear()
Entfernen Sie alle Elemente aus dem Kombinationsfeld.
IControl-Schnittstelle
__interface IControl : IUnknown
{
HRESULT SetEnable(BOOL enable);
BOOL IsEnabled(void);
HRESULT SetVisible(BOOL visible);
};
Übersicht
Diese Schnittstelle wird von der ControlWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente ab, indem Sie die GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_GENERIC verwenden.
HRESULT SetEnable(BOOL-Aktivierung)
Aktivieren oder deaktivieren Sie das Steuerelement.
BOOL IsEnabled(void)
Gibt WAHR zurück, wenn das Steuerelement aktiviert ist, FALSCH, wenn es nicht aktiviert ist.
HRESULT SetVisible(BOOL visible)
Ein- oder Ausblenden des Steuerelements.
ICpuInfo Interface
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
Übersicht
Sie erhalten diese Schnittstelle, indem Sie eine neue ID_CpuInfo Komponente erstellen. Die einzelne Methode meldet, ob die CPU 32 oder 64 Bit ist. Beachten Sie, dass diese Methode bei einem 32-Bit-Betriebssystem auf einem 64-Bit-Computer TRUE zurückgibt, da sie nur die Breite der CPU (nicht des Betriebssystems) meldet.
IDirectory Interface
__interface IDirectory : IUnknown
{
BOOL FileExists(LPCWSTR name);
BOOL FindFirst([in] LPCWSTR name);
HRESULT FoundName([out, retval] LPBSTR name);
DWORD FoundAttributes(void);
BOOL FindNext(void);
void FinishFind(void);
};
Übersicht
Die Verzeichniskomponente, die Sie mit ID_Directory erstellen, bietet eine Fassade für die Arbeit mit Verzeichnissen im Dateisystem.
BOOL FileExists(LPCWSTR name)
Diese Methode gibt TRUE zurück, wenn eine Datei mit dem von Ihnen angegebenen Namen vorhanden ist.
BOOL FindFirst([in] LPCWSTR name)
Diese Methode findet eine erste Übereinstimmung für den von Ihnen angegebenen Namen. Er unterstützt Platzhalterzeichen und gibt sowohl Datei- als auch Verzeichnisnamen zurück. Die Methode gibt WAHR zurück, wenn eine Übereinstimmung gefunden wurde, andernfalls FALSCH.
HRESULT FoundName([out, retval] LPBSTR name)
Diese Methode ruft den Namen der gefundenen Datei mit einem Aufruf von FindFirst oder FindNext ab.
DWORD FoundAttributes(void)
Diese Methode gibt das Attribut für die zuletzt gefundene Datei oder das zuletzt gefundene Verzeichnis zurück. Sie können Code wie folgt verwenden, um zu testen, ob es sich um ein Verzeichnis handelt:
pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext(void)
Suchen Sie den nächsten. Diese Methode gibt WAHR zurück, wenn eine andere Übereinstimmung gefunden wurde, andernfalls FALSCH.
void FinishFind(void)
Diese Methode gibt Ressourcen frei, die für den Suchvorgang verwendet werden.
IDomainJoinValidator-Schnittstelle
__interface IDomainJoinValidator : IUnknown
{
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);
HRESULT IsUsernameValid(LPCWSTR domainName);
BOOL CanModifyComputerAdEntry(LPCWSTR domainName);
};
Übersicht
Sie erhalten eine instance dieser Schnittstelle mithilfe des ID_DomainJoinValidator-Werts der Vorlagenfunktion CreateInstance.
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)
Initialisieren Sie die Instance, wie in Tabelle 17 dargestellt.
Tabelle 17. HRESULT-Init – Instanzinitialisierung
| Parameter | Beschreibung |
|---|---|
| pLogger | Die Logger-Instance, die Ihrer Seite über die Logger-Methode der Seite zur Verfügung steht |
| pContainer | Übergibt die Ergebnisse der Containermethode Ihrer Seite. |
| pUsername | Das Textfeld mit dem zu überprüfenden Benutzernamen |
| pPassword | Das Textfeld mit dem zu überprüfenden Kennwort |
| PComputerName | Das Textfeld, das den Namen des Computers enthält, der schließlich mit der Domäne verbunden wird |
HRESULT IsUsernameValid(LPCWSTR domainName)
Diese Methode verwendet die IADHelper-ValidLogon-Methode>, um die Arbeit zu erledigen. Weitere Informationen finden Sie in dieser Methode.
BOOL CanModifyComputerAdEntry(LPCWSTR domainName)
Überprüfen Sie, ob der Benutzer über Berechtigungen zum Ändern des Computereintrags verfügt. Die meiste Arbeit wird von IADHelper-HasAccess> erledigt. Wenn diese Methode FALSCH zurückgibt, überprüfen Sie die Protokolldatei auf Details.
IDriveList-Schnittstelle
__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)
Rufen Sie diese Methode auf, bevor Sie andere Komponenten aufrufen. Sie müssen ein neues WmiRepository erstellen, bevor Sie diese Methode aufrufen.
HRESULT SetWhereClause(LPCTSTR whereClause)
Mit dieser Methode können Sie Text hinzufügen, der als "where"-Klausel in der Abfrage angezeigt wird. In der folgenden Zeile werden beispielsweise nur USB-Laufwerke zurückgegeben:
pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(__int64 size)
Legen Sie die Laufwerkgröße auf "Bytes" für Laufwerke fest, die von der Abfrage zurückgegeben werden.
HRESULT Update(void)
Ausführen der Abfrage. Die nach dem Aufrufen dieser Methode verfügbare Laufwerksliste ist nach Laufwerkbuchstaben sortiert.
HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned)
Diese Methode fügt die Namen zusätzlicher Eigenschaften hinzu, die Sie in den Abfrageergebnissen verfügbar machen möchten. Rufen Sie diese Methode auf, bevor Sie Update aufrufen. Tabelle 18 zeigt drei der nützlichen Eigenschaften.
Tabelle 18. HRESULT AddProperty: nützliche Eigenschaften
| Section | Eigenschaft | Beschreibung |
|---|---|---|
| DISKQUERY_LOGICALDISK | Größe | Die Größe in Bytes, dargestellt als Zeichenfolge |
| DISKQUERY_DISKPARTITION | DiskIndex | Die Datenträgernummer als ganze Zahl, beginnend bei 0 |
| DISKQUERY_LOGICALDISK | VolumeName | Die Volumebezeichnung |
size_t Count(void)
Die Anzahl der von der Abfrage zurückgegebenen Datensätze. Rufen Sie "Update" auf, bevor Sie diese Methode aufrufen.
HRESULT, GetProperty(size_t index, LPCTSTR, propName, LPVARIANT value)
Diese Methode ruft den Wert einer Eigenschaft aus den Abfrageergebnissen ab, wie in Tabelle 19 dargestellt.
Table 19. HRESULT GetProperty
| Parameter | Beschreibung |
|---|---|
| Index | Nullbasierter Index für den Ergebnissatz |
| propName | Name der Eigenschaft, z. B. "Größe" |
| Wert | Bei der Rückgabe enthält dieser Parameter einen Variantenwert der Eigenschaft |
HRESULT, GetCaption(size_t index, LPBSTR, pCaption)
Diese Methode ruft die Untertitel für einen Datensatz ab, der mit der Caption-Eigenschaft identisch ist.
IImageList-Schnittstelle
__interface IImageList
{
HRESULT CreateImageList(int width, int height, UINT flags);
HImageList GetImageList(void);
int AddImage(HInstance hInstance, int resourceId);
};
Übersicht
Diese Schnittstelle wird von der ImageList-Komponente implementiert. Sie rufen eine Instance dieser Komponente von der IListView-Schnittstelle ab.
HRESULT CreateImageList(int width, int height, UINT flags)
Erstellen Sie eine neue Bildliste, die von dieser Komponente verwaltet wird. Rufen Sie diese Methode nur einmal auf.
HImageList GetImageList(void)
Diese Methode gibt das Handle für die Bildliste zurück, falls Sie andere Operationen für die Bildliste ausführen müssen.
int AddImage(HInstance hInstance, int resourceId)
Fügen Sie der Imageliste ein neues Bild aus einer Ressource hinzu, wie in Tabelle 20 dargestellt.
Tabelle 20. HRESULT IImageList-Schnittstelle
| Parameter | Beschreibung |
|---|---|
| hInstance | Instanzhandle des Moduls, das die Bitmapressource enthält |
| resourceId | ID der Ressource, die in die Imageliste geladen werden soll |
IListView-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle wird von der ControlWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_LIST_VIEW ab.
int AddItem([in] LPCTSTR text)
Fügen Sie dem Listenfeld eine neue Zeile hinzu. Die Methode gibt den Index des soeben hinzugefügten Elements zurück.
int AddColumn(int width, [in] LPCTSTR text)
Hinzufügen einer neuen Spalte zur Listenansicht.
HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)
Legen Sie den Text in einer anderen Spalte als der ersten Spalte des Listenfelds fest, wie in Tabelle 21 dargestellt.
Tabelle 21. HRESULT SetSubItem
| Parameter | Beschreibung |
|---|---|
| Index | Der Index des Listenelements, das Sie ändern möchten |
| Spalte | Der Index der Spalte, die Sie aktualisieren möchten; die erste Spalte wird mit AddItem festgelegt, die Spalten zwei und die folgenden werden mit dieser Methode festgelegt |
| text | Die Zeichenfolge, die in der Spalte angezeigt werden soll |
int GetWidth(void)
Diese Methode gibt die Breite des gesamten Textfelds zurück.
void SetExtendedStyle(DWORD-Format)
Mit dieser Methode können Sie erweiterte Formatvorlagen im Listenfeld festlegen, z. B.:
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
Diese Methode gibt den Index des aktuell ausgewählten Listenansichtselements zurück.
HRESULT SelectItem(int index)
Das ausgewählte Element in der Liste auf diesen Index festlegen.
BOOL IsItemChecked(int index)
Diese Methode gibt WAHR zurück, wenn ein Element in der Liste ausgewählt ist. Diese Methode erfordert, dass Sie SetExtendedStyle aufrufen, um das Kontrollkästchenformat festzulegen.
int GetItemCount(void)
Diese Methode gibt die Anzahl der Elemente in der Listenansicht zurück.
HRESULT CreateImageList(int width, int height, UINT flags)
Erstellen Sie eine neue Bildliste, und fügen Sie sie an die Listenansicht an.
int AddImage(HINSTANCE hInstance, int resourceId)
Hinzufügen eines Bildes zur Bildliste der Listenansicht. Sie müssen zuerst CreateImageList aufrufen.
HRESULT SetImage(int index, int imageIndex)
Legen Sie das Bild fest, das auf der linken Seite für ein bestimmtes Element der Listenansicht angezeigt wird.
HRESULT Clear(void)
Entfernen aller Elemente aus der Listenansicht.
IProgressBar Interface
__interface IProgressBar : IControl
{
HRESULT SetPercentage(int position);
int GetPercentage(void);
};
Übersicht
Diese Schnittstelle wird von der ProgressBarWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_PROGRESS_BAR ab.
HRESULT SetPercentage(int position)
Lege die Position der Statusanzeige mit einer Zahl zwischen 0 und 100 fest. Standardmäßig haben neue Win32-Statusanzeigen® einen maximalen Bereich von 100.
int GetPercentage(void)
Diese Methode gibt die aktuelle Position der Statusanzeige zurück.
IRadioButton-Schnittstelle
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
Übersicht
Diese Schnittstelle wird durch die RadioButtonWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_RADIO_BUTTON ab.
void SetGroup(int firstId, int lastId)
Stellen Sie dem Wrapper den Bereich der Optionsfelder zur Verfügung, die als Gruppe behandelt werden sollen. Rufen Sie diese Methode auf, bevor Sie CheckRadio aufrufen.
void CheckRadio(int id)
Legen Sie das spezifische Optionsfeld als einzelne Schaltfläche in der Gruppe der ausgewählten Optionsfelder fest. Rufen Sie SetGroup auf, bevor Sie diese Methode aufrufen.
BOOL IsButtonChecked(int id)
Diese Methode gibt TRUE zurück, wenn das Optionsfeld gerade ausgewählt ist, andernfalls FALSE.
void EnableRadio(int id, BOOL enable)
Mit dieser Methode wird ein Optionsfeld aktiviert bzw. deaktiviert.
IStaticText-Schnittstelle
__interface IStaticText : IControl
{
HRESULT SetText([in] LPCTSTR pText);
HRESULT GetText([out, retval] LPBSTR pText);
};
Übersicht
Diese Schnittstelle wird von der StaticTextWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente ab, indem Sie die GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_STATIC_TEXT abrufen.
HRESULT SetText([in] LPCTSTR pText)
Legen Sie den Text für das Steuerelement fest.
HRESULT GetText([out, retval] LPBSTR pText)
Diese Methode gibt den aktuellen Wert des Texts für das Steuerelement zurück.
ITask-Schnittstelle
__interface IControl : IUnknown
{
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
HRESULT Execute(LPDWORD pReturnCode);
};
Implementieren Sie diese Schnittstelle, wenn Ihre Komponente als Aufgabe auf der Preflight-Seite verfügbar sein soll oder wenn Sie die BackgroundTask-Komponente verwenden möchten, um an einem Hintergrundthread zu arbeiten.
Im Folgenden finden Sie Komponenten, die die ITask-Schnittstelle implementieren:
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)
Wenn Sie eine Aufgabe für die Preflight-Seite schreiben, rufen Sie diese Methode auf, um Ihre Aufgabe zu initialisieren. Die .config Datei enthält XML, das in etwa wie folgt aussehen könnte:
<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>
Der pProperties-Parameter bietet Zugriff auf die drei Setterwerte, während der pTaskSettings-Parameter Zugriff auf das Task-Element und die untergeordneten Elemente bietet. Die meisten Tasks müssen nur Daten aus dem pProperties-Parameter lesen.
Ausführen
HRESULT Execute(LPDWORD pReturnCode)
Hier schreiben Sie den Code, der die Aufgabe ausführt. Diese Methode sollte S_OK zurückgeben, wenn keine Fehler aufgetreten sind, und sie kann ein anderes HRESULT zurückgeben, wenn während der Ausführung der Aufgabe ein Fehler aufgetreten ist. Andere Werte als S_OK, die <von dieser Methode zurückgegeben werden, werden mit <Error-Elementen> im Abschnitt ExitCodes> abgeglichen, wenn Sie die Preflight-Seite verwenden.
Der pReturnCode-Parameter muss mit einer Zahl aktualisiert werden, die den Status der Aufgabe meldet. Diese Werte werden von der Preflights-Seite mit <ExitCode-Elementen> abgeglichen.
ITreeView-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle wird von der TreeViewWrapper-Komponente implementiert. Sie rufen eine instance dieser Komponente mit der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_TREE_VIEW ab.
void EnableCheckboxes(void)
Mit dieser Methode werden Kontrollkästchen im Steuerelement für die Strukturansicht aktiviert, indem die TVS_CHECKBOXES Formatvorlage festgelegt wird.
HRESULT CreateImageList(int width, int height, UINT flags)
Fügen Sie dem Strukturansicht-Steuerelement eine neue Bildliste hinzu. Der flags-Parameter wird beim Aufruf der ImageList_Create Win32-Funktion übergeben.
int AddImage(HINSTANCE hInstance, int resourceId)
Fügen Sie der Imageliste ein Bild aus einer Ressource (resourceId) im Modul mit dem instance-Handle hInstance hinzu.
HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)
Fügen Sie der Strukturansicht einen Knoten hinzu. Der neue Knoten wird auf der obersten Ebene hinzugefügt, wenn hParent NULL ist. Geben Sie andernfalls das Handle für das übergeordnete Element an, dem Sie das neue Element hinzufügen möchten. Diese Methode gibt das Handle an das neue Element zurück.
void SetImage(HTREEITEM item, int image, int expandImage)
Legen Sie fest, welches Bild als Strukturansichtselement verwendet werden soll. Sie können sowohl das normale als auch das erweiterte Bild festlegen.
void clear(void)
Entfernen aller Elemente aus der Strukturansicht.
BOOL SetFirstVisible(HTREEITEM-Element)
Stellen Sie sicher, dass das Strukturansichtselement sichtbar ist. Die Strukturansicht wird bei Bedarf gescrollt, um dieses Element sichtbar zu machen.
BOOL SelectItem(HTREEITEM-Element)
Legen Sie das aktuell ausgewählte Element auf das von Ihnen bereitgestellte Element fest. Sie können SetFirstVisible danach aufrufen, um sicherzustellen, dass das neu ausgewählte Element sichtbar ist.
void CheckItem(HTREEITEM item, UINT checkState)
Mit dieser Methode wird grundsätzlich das Bild festgelegt, das für das Kontrollkästchen in der Strukturansicht angezeigt wird. Diese Bilder befinden sich in einem separaten ImageList-Steuerelement , das von der Strukturansicht verwaltet wird. Standardmäßig enthält diese Bilderliste drei Bilder, die in Tabelle 22 dargestellt sind.
Table 22.void CheckItem Image List Default
| checkState | Beschreibung |
|---|---|
| 0 | Leer |
| 1 | Gelöscht |
| 2 | Ausgewählt |
HTREEITEM SelectedItem(void)
Diese Methode gibt das Handle des aktuell ausgewählten Strukturansichtselements zurück.
int SetItemHeight(SHORT height)
Mit dieser Methode wird die Höhe aller Elemente im Strukturansichtssteuerelement in Pixel festgelegt. Sie gibt die vorherige Höhe in Pixel zurück.
HRESULT EnableItem(HTREEITEM item, BOOL enable)
Diese Methode aktiviert oder deaktiviert ein einzelnes Element in der Struktur. Durch das Deaktivieren eines Elements mit Kindern werden die Kinder nicht deaktiviert.
void expand(HTREEITEM, hItem, BOOL, expand)
Mit dieser Methode wird ein Knoten in der Struktur erweitert oder reduziert.
HTREEITEM GetChild(HTREEITEM hParent)
Diese Methode gibt das erste untergeordnete Element eines Strukturansichtselements oder NULL zurück, wenn keine untergeordneten Elemente vorhanden sind.
HTREEITEM GetParent(HTREEITEM hNode)
Diese Methode gibt das Handle des übergeordneten Elements für einen Knoten in der Strukturansicht oder NULL zurück, wenn sich der Knoten auf der obersten Ebene befindet.
HTREEITEM GetNextItem(HTREEITEM hPrevious)
Sie können diese Methode mit einem Handle aufrufen, das GetChild zurückgibt, um alle untergeordneten Elemente eines Knotens zu durchlaufen. Diese Methode gibt das nächste gleichgeordnete Element in der Struktur zurück, das dasselbe übergeordnete Element hat.
UINT IsChecked(HTREEITEM item)
Diese Methode gibt 0 zurück, wenn der Strukturansichtsknoten nicht ausgewählt ist, und 1 , wenn er ausgewählt ist.
BOOL IsEnabled(HTREEITEM-Element)
Diese Methode gibt TRUE zurück, wenn der Strukturansichtsknoten aktiviert ist, andernfalls FALSE.
INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)
Diese Methode ist nur für den internen Gebrauch bestimmt.
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)
Rufen Sie diese Methode auf, wenn Sie benachrichtigt werden möchten, wenn sich das ausgewählte Element oder der Benutzer den Prüfstatus eines Strukturansichtselements ändert. Sie müssen das ITreeViewEvent in Ihrer Komponente implementieren, um diese Rückrufe zu empfangen.
void SetSelectedBackColor(COLORREF color)
Legen Sie die Hintergrundfarbe fest, die für das ausgewählte Element verwendet wird.
IWmiIteration-Schnittstelle
__interface IWmiIterator : IUnknown
{
HRESULT Next(void);
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Übersicht
Sie verwenden diese Schnittstelle normalerweise zusammen mit IWmiRepository, wenn Sie mit WMI-Aufrufen arbeiten. Die IWmiIteration-Schnittstelle ermöglicht es Ihnen, die von einer Abfrage zurückgegebenen Werte zu durchlaufen.
HRESULT Next(void)
Fahren Sie mit dem nächsten Element in den Abfrageergebnissen fort, wie in Tabelle 23 dargestellt.
Tabelle 23. HRESULT Next(void) Abfrage gibt zurück
| HRRESULT | Beschreibung |
|---|---|
| S_OK | Zum nächsten Ergebnis verschoben; Sie können GetProperty verwenden, um Eigenschaften dieses Ergebnisses abzurufen. |
| S_FALSE | Es sind keine weiteren Elemente in der Liste vorhanden. |
| E_NOT_SET | Es liegen keine Abfrageergebnisse vor |
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)
Diese Methode ruft den Wert einer Eigenschaft aus dem aktuellen Ergebnissatz ab, wie in Tabelle 24 und Tabelle 25 dargestellt.
Tabelle 24. HRESULT GetProperty
| Parameter | Beschreibung |
|---|---|
| propertyName | Name der Eigenschaft, die Sie abrufen möchten |
| pValue | Verweist auf eine VARIANT-Struktur, die bei der Rückgabe den Eigenschaftswert enthält |
Tabelle 25. HRESULT GetProperty Result
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Der Eigenschaftswert wurde abgerufen. |
| WBEM_E_NOT_FOUND | Es gibt keine Eigenschaft mit dem Namen. |
| E_NOT_VALID_STATE | Es ist kein aktueller Datensatz vorhanden. |
Hinweis
Die GetProperty-Methode kann andere WMI-Fehlercodes als die in Tabelle 25 aufgeführten zurückgeben. Die aufgeführten Werte sind die allgemeinen Ergebnisse, die zurückgegeben werden.
IWmiRepository-Schnittstelle
__interface IWmiRepository : IUnknown
{
HRESULT SetNamespace(LPCWSTR namespaceName);
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Übersicht
Diese Schnittstelle wird von der WmiRepository-Komponente (ID_WmiRepository) implementiert.
HRESULT SetNamespace(LPCWSTR namespaceName)
Diese Methode legt den WMI-Namespace fest, der für die Abfrage verwendet wird. Rufen Sie diese Methode auf, bevor Sie ExecQuery aufrufen. Wenn Sie diese Methode nicht aufrufen, lautet der Namespace root\cimv2. Diese Methode gibt immer S_OK zurück.
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator)
Führen Sie eine Abfrage für den WMI-Namespacesatz mit einem Aufruf von SetNamespace aus, wie in Tabelle 26 und Tabelle 27 dargestellt.
Tabelle 26. HRESULT ExecQuery
| Parameter | Beschreibung |
|---|---|
| Query | Die Zeichenfolge für die WMI-Abfrage, die Sie ausführen möchten |
| ppIterator | Übergeben Sie einen Zeiger an einen Schnittstellenzeiger, der bei der Rückgabe mit einer Schnittstelle ausgefüllt wird, über die Sie auf die Abfrageergebnisse zugreifen können |
Tabelle 27. HRESULT-Abfrageergebnis
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Abfrage erfolgreich |
| Other | Wenn die Abfrage nicht erfolgreich war, wird ein WMI-HRESULT zurückgegeben. |
IFormController-Schnittstelle
__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);
};
Übersicht
Jede Seite im UDI-Assistenten hat ihren eigenen Formularcontroller, der diese Schnittstelle implementiert. Mit diesem Controller verbinden Sie die Felddaten in der .config XML-Datei mit den Steuerelementen auf der Seite. Der Formularcontroller übernimmt dann viele Details für Sie.
Einrichten des Formulars
Richten Sie im Allgemeinen den Formularcontroller in der OnWindowCreated-Methode Ihrer Seite ein. Dazu müssen in der Regel die in Tabelle 28 gezeigten Methoden aufgerufen werden.
Tabelle 28. OnWindowCreated-Methode
| Methode | Beschreibung |
|---|---|
| Init | Initialisiert den Formularcontroller |
| AddField | Stellt eine Verbindung zwischen einem Feld in der XML-Datei .config, bei dem es sich um einen Zeichenfolgennamen handelt, und einem Steuerelement im Dialogfeld Ihrer Seite bereit, bei dem es sich um eine ID handelt |
| AddRadioGroup | Wird verwendet, um ein Optionsfeld mit einer Gruppe und einem Steuerelement im Dialogfeld zu verbinden. |
| AddToGroup | Ermöglicht Ihnen "untergeordnete" Steuerelemente, die zusammen mit ihrem übergeordneten Element aktiviert oder deaktiviert werden oder basierend darauf, welches Optionsfeld ausgewählt ist |
| InitFields | Rufen Sie diese Aufforderung auf, nachdem Sie alle Add-Methoden zum Einrichten des Formulars aufgerufen haben |
| Validate | Führt die anfängliche Validierung durch |
Verarbeiten von Formularereignissen
Fügen Sie Ihrer OnControlEvent-Methode den folgenden Aufruf hinzu:
Form()->ControlEvent(eventId, controlId);
Dieser Aufruf gibt Ereignisse an den Formularcontroller weiter, damit dieser formularbezogene Ereignisse verarbeiten kann.
Formulardaten speichern
Rufen Sie in der OnNextSelected-Methode die in Tabelle 29 gezeigten Formularmethoden auf.
Tabelle 29. OnNextSelected-Methode
| Methode | Beschreibung |
|---|---|
| InitSection | Enthält den Namen des Abschnitts , der auf der Zusammenfassungsseite für diese Seite angezeigt wird |
| SaveFields | Feldwerte in Tasksequenzvariablen und auf der Seite "Zusammenfassung" speichern |
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)
Sie rufen diese Methode normalerweise am Anfang der OnWindowCreated-Methode Ihrer Seite auf. Der Befehl sollte in etwa wie folgt aussehen:
Form()->Init(View(), Container());
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)
Diese Methode wird intern aufgerufen, und Sie sollten sie nicht selbst aufrufen. Er stellt dem Formularcontroller den XML-Code der Seite zur Verfügung.
Validieren
HRESULT Validate(void)
Diese Methode führt alle Validatoren aus, die an Steuerelemente angefügt sind. Wenn ein Validierungssteuerelement nicht erfolgreich ist, zeigt der Formularcontroller eine Warnmeldung an, deaktiviert die Schaltfläche "Weiter " und stoppt dann die Verarbeitung von Validierungssteuerelementen. In der Regel müssen Sie diese Methode nur am Ende der OnWindowCreated-Methode aufrufen. Es wird immer S_OK zurückgegeben.
AddToGroup
AddToGroup(int groupControlId, int controlId)
Diese Methode fügt ein Steuerelement als "untergeordnetes Element" eines Kontrollkästchens oder Optionsfelds hinzu, wie in Tabelle 30 dargestellt. Alle diese untergeordneten Steuerelemente werden deaktiviert, wenn das übergeordnete Steuerelement nicht ausgewählt ist. Die Methode gibt immer S_OK zurück.
Tabelle 30. AddToGroup
| Parameter | Beschreibung |
|---|---|
| groupControlId | Die ID des Kontrollkästchens oder Optionsfelds, das den Aktivierungsstatus des Kindersteuerelements steuert |
| Controlld | Die ID des Steuerelements, das Sie als untergeordnetes Steuerelement hinzufügen möchten. |
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)
Diese Methode aktualisiert den Aktivierungs- oder DeaktivierungsStatus der untergeordneten Steuerelemente einer Gruppe basierend auf dem Status des übergeordneten Steuerelements. Im Allgemeinen müssen Sie diese Methode nicht selbst aufrufen, da der Formularcontroller sie für Sie aufruft.
AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)
Rufen Sie diese Methode nur auf, wenn Sie einen Validator haben, den Sie im Code statt mit dem XML erstellen möchten. Diese Methode gibt immer S_OK zurück.
AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)
Rufen Sie diese Methode nur auf, wenn Sie einen Validator haben, den Sie im Code statt mit dem XML erstellen möchten.
DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)
Rufen Sie diese Methode auf, um entweder explizit den Validator für ein Steuerelement zu deaktivieren oder die normale Validierung wiederherzustellen, wie in Tabelle 31 dargestellt. Diese Methode ist z. B. nützlich, wenn Sie Regeln für Steuerelemente aktiviert/deaktiviert haben, die nicht von der Formularüberprüfung abgedeckt werden, und Sie die Überprüfung für ein Steuerelement deaktivieren müssen. Mit anderen Worten, Sie würden diese Methode normalerweise nicht aufrufen. Diese Methode gibt immer S_OK zurück.
Tabelle 31. HRESULT DisableValidation
| Parameter | Beschreibung |
|---|---|
| controlId | Das Steuerelement, für das Sie die Gültigkeitsprüfung aktivieren oder deaktivieren möchten |
| Disable | Legen Sie auf TRUE fest, um die Überprüfung zu deaktivieren, und auf FALSE, um die normale Überprüfung wiederherzustellen |
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)
Fügen Sie eine Steuerelementzuordnung zwischen dem Namen in einem Field-Element der .config XML-Datei und der Steuerelement-ID im Dialogfeld Ihrer Seite hinzu, wie in Tabelle 32 gezeigt. Sie müssen diese Methode vor dem Aufruf von InitFields aufrufen, da InitFields diese Informationen verwendet. Diese Methode gibt immer S_OK zurück.
Tabelle 32. HRESULT AddField
| Parameter | Beschreibung |
|---|---|
| Fieldname | Der Name des Felds, wie er im XML-Code Ihrer Seite angezeigt wird |
| controlId | Die ID des Steuerelements in der Vorlage für das Dialogfeld Ihrer Seite |
| suppressLog | auf TRUE setzen, wenn Sie nicht möchten, dass die Werte aus diesem Feld in die Protokolldatei geschrieben werden. Legen Sie diesen Parameter für Kennwort- oder PIN-Felder immer auf TRUE fest. |
| Typ | Der Steuerelementtyp, bei dem es sich um eine der folgenden Optionen handelt: - 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)
Diese Methode fügt einem benannten Optionsfeldgruppe ein Steuerelement hinzu, wie in Tabelle 33 dargestellt. Sie müssen dies vor der InitFields-Methode aufrufen, da diese Methode Attribute des RadioGroup-Elements verwendet, um die Einstellungen für alle Optionsfeldsteuerelemente in der Gruppe zu steuern. Optionsfeldgruppen können beispielsweise gesperrt werden, sodass alle Optionsfelder deaktiviert werden, aber untergeordnete Steuerelemente nur basierend auf dem ausgewählten Optionsfeld aktiviert oder deaktiviert werden. Diese Methode gibt immer S_OK zurück.
Tabelle 33. HRESULT AddRadioGroup
| Parameter | Beschreibung |
|---|---|
| groupName | Eine Zeichenfolge, die eine Gruppe von Optionsfeldern auf dieser Seite definiert |
| radioControlId | Die ID eines einzelnen Optionsfelds, das dieser Gruppe hinzugefügt werden soll |
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)
Mit dieser Methode können Sie eine ganze Optionsfeldgruppe aktivieren oder deaktivieren. Durch das Deaktivieren einer Optionsfeldgruppe werden alle Optionsfeldsteuerelemente in der Gruppe sowie alle untergeordneten Elemente dieser Optionsfelder, die mit AddToGroup hinzugefügt wurden, deaktiviert. Siehe Tabelle 34 und Tabelle 35.
Tabelle 34. EnableRadioGroup
| Parameter | Beschreibung |
|---|---|
| groupName | Name einer Optionsfeldgruppe, die Sie bereits mit einem Aufruf von AddRadioGroup definiert haben |
| Enable | Legen Sie den Wert auf TRUE fest, um die Optionsfeldgruppe zu aktivieren, und auf FALSE, um die Gruppe zu deaktivieren |
Tabelle 35. HRESULT EnableRadioGroup
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Gruppe aktiviert oder deaktiviert |
| E_INVALIDARG | Es gibt keine Optionsfeldgruppe mit dem von Ihnen angegebenen Namen |
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)
Rufen Sie AddField vor dem Aufrufen dieser Methode für jedes Feld auf, das der XML-Code steuern kann. Diese Methode gibt immer S_OK zurück.
Der Parameter pFieldCallback ist optional. Wenn Sie es bereitstellen, ruft der Formularcontroller SetFieldDefault für Steuerelemente auf, die weder CONTROL_STATIC_TEXT noch CONTROL_CHECK_BOX sind. Mit diesem Verhalten können Sie einen Standardwert aus dem XML-Code abrufen und ihn selbst im Steuerelement festlegen.
SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)
Diese Methode speichert Feldwerte in Tasksequenzvariablen und in den Zusammenfassungsdaten, die auf der Seite Zusammenfassung angezeigt werden. Wenn Sie einen Zeiger in pFieldCallback bereitstellen, können Sie Speicherwerte für Steuerelemente verarbeiten, die CONTROL_STATIC_TEXT nicht unterstützen.
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
Mit dieser Methode können Sie feststellen, ob ein Feld im XML-Code deaktiviert wurde.
InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)
Diese Methode initialisiert die Zusammenfassungsdaten, die auf der Seite Zusammenfassung angezeigt werden, wie in Tabelle 36 dargestellt. Rufen Sie diese Methode in Ihrer OnNextSelected-Methode auf, bevor Sie SaveFields aufrufen. Diese Methode gibt immer S_OK zurück.
Tabelle 36. HRESULT InitSection
| Parameter | Beschreibung |
|---|---|
| Key | Dieser Parameter sollte für Ihre Seite eindeutig sein. Mit diesem Wert wird sichergestellt, dass jede Seite über eigene zusammenfassende Informationen verfügt. |
| sectionCaption | Die Kopfzeile, die auf der Seite "Zusammenfassung " für die zusammenfassenden Informationen dieser Seite angezeigt wird. In der Regel verwenden Sie DisplayName() als Wert für diesen Parameter. |
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)
Mit dieser Methode können Sie der Zusammenfassungsseite Zusammenfassungselemente hinzufügen, die über die mit XML festgelegten Elemente hinausgehen. Siehe Tabelle 37.
Tabelle 37. HRESULT AddSummaryItem
| Parameter | Beschreibung |
|---|---|
| First | Die Untertitel für das Zusammenfassungselement, die auf der linken Seite angezeigt werden |
| Zweiter | Der Wert, der auf der rechten Seite angezeigt wird |
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)
Rufen Sie diese Methode für Tasksequenzvariablen auf, für die die Werte nicht in die Protokolldatei geschrieben werden sollen. Rufen Sie diese Methode für Tasksequenzvariablen auf, in denen Kennwörter, PINs oder andere vertrauliche Werte gespeichert werden, die ein Benutzer möglicherweise eingibt.
SaveText
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)
Diese Methode speichert den Wert eines Textsteuerelements sowohl in einer Tasksequenzvariablen als auch im Zusammenfassungsabschnitt. In der Regel müssen Sie diese Methode nicht selbst aufrufen, da der Formularcontroller dies für alle Felder vornimmt. Siehe Tabelle 38.
Tabelle 38. HRESULT SaveText
| Parameter | Beschreibung |
|---|---|
| controlId | Die ID des Textfelds, das den Wert enthält, den Sie speichern möchten (oder jedes andere Steuerelement, das Text zurückgeben kann) |
| tsVariableName | Der Name der Tasksequenzvariablen, die Sie ändern möchten |
| summaryCaption | Die Untertitel auf der Seite "Zusammenfassung" für diesen Wert |
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)
Diese Methode liest den Wert einer Tasksequenzvariablen und legt das Textfeld auf diesen Wert fest.
ControlEvent
void ControlEvent(WORD eventId, WORD controlId)
Rufen Sie diese Methode für Ihre OnControlEvent-Methode auf, um sicherzustellen, dass der Formularcontroller Steuerelementereignisse verarbeiten kann, was für eine ordnungsgemäße Funktion erforderlich ist. Die Werte, die Sie an diese Methode übergeben, sind dieselben Werte, die an die OnControlEvent-Methode übergeben werden.
IsValid
BOOL IsValid(void)
Diese Methode gibt den Status der letzten Überprüfung des Formulars zurück. Wenn eines der Steuerelementvalidierungssteuerelemente einen Fehler gemeldet hat, gibt diese Methode FALSCH zurück. Anders ausgedrückt: Sie gibt nur dann TRUE zurück, wenn alle Steuerelemente auf der Seite gültig sind.
IValidator-Schnittstelle
__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);
};
Übersicht
Validierungssteuerelemente sind Komponenten, die ein einzelnes Steuerelement auf Ihrer Seite überprüfen können. Die einfachste Möglichkeit zum Implementieren eines Validators besteht darin, es zu einer Unterklasse der BaseValidator-Klasse zu machen, die in der Headerdatei BaseValidator.h definiert ist.
HRESULT Init(IControl *pControl, LPCTSTR message)
Wenn Sie ein Validator im Code erstellen, können Sie diese Methode aufrufen, um den Validator zu initialisieren. Siehe Tabelle 39.
Tabelle 39. HRESULT Init
| Parameter | Beschreibung |
|---|---|
| pControl | Das Steuerelement, das der Validator überprüfen muss |
| Meldung | Die Meldung, die auf der Seite angezeigt werden soll, wenn das Steuerelement ungültig ist |
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)
Der Formularcontroller ruft diese Methode auf, um Validatoren zu initialisieren, die basierend auf dem XML-Code der Seite erstellt werden. Siehe Tabelle 40.
Tabelle 40. HRESULT-Init-Methode
| Parameter | Beschreibung |
|---|---|
| pControl | Das Steuerelement, das der Validator überprüfen muss |
| pContainer | Falls Ihr Validator Zugriff auf den Logger benötigt oder andere Komponenten erstellen muss |
| pProperties | Bietet Zugriff auf die Eigenschaften (Setter-Elemente) für Ihren Validator |
BOOL, IsValid(LPBSTR pMessage)
Diese Methode gibt TRUE zurück, wenn das Steuerelement gültig ist, oder FALSE, wenn das Steuerelement ungültig ist. Bei der Rückgabe sollte pMessage mit einem neuen BSTR ausgefüllt werden, das die Meldung enthält, die angezeigt werden soll, wenn das Steuerelement ungültig ist.
HRESULT SetProperty(int propertyId, LPVARIANT pValue)
Sie können diese Methode implementieren, wenn Sie zusätzliche Werte benötigen, die nicht im XML enthalten sind.
HRESULT SetProperty(int propertyId, IUnknown *pUnknown)
Sie können diese Methode implementieren, wenn Sie zusätzliche Werte benötigen, die nicht im XML enthalten sind.
HRESULT SetProperty)(int propertyId, LPCTSTR pValue)
Sie können diese Methode implementieren, wenn Sie zusätzliche Werte benötigen, die nicht im XML enthalten sind.
IRegEx-Schnittstelle
__interface IRegEx : IUnknown
{
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);
HRESULT GetMatch(size_t index, LPBSTR pValue);
};
Diese Methode wird von der ID_Regex-Komponente (IRegex.h) implementiert und bietet Unterstützung für die Verarbeitung regulärer Ausdrücke.
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)
Diese Methode führt den regulären Ausdruck für den Eingabetext aus. Für die eigentliche Arbeit wird die Funktion regex_match der C++-Standardbibliothek verwendet. Die Methode gibt WAHR zurück, wenn Übereinstimmungen vorhanden sind, andernfalls FALSCH.
HRESULT GetMatch(size_t index, LPBSTR pValue)
Mit dieser Methode können Sie die Übereinstimmungen aus dem letzten MatchesRegex-Aufruf abrufen. Beachten Sie, dass bei dieser Methode kein Fehler bei der Verarbeitung auftritt und sie entweder S_OK zurückgibt oder eine Ausnahme auslöst.
ISummaryInfo-Schnittstelle
__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);
};
Sie sollten diese Schnittstelle nicht direkt verwenden müssen. Verwenden Sie stattdessen IFormController.
ISummaryBag
__interface ISummaryBag : IUnknown
{
size_t Count(void);
HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);
HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);
};
Sie sollten diese Schnittstelle nicht direkt verwenden müssen. Verwenden Sie stattdessen IFormController.
ITSVariableBag-Schnittstelle
__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);
};
Diese Schnittstelle ermöglicht den Zugriff auf Tasksequenzvariablen. Sie können auf diese Schnittstelle mit der TSVariables()- Methode Ihrer Seite zugreifen.
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)
Diese Methode liest den Wert einer Tasksequenzvariablen.
Hinweis
Werte werden nach dem ersten Lesen zwischengespeichert.
void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)
Diese Methode legt den Wert einer Tasksequenzvariablen fest. Dieser Wert wird im Arbeitsspeicher gespeichert. Tasksequenzwerte werden geschrieben, sobald Sie im UDI-Assistenten die Option "Fertig stellen " auswählen.
void clear(void)
Diese Methode entfernt alle Tasksequenzwerte, die im Arbeitsspeicher gespeichert wurden.
HRESULT Remove([in] LPCTSTR variableName)
Diese Methode entfernt einen bestimmten Tasksequenzwert aus dem Arbeitsspeicher. Wenn Sie das nächste Mal GetValue mit demselben Tasksequenznamen aufrufen, versucht die Methode, ihn aus der Tasksequenz abzurufen.
HRESULT SuppressLogValue([in] LPCTSTR variableName)
Immer wenn Tasksequenzvariablen geschrieben werden, z. B. wenn Sie im UDI-Assistenten "Fertig stellen " auswählen, werden die Namen und Werte in die Protokolldatei geschrieben. Rufen Sie diese Methode auf, um die Protokollierung vertraulicher Werte wie Kennwörter oder PINs für eine bestimmte Tasksequenzvariable zu unterdrücken.
void save(void)
Diese Methode speichert alle Tasksequenzwerte, die mit Aufrufen von SetValue festgelegt wurden.
ITSVariableRepository-Schnittstelle
__interface ITSVariableRepository : IUnknown
{
void GetValue([in] LPCTSTR variableName, BOOL logValue, [out] LPBSTR pValue);
void SetValue([in] LPCTSTR variableName, BOOL logValue, [in] LPCTSTR value);
};
Diese Schnittstelle ist für die interne Verwendung durch TSVariableBag zum Lesen und Schreiben von Tasksequenzvariablen.
IWizardFinish-Schnittstelle
__interface IWizardFinish : IUnknown
{
HRESULT Canceled(void);
HRESULT Finished(void);
};
Diese Schnittstelle ist in erweiterten Szenarien nützlich, in denen Sie zusätzliche Verarbeitungsschritte ausführen möchten, wenn Sie im UDI-Assistenten "Fertig stellen " oder "Abbrechen" auswählen. Der UDI-Assistent enthält eine Fertigstellungsaufgabe, die Tasksequenzvariablen speichert, wenn Sie Fertig stellen auswählen. Wenn Sie den Assistenten abbrechen, setzt der Task nur die Tasksequenzvariable OSDSetupWizCancelled auf TRUE und speichert keine Änderungen an anderen Tasksequenzvariablen.
Wenn Sie Ihre eigene Finish-Komponente erstellen, müssen Sie sie mit Code wie diesem registrieren:
Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);
PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);
PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);
pService->Register(pFinish);
IBindableList-Schnittstelle
__interface IBindableList : IUnknown
{
size_t Count(void);
HRESULT GetCaption(size_t index, LPBSTR pCaption);
};
Implementieren Sie diese Schnittstelle, wenn Sie über eine Datenquellenkomponente verfügen, die Sie an ein Kombinationsfeld binden möchten, indem Sie ihre Bind-Methode aufrufen.
size_t Count(void)
Diese Methode gibt die Anzahl der Elemente in der Liste zurück.
HRESULT, GetCaption(size_t index, LPBSTR, pCaption)
Diese Methode gibt die Untertitel des Elements an einem bestimmten Index zurück.
IDataNodes-Schnittstelle
__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);
};
Diese Schnittstelle ermöglicht den Zugriff auf hierarchische Daten, die auf einer Seite gespeichert werden können. Sie erhalten diese Schnittstelle über Methoden auf der ISettingsProperties-Schnittstelle , die über die Settings-Methode auf Ihre Seite zugreifen kann.
Daten im XML-Code einer Seite können in etwa wie folgt aussehen
<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>
Durch Aufrufen von Settings()->GetDataNode(L"Network", &pData) erhalten Sie eine IDataNodes-instance mit zwei Datenelementen (von denen jedes wiederum zwei Eigenschaften hat).
size_t Count()
Diese Methode gibt die Anzahl der DataItem-Elemente zurück.
HRESULT SetCaptionProperty(LPCTSTR captionProperty)
Die Komponente, die diese Schnittstelle unterstützt, unterstützt auch IBindableList, was das Auffüllen eines Kombinationsfelds mit Daten aus dem XML-Code der Seite erleichtert. Diese Methode steuert, welche Eigenschaft (Setter) in jedem DataItem-Element für diese Bindung verwendet wird. Sie könnten diese Methode beispielsweise mit DisplayName aufrufen, und sie würde diese Settereigenschaft für die Datenbindung verwenden. Das Kombinationsfeld enthält dann "Öffentlich " und " Entwicklungsteam " als Elemente.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)
Diese Methode ruft eine Eigenschaft von einem der DataItem-Elemente ab. Siehe Tabelle 41 und Tabelle 42.
Tabelle 41. DataItem GetProperty
| Parameter | Beschreibung |
|---|---|
| Index | Der Indexwert (beginnend mit 0) des DataItem , für das Sie einen Eigenschaftswert abrufen möchten |
| propertyName | Name der Setter-Eigenschaft, für die Sie einen Wert abrufen möchten |
| propertyValue | Enthält bei der Rückgabe den Zeichenfolgenwert einer Eigenschaft |
Tabelle 42. HRESULT GetProperty
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Das Eigentum wurde wiederhergestellt. |
| E_INVALIDARG | Der Index befindet sich hinter dem Ende des Arrays. |
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)
Diese Methode ähnelt GetProperty, aber anstatt einen Wert aus einem DataItem zurückzugeben, gibt sie das gesamte DataItem zurück, das in eine ISettingsProperties-Schnittstelle eingebettet ist. Siehe Tabelle 43 und Tabelle 44.
Tabelle 43. HRESULT GetNode
| Parameter | Beschreibung |
|---|---|
| Index | Der Indexwert (beginnend mit 0) des DataItem , für das Sie einen Eigenschaftswert abrufen möchten |
| ppNode | Beim Beenden wird die ISettingsProperties-Schnittstelle , die den DataItem-Knoten umschließt |
Tabelle 44. HRESULT GetNode Results
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Der Knoten wurde wiederhergestellt. |
| E_INVALIDARG | Der Index befindet sich hinter dem Ende des Arrays. |
IFactoryRegistry-Schnittstelle
__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);
};
Übersicht
Wenn Sie eine neue benutzerdefinierte Seite erstellen, müssen Sie mindestens eine Seitenfactory erstellen, d. h. eine Klasse, die IClassFactory implementiert. (Sie können ClassFactoryImpl als Basisklasse für Ihre Factory verwenden.)
void Register(LPCTSTR type, IClassFactory *pFactory)
Diese Methode registriert eine Klassenfactory bei der Registrierung. Siehe Tabelle 45.
Tabelle 45. IClassFactory void Register
| Parameter | Beschreibung |
|---|---|
| Typ | Eine Zeichenfolge, die die Factory identifiziert, die Sie registrieren; Im Allgemeinen sollte dieser Parameter Ihren Firmennamen in der Zeichenfolge enthalten, um sicherzustellen, dass er eindeutig ist |
| pFactory | Ein Zeiger auf Ihre Klassenfactory-instance |
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)
Diese Methode ist nur für den internen Gebrauch bestimmt.
BOOL Contains(LPCTSTR-Typ)
Diese Methode ist im Allgemeinen für den internen Gebrauch bestimmt. Es überprüft, ob eine Klassenfactory für einen Typ registriert wurde.
HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory)
Mit dieser Methode können Sie die Klassenfactory abrufen. In der Regel würden Sie CreateInstance aufrufen. Wenn Sie jedoch eine große Anzahl derselben Komponenten erstellen, ist es effizienter, die Factory abzurufen und sie dann zu bitten, die Instanzen für Sie zu erstellen.
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance)
Diese Methode erstellt eine neue Instance einer Komponente unter Berücksichtigung ihres Typs. Verwenden Sie stattdessen die CreateInstance-Vorlagenmethode, die eine typsichere Objekterstellung ermöglicht.
HRESULT SetContainer(IWizardPageContainer *pContainer)
Diese Methode ist nur für den internen Gebrauch bestimmt.
HRESULT RegisterService(REFGUID iid, IUnknown *pService)
Dienste sind einzelne Instanzen einer Komponente, die an mehreren Stellen verwendet werden können. Sie können diese Methode verwenden, um einen Dienst auf einer Seite zu registrieren und dann dieselbe Instance von einer anderen Seite abzurufen.
HRESULT GetService(REFGUID iid, IUnknown **ppService)
Diese Methode ruft einen Dienst ab, der zuvor mit einem Aufruf von RegisterService registriert wurde.
HRESULT SetLanguage(LANGID languageId)
Diese Methode legt die Sprache des UDI-Assistenten auf den Sprachbezeichner fest, den Sie im Parameter languageId angegeben haben.
LANGID GetLanguage()
Diese Methode gibt den Wert des Sprachbezeichners zurück, den Sie mit dem Befehlszeilenparameter /locale für den UDI-Assistenten angegeben haben. Die Methode gibt einen der folgenden Werte zurück:
Wert des Sprachbezeichners, der mit dem Befehlszeilenparameter /locale angegeben wird
0, wenn Sie den Befehlszeilenparameter /locale nicht angegeben haben
ILogger Interface
__interface ILogger : IUnknown
{
HRESULT Init(LPCWSTR logFilename);
HRESULT MoveLog(LPCWSTR logFilename);
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message);
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message);
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message);
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2);
HRESULT Normal(LPCTSTR component, LPCTSTR message);
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);
HRESULT Verbose(LPCTSTR component, LPCTSTR message);
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);
HRESULT Debug(LPCWSTR component, LPCWSTR message);
HRESULT EnableDebug(BOOL debug);
HRESULT Close(void);
HRESULT GetLogFilename(LPBSTR pFilename);
};
Übersicht
Der UDI-Assistent protokolliert Informationen in einer Protokolldatei, die bei der Behebung von Problemen vor Ort hilft. Es ist eine gute Idee, dass Ihre Seiten Informationen protokollieren. Sie können einen Zeiger auf diese Schnittstelle aus Ihrer Seite heraus mit der Logger()- Methode der Seite erhalten. Zeilen in der Protokolldatei enthalten eine "Level"-Nummer, die für Fehler-, normale, ausführliche oder Debugmeldungen steht.
Hinweis
Debugmeldungen werden nicht in der Protokolldatei gespeichert, es sei denn, die Debugunterstützung ist aktiviert. Sie können die Debugunterstützung aktivieren, indem Sie dem Style-Element in der .config Datei die folgende Zeile hinzufügen:
<Setter Property="debug">true</Setter>
Init
HRESULT Init(LPCWSTR logFilename)
Diese Methode ist nur für den internen Gebrauch bestimmt.
MoveLog
HRESULT MoveLog(LPCWSTR logFilename)
Diese Methode ist nur für den internen Gebrauch bestimmt.
LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)
Diese Methode ist nur für den internen Gebrauch bestimmt.
Log
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)
Diese Methode ist nur für den internen Gebrauch bestimmt.
Fehler
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)
Rufen Sie diese Methode auf, um Informationen zu einem Fehler zu protokollieren. Siehe Tabelle 46.
Tabelle 46. HRESULT-Fehler
| Parameter | Beschreibung |
|---|---|
| Error | Der von einem Anruf zurückgegebene Fehlercode (Dieser Code wird im Protokolleintrag als Zahl angezeigt.) |
| Komponente | Eine Zeichenfolge, die die Fehlerquelle identifiziert, wobei es sich im Allgemeinen um Ihre Seite oder die Komponente handelt, die Sie geschrieben haben |
| Meldung | Die Meldung, in der erklärt wird, was den Fehler verursacht hat |
Fehler 2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Diese Methode ähnelt der Error-Methode , ermöglicht es Ihnen jedoch, eine zweiteilige Meldung bereitzustellen. Die endgültige Nachricht enthält "Nachricht" und dann "Nachricht2" in der Ausgabedatei. Dies ist einfach eine bequeme Methode.
Standard
HRESULT Normal(LPCTSTR component, LPCTSTR message)
Diese Methode protokolliert eine normale Nachricht. Parameter finden Sie in der Beschreibung der Error-Methode .
Normal2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Diese Methode protokolliert eine normale Nachricht. Parameter finden Sie in der Beschreibung der Error2-Methode .
Ausführlich
HRESULT Verbose(LPCTSTR component, LPCTSTR message)
Diese Methode protokolliert eine ausführliche Meldung. Parameter finden Sie in der Beschreibung der Error-Methode .
Ausführlich2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Diese Methode protokolliert eine ausführliche Meldung. Parameter finden Sie in der Beschreibung der Error2-Methode .
Debuggen
HRESULT Debug(LPCWSTR component, LPCWSTR message)
Diese Methode protokolliert eine Debugmeldung. Parameter finden Sie in der Beschreibung der Error-Methode . Debugmeldungen werden nicht in der Datei gespeichert, es sei denn, sie sind aktiviert. Weitere Informationen finden Sie im Abschnitt "Übersicht".
EnableDebug
HRESULT EnableDebug(BOOL debug)
Diese Methode ist nur für den internen Gebrauch bestimmt.
Schließen
HRESULT Close(void)
Diese Methode ist nur für den internen Gebrauch bestimmt.
GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)
Diese Methode ruft den Namen der Protokolldatei ab.
IOrientation Interface
__interface IOrientation : IUnknown
{
void SetController(IWizardDialogController *pController);
int AddPage(LPCTSTR name);
void SelectPage(int index);
};
Diese Schnittstelle ist nur für den internen Gebrauch bestimmt.
ISettings-Schnittstelle
__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);
};
Diese Schnittstelle ist nur für den internen Gebrauch bestimmt.
ISettingsProperties-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle ermöglicht den Zugriff auf Seitendaten. Um zur obersten Ebene der Seitendaten zu gelangen, verwenden Sie die Methode Settings() der Seite.
HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)
Mit dieser Methode können Sie die Werte von Attributen auf dem Hauptknoten , dem Seitenknoten, abrufen, wenn Sie die Methode Settings() der Seite verwenden.
IStringProperties * Properties()
Diese Methode ermöglicht den Zugriff auf die Setter-Eigenschaftswerte unter dem Hauptknoten. Bei einer Seite sind dies die Eigenschaften der obersten Ebene.
HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)
Rufen Sie diese Methode auf, wenn Sie eine Liste von XML-Knoten mithilfe eines XPath-Ausdrucks direkt abrufen möchten. Es ist besser, wenn möglich eine der anderen Methoden zu verwenden. Verwenden Sie diese Methode nur, wenn Sie auf andere Weise nicht auf Knoten zugreifen können.
HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)
Rufen Sie diese Methode auf, wenn Sie einen einzelnen XML-Knoten direkt mithilfe eines XPath-Ausdrucks abrufen möchten. Es ist besser, wenn möglich eine der anderen Methoden zu verwenden. Verwenden Sie diese Methode nur, wenn Sie auf andere Weise nicht zu einem Knoten gelangen.
HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)
Rufen Sie ein Data-Element basierend auf dem Name-Attribut dieses Elements ab.
HRESULT GetDataNodes(IDataNodes **ppNodes)
Diese Methode ruft eine Liste von DataItem-Elementen unter dem aktuellen Knoten ab. Rufen Sie auf Seitenebene GetDataNode auf, um eine ISettingsProperty-Schnittstelle für die Daten abzurufen. Rufen Sie dann in dieser Instance GetDataNodes auf, um die Liste der Datensätze abzurufen. Nehmen wir zum Beispiel dieses XML an:
<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)
Diese Methode bietet eine schnelle Möglichkeit, zu der Gruppe von DataItem-Knoten unter einem bestimmten Datenknoten zu gelangen. Mit dem XML aus dem GetDataNodes-Beispiel macht der folgende Code genau das Gleiche wie die vier Codezeilen im Beispiel unter GetDataNodes , jedoch mit Fehlerüberprüfung:
ISimpleStringProperties Interface
ISimpleStringProperties-Schnittstelle
__interface ISimpleStringProperties : IStringProperties
{
void Add(LPCTSTR propertyName, LPCTSTR value);
};
Diese Schnittstelle allein ist möglicherweise nicht nützlich. Sie wird jedoch von der ID_SimpleStringProperties-Komponente implementiert, die auch die IStringProperties-Schnittstelle implementiert. Sie können diese Komponente in Fällen verwenden, in denen Sie einen Satz von Eigenschaften an eine andere Komponente übergeben müssen, z. B. eine Aufgabe, aber Werte programmgesteuert hinzufügen möchten, anstatt Werte aus XML zu verwenden. Hier ist ein Beispiel dafür, wie Sie diese Schnittstelle verwenden würden:
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);
};
Diese Schnittstelle bietet einfachen Zugriff auf eine Reihe von Setterelementen, die aus XML stammen. Diese Schnittstelle ist für die Eigenschaften einer Seite über Settings()->Properties() verfügbar.
HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)
Diese Methode ruft einen einzelnen Eigenschaftswert ab. Siehe Tabelle 47 und Tabelle 48.
Tabelle 47. IHRESULT Get Property Value
| Parameter | Beschreibung |
|---|---|
| propertyName | Name der Eigenschaft, die Sie lesen möchten |
| pPropValue | Enthält beim Beenden den Eigenschaftswert als Zeichenfolge (Dieser Wert ist nullptr , wenn keine solche Eigenschaft vorhanden ist.) |
Tabelle 48. IHRESULT: Ergebnisse zum Abrufen von Eigenschaftswerten
| [HRESULT] | Beschreibung |
|---|---|
| S_OK | Eigenschaftswert wird abgerufen. |
| E_INVALIDARG | Es gibt keine Eigenschaft mit dem von Ihnen angegebenen Namen. |
ITaskManager-Schnittstelle
__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);
}
Diese Schnittstelle wird von der TaskManager-Komponente (ID_TaskManager in ITaskManager.h) implementiert, bei der es sich um die Komponente handelt, die Aufgaben auf der Preflight-Seite ausführt. Sie können entweder die Preflight-Seite direkt verwenden, was Sie meistens tun, oder Ihre eigene Seite erstellen und diese Komponente die meiste Arbeit erledigen lassen.
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)
Sie müssen diese Methode aufrufen, bevor Sie eine andere Methode aufrufen. Es initialisiert die TaskManager-Komponente . Siehe Tabelle 49.
Tabelle 49. HRESULT Init
| Parameter | Beschreibung |
|---|---|
| pPageView | Bietet Zugriff auf die Seite, auf der Aufgaben ausgeführt werden (Diese Seite muss über einen bestimmten Satz von Steuerelementen verfügen, die in den nächsten Parametern beschrieben werden.) |
| idListView | Die Steuerelement-ID eines ListView-Steuerelements, das die Liste der Aufgaben und den Status dieser Aufgaben anzeigt |
| idMessage | Die Steuerelement-ID eines Textfelds, das zum Anzeigen einer Meldung für die ausgewählte Aufgabe verwendet wird |
| idRetryButton | Die Steuerelement-ID einer Schaltfläche, die Sie auswählen können, um die Tasks erneut auszuführen |
| pPageInfo | Ein Wrapper um das XML der Seite (TaskManager lädt den Satz auszuführender Aufgaben aus diesem XML.) |
| pCallback | Kann NULL sein (Wenn dieser Parameter nicht null ist, ruft der TaskManager die Started-Methode auf, wenn eine Aufgabe gestartet wird, und die Finished-Methode für jede Aufgabe, die ausgeführt wird.) |
HRESULT SetFailMessage(LPCWSTR message)
Mit dieser Methode wird die Meldung festgelegt, die angezeigt wird, wenn eine oder mehrere Tasks fehlschlagen.
HRESULT Start(void)
Mit dieser Methode werden alle Tasks gestartet. Jede Aufgabe wird in einem separaten Thread gestartet.
HRESULT GetTaskMessage(size_t index, LPBSTR message)
Diese Methode ist nur für den internen Gebrauch bestimmt. Es ruft die aktuelle Nachricht für eine Aufgabe anhand ihres Index in der Liste der Aufgaben ab.
HRESULT GetResultType)(size_t Index, LPBSTR-Typ)
Diese Methode ruft den aktuellen "Typ" für eine Aufgabe ab. Tabelle 50 zeigt die verfügbaren Typen.
Tabelle 50. HRESULT GetResultType
| Typ | Beschreibung |
|---|---|
| 0 | Stellt eine Aufgabe dar, die erfolgreich war. |
| 1 | Stellt eine Aufgabe dar, die eine Warnung zurückgegeben hat |
| -1 | Stellt eine fehlgeschlagene Aufgabe dar |
Der Typ wird abgerufen, indem der Exit- oder Fehlercode der Aufgabe untersucht und eine Übereinstimmung im ExitCodes> XML-Element der <Aufgabe gefunden wird.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value)
Diese Methode wird von den Status- und Preflight-Seiten verwendet, um die BitmapFilename-Settereigenschaft abzurufen, damit neben der Nachricht für die Aufgabe, die Sie hervorheben, ein Bild angezeigt werden kann. Mit anderen Worten, Sie können dem XML-Code der Aufgabe einen benutzerdefinierten Setter hinzufügen und ihn dann mit dieser Methode abrufen.
int GetSelectedIndex(void)
Diese Methode ruft den Index der aktuell ausgewählten Aufgabe ab, was nützlich ist, wenn Sie zusätzliche Informationen über die Aufgabe abrufen möchten (siehe GetProperty-Methode ), die für die ausgewählte Aufgabe angezeigt werden soll. Die Status- und Preflight-Seiten verwenden diese Methode, um ein Bild für die ausgewählte Aufgabe anzuzeigen.
HRESULT wait(DWORD waitMilliseconds)
Diese Methode hilft hauptsächlich bei Komponententests, sodass der Test sicherstellen kann, dass Aufgaben vor dem Beenden des Komponententests abgeschlossen werden. Normalerweise würden Sie diese Methode nicht aufrufen. Sie wird entweder zurückgegeben, wenn die Ausführung aller Aufgaben abgeschlossen ist oder wenn die Wartezeit abgelaufen ist.
size_t FailedCount(void)
Diese Methode gibt die Anzahl der Aufgaben zurück, die derzeit als fehlgeschlagen markiert sind.
size_t WarningCount(void)
Diese Methode gibt die Anzahl der Aufgaben zurück, die derzeit als Warnung markiert sind.
size_t SucceedCount(void)
Diese Methode gibt die Anzahl der Aufgaben zurück, die derzeit als erfolgreich markiert sind.
size_t RunningCount(void)
Diese Methode gibt die Anzahl der aktuell ausgeführten Tasks zurück.
void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)
Rufen Sie diese Methode über das OnCommonControlEvent Ihrer Seite auf, damit der TaskManager die erforderlichen Ereignisse verarbeiten kann.
void OnControlEvent(WORD eventId, WORD controlId)
Rufen Sie diese Methode über das OnControlEvent Ihrer Seite auf, damit der TaskManager die erforderlichen Ereignisse verarbeiten kann.
void EnableButtons(BOOL enable)
Diese Methode ist nur für den internen Gebrauch bestimmt.
IWizardComponent-Schnittstelle
__interface IWizardComponent : IUnknown
{
HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Übersicht
In der Regel werden Sie diese Schnittstelle nicht direkt, sondern über die WizardComponent-Vorlagenklasse implementieren. Wenn Ihre Komponente diese Schnittstelle implementiert und Sie eine Klassenfactory bei der Registrierung registriert haben, erhält Ihre Komponente beim Erstellen einen Zeiger auf die IWizardPageContainer-Instance. Dies hilft Ihnen z. B. beim Zugriff auf den Logger oder die Registrierung, um andere Komponenten zu erstellen, die Ihre Komponente möglicherweise benötigt.
IWizardDialogController-Schnittstelle
__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);
};
Diese Schnittstelle ist nur für den internen Gebrauch bestimmt.
IWizardDialogView-Schnittstelle
__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);
};
Diese Schnittstelle ist nur für den internen Gebrauch bestimmt.
IWizardPage-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle wird von WizardPageImpl implementiert, sodass Sie sie in der Regel nicht selbst implementieren müssen. Der Assistent ruft alle diese Methoden für Sie auf, wenn er mit Ihren benutzerdefinierten Seiten interagiert.
IWizardPageContainer-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle steht Ihrer Seite über die Container-Methode (implementiert durch WizardPageImpl) zur Verfügung und ermöglicht Ihnen den Zugriff auf verschiedene Dienste des Assistenten.
ILogger * Logger(void)
Verwende diese Methode, um Meldungen in die Protokolldatei zu schreiben, zum Beispiel:
Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * Properties(void)
Diese Methode ermöglicht den Zugriff auf "Speichervariablen", bei denen es sich um Eigenschaften handelt, die sich nur im Arbeitsspeicher befinden, während der UDI-Assistent ausgeführt wird. Diese Eigenschaften sind für andere Seiten entweder im Code oder im XML mit der $memoryVarName$- Syntax verfügbar.
HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance)
Mit dieser Methode können Sie eine neue Instance einer beliebigen Komponente erstellen, die registriert wurde. Es ist jedoch besser, die Vorlagenfunktion CreateInstance zu verwenden, da sie stark typisiert ist.
HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance)
Mit dieser Methode können Sie einen registrierten Dienst abrufen. Es ist jedoch besser, die GetService-Vorlagenfunktion aufzurufen, die stark typisiert ist (anstatt IUnknown zu verwenden).
HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)
Diese Methode verarbeitet die Arbeit mit Variablen in Zeichenfolgenwerten. Es unterstützt die in Tabelle 51 und Tabelle 52 gezeigten Formate.
Tabelle 51. HRESULT ReplaceVariables
| Format | Beschreibung |
|---|---|
| $Name$ | Ersetzt den Wert einer Speichervariablen durch diesen Namen (Wenn keine Speichervariable mit diesem Namen vorhanden ist, wird das "Token" entfernt.) |
| %Name% | Entweder eine Tasksequenzvariable oder eine Umgebungsvariable. Die Reihenfolge lautet wie folgt: 1. Verwenden Sie den Wert einer Tasksequenzvariablen, falls vorhanden. 2. Verwenden Sie den Wert einer Umgebungsvariablen, falls vorhanden. 3. Entfernen Sie andernfalls diesen Text aus der Zeichenfolge. |
Tabelle 52. HRESULT-Parameter
| Parameter | Beschreibung |
|---|---|
| Source | Die Eingabezeichenfolge, die eine beliebige Kombination aus $% und-Variablen oder keine enthalten kann |
| pDest | Enthält bei der Rückgabe eine neue Zeichenfolge, bei der alle Token gemäß Tabelle 51 ersetzt wurden |
HRESULT GotoPage(LPCTSTR pageName)
Diese Methode wurde nicht vollständig getestet. Die Idee ist, dass Sie direkt zu einer bestimmten Seite wechseln können, basierend auf dem Namen der Seite, wie in der .config XML-Datei definiert. Wenn Sie diese Methode aufrufen, wird die OnNextSelected-Funktion auf Ihrer Seite umgangen. Darüber hinaus kann sich das Verhalten dieser Methode ändern. Sie verwenden sie daher auf eigene Gefahr.
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)
Bei dieser Methode wird ein Meldungsfeld mit dem von Ihnen angegebenen Text und der Untertitel angezeigt. Der Parameter uType ist ein beliebiger Wert, den Sie an die MessageBox Win32-Funktion übergeben können.
BOOL InPreview(void)
Diese Methode gibt TRUE zurück, wenn Sie den Assistenten im "Vorschaumodus" gestartet haben, indem Sie den Schalter /preview bereitgestellt haben. Im Vorschaumodus ist die Schaltfläche "Weiter " nie deaktiviert. Mit dieser Methode können Sie z. B. Code im Vorschaumodus umgehen, der Probleme verursachen könnte, wenn keine gültigen Daten auf der Seite vorhanden sind.
HWND GetHwnd(void)
Diese Methode gibt den HWND für das Hauptdialogfeld zurück. Verwenden Sie diese Methode mit Vorsicht. Im Allgemeinen ist die Anwendungsprogrammierschnittstelle des UDI-Assistenten so konzipiert, dass Sie niemals direkt mit Fenstergriffen arbeiten.
IWizardPageView-Schnittstelle
__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);
};
Diese Schnittstelle ist für den Code auf Ihrer Seite über die View-Methode (implementiert durch WizardPageImpl) verfügbar.
HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown *ppControl)
Der UDI-Assistent verwendet Wrapper, die eigentlich Fassaden für die Interaktion mit den Steuerelementen auf Ihrer Seite sind. Wenn Sie diese Fassaden anstelle der tatsächlichen Steuerelemente verwenden, ist es viel einfacher, Tests für Ihre Seite zu schreiben, da Sie Scheinfassaden aus Ihren Tests bereitstellen können.
Anstatt diese Methode direkt zu verwenden, ist es besser, die GetControlWrapper-Vorlagenmethode zu verwenden, die stark typisiert ist, z. B.:
PComboBox m_pLanguagePackCombo;
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);
HWND GetHwnd(void)
Diese Methode gibt das Fensterhandle für Ihre Seite zurück. Im Allgemeinen sollten Sie keinen Zugriff auf diesen Fensterhandle benötigen.
HWND GetControl(int itemId)
Bei Bedarf können Sie diese Methode aufrufen, um den Fensterhandle für ein Steuerelement auf der Seite abzurufen. (Es ist besser, die GetControlWrapper-Vorlagenfunktion aufzurufen).
HRESULT Anzeigen (ungültig)
Diese Methode ist nur für den internen Gebrauch bestimmt.
HRESULT Hide(void)
Diese Methode ist nur für den internen Gebrauch bestimmt.
HRESULT Focus(int itemId)
Setzen Sie den Eingabefokus auf ein bestimmtes Steuerelement.
IWizardPage * Page(void)
Diese Methode ist nur für den internen Gebrauch bestimmt.
IFormController * Form(void)
Diese Methode ist nur für den internen Gebrauch bestimmt.
HRESULT: FocusWizardButton(WizardButtons-Schaltfläche)
Setzt den Fokus auf eine der Schaltflächen des Assistenten. WizardButtons hat zwei Werte: BackButton und NextButton.
HRESULT SetEnable(WizardButtons-Schaltfläche, BOOL-Aktivierung)
Anfordern, dass eine der Assistentenschaltflächen aktiviert oder deaktiviert wird. Die Schaltfläche stimmt möglicherweise nicht mit dem Status überein, den Sie angefordert haben. Wenn Sie z. B. den UDI-Assistenten mit dem Schalter /preview ausführen, bleiben die Schaltflächen immer aktiviert. WizardButtons hat zwei Werte: BackButton und NextButton.
void ShowWarningMessage(LPCTSTR-Nachricht)
Bei dieser Methode wird unten im Seiteninhaltsbereich eine Warnmeldung angezeigt. Diese Nachricht kann ein beliebiger Text sein.
void HideWarningMessage(void)
Blenden Sie eine Warnmeldung aus, die Sie bei einem Aufruf von ShowWarningMessage angezeigt haben.
IXmlDocument-Schnittstelle
__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);
};
Übersicht
Diese Schnittstelle wird von der Komponente ID_IXmlDocument implementiert, bei der es sich um eine Fassade handelt, die die Arbeit mit XML-Dokumenten in C++ erleichtern soll.
HRESULT Load(LPCTSTR filename)
Diese Methode lädt ein XML-Dokument aus einer externen Datei. Sie gibt S_OK zurück, ob die Datei ohne Fehler geladen wurde oder S_FALSE ob ein Fehler aufgetreten ist. Wenn ein Fehler auftritt, können Sie die Fehlermeldung abrufen, indem Sie GetParseErrorMessage aufrufen.
HRESULT LoadXml(LPCTSTR xml)
Diese Methode lädt ein XML-Dokument aus einer Zeichenfolge statt aus einer externen Datei. Abgesehen von der Quelle zum Lesen des XML-Codes ist das Verhalten mit dem der Load-Methode identisch.
HRESULT-Speichern (LPCWSTR-Dateiname)
Diese Methode speichert das XML-Dokument, das sich im Arbeitsspeicher befindet, in einer externen Datei.
HRESULT: GetParseErrorMessage(LPBSTR, pMessage)
Diese Methode gibt eine neue Zeichenfolge mit der Fehlermeldung zurück, die vom Laden des XML-Dokuments stammt, falls vorhanden. Es wird immer S_OK zurückgegeben.
HRESULT: SelectNodes(LPCTSTR, xpath, IXMLDOMNodeList **ppNodes)
Mit dieser Methode können Sie einen XPath-Ausdruck verwenden, um eine Sammlung von Knoten aus dem Dokument abzurufen. Es wird immer S_OK zurückgegeben.
HRESULT: SelectSingleNode(LPCTSTR, xpath, IXMLDOMNode **ppNode)
Mit dieser Methode können Sie einen XPath-Ausdruck verwenden, um einen Knoten aus dem Dokument abzurufen. Es wird immer S_OK zurückgegeben.
HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns)
Diese Methode fügt den Namen einer externen Schemadatei hinzu, die verwendet wird, um das Schema Ihres XML-Dokuments zu überprüfen, wenn es geladen wird. Der von Ihnen angegebene Namespace ist die Zeichenfolge, die Sie in XPath-Abfragen verwenden können, obwohl dies nicht getestet wurde.
HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR-Name, LPCWSTR-Wert)
Diese Methode fügt einem vorhandenen Knoten im XML-Dokument ein neues Attribut hinzu. Siehe Tabelle 53.
Tabelle 53. HRESULT AddAttribute
| Parameter | Beschreibung |
|---|---|
| pNode | Der Knoten, dem Sie ein Attribut hinzufügen möchten |
| Name | Name des neuen Attributs |
| Wert | Der Wert für das neue Attribut |
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode)
Rufen Sie diese Methode auf, um einen neuen Knoten zu erstellen:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Nachdem Sie einen neuen Knoten erstellt haben, können Sie ihn als untergeordneten Knoten zu einem anderen Knoten hinzufügen, indem Sie die appendChild-Methode des übergeordneten Elements aufrufen.
Hilfsfunktionen
CreateInstance-Vorlagenfunktion
HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)
Diese Funktion ist in IWizardPageContainer.h definiert und stellt einen typsicheren Wrapper für die IWizardPageContainer-CreateInstance-Methode> bereit, z. B.:
CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);
Dieser Code erstellt eine neue ID_Directory Komponente, um die IDirectory-Schnittstelle dieser Komponente abzurufen.
GetService-Vorlagenfunktion
void GetService(IWizardPageContainer *pContainer, I **ppService)
Diese Funktion ist in IWizardPageContainer.h definiert und stellt einen typsicheren Wrapper für die IWizardPageContainer-GetService-Methode> bereit, z. B.:
GetService<ITSVariableBag>(Container(), &pTsBag);
Diese Funktion ruft die Tasksequenzkomponente ab, die die ITSVariableBag-Schnittstelle unterstützt. (Für ITSVariableBag können Sie stattdessen die TSVariables-Methode der WizardPageImpl-Klasse verwenden.)
UDI-Assistent Designer Konfigurationsdatei Schemareferenz
Diese Datei wird vom UDI-Assistenten-Designer verwendet. Für jede benutzerdefinierte .dll Datei wird eine separate Datei erstellt, die benutzerdefinierte Assistentenseiten-Editoren, benutzerdefinierte Tasks oder benutzerdefinierte Validatoren enthalten kann. Die Datei muss mit .config enden und sich im Ordner installation_folder\Bin\Config befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).
Tabelle 54 listet die Elemente in der Konfigurationsdatei des UDI-Assistenten Designer und ihre Beschreibungen auf. Das DesignerConfig-Element ist der Stammknoten für diesen Verweis.
Tabelle 54. Elemente in der Konfigurationsdatei des UDI-Assistenten-Designer und ihre Beschreibungen
| Elementname | Beschreibung |
|---|---|
| DesignerConfig | Gibt den Stamm für alle anderen Elemente an |
| DesignerMappings | Gruppiert eine Gruppe von Seitenelementen |
| Page | Gibt einen Assistenten Seiteneditor an, der im UDI Wizard Designer geladen werden soll, um die Konfigurationseinstellungen für eine Assistentenseite zu bearbeiten |
| Param | Gibt einen Parameter an, der an das übergeordnete Task- oder Validator-Element übergeben wird und einem Setter-Element in der UDI-Assistenten-Konfigurationsdatei entspricht Hinweis: Die Attribute für dieses Element sind unterschiedlich, wenn das übergeordnete Element das Task - oder Validator-Element ist. |
| Aufgabe | Gibt eine Aufgabe innerhalb der Aufgabenbibliothek an. |
| TaskItem | Gibt eine Gruppe von Parametern an, die an die Task übergeben werden |
| Aufgabenbibliothek | Gruppiert eine Reihe von Aufgabenelementen |
| Validator | Gibt ein Validierungssteuerelement innerhalb der Validierungsbibliothek an |
| ValidatorLibrary | Gruppiert einen Satz von Validator-Elementen |
DesignerConfig
Dieses Element gibt den Stamm für alle anderen Elemente an.
Informationen zu Elementen
Tabelle 55 enthält Informationen über das DesignerConfig-Element .
Tabelle 55. DesignerConfig-Elementinformationen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Erstens: Dieses Element ist erforderlich. |
| Übergeordnete Elemente | Keine |
| Inhalt | DesignerMappings, TaskLibrary, ValidatorLibrary |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings
Dieses Element gruppiert eine Reihe von Page-Elementen .
Informationen zu Elementen
Tabelle 56 enthält Informationen zum DesignerMappings-Element .
Tabelle 56. DesignerMappings-Elementinformationen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder Eins innerhalb des DesignerConfig-Elements (Dieses Element ist optional, wenn keine benutzerdefinierte Assistentenseite in der DLL vorhanden ist, die dieser UDI Wizard Designer-Konfigurationsdatei entspricht.) |
| Übergeordnete Elemente | DesignerConfig |
| Inhalt | Page |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<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>
Seite
Dieses Element gibt einen Assistentenseiteneditor an, der im UDI-Assistenten-Designer geladen werden soll, der wiederum zum Bearbeiten der Konfigurationseinstellungen für eine Assistentenseite verwendet wird.
Informationen zu Elementen
Tabelle 57 enthält Informationen zum Page-Element .
Tabelle 57. Informationen zum Seitenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere für jede im DesignerMappings-Element definierte Assistentenseite |
| Übergeordnete Elemente | DesignerMappings |
| Inhalt | Beliebiger wohlgeformter XML-Inhalt |
Elementattribute
Tabelle 58 listet die Attribute des Page-Elements und eine Beschreibung für jedes Element auf.
Tabelle 58. Attribute und entsprechende Werte für das Seitenelement
| Attribut | Beschreibung |
|---|---|
| Beschreibung | Gibt den Text an, der Informationen zum Parameter enthält, der im UDI-Assistenten-Designer angezeigt wird |
| DesignerAssembly | Gibt den Namen der .dll-Datei an, die dem Assistentenseiten-Editor zugeordnet ist. (Die Datei .dll muss sich im Ordner installation_folder\Bin befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben.) |
| DesignerType | Gibt den Namen des Assistentenseiten-Editors in der .dll-Datei an, die im DesignerAssembly-Attribut angegeben ist (Dies ist der Microsoft .NET-Typ für den Assistentenseiten-Editor mit dem vollqualifizierten Microsoft .NET-Namespace.) |
| DisplayName | Gibt den benutzerfreundlichen Namen des Seiteneditors an, der im UDI-Assistenten-Designer angezeigt wird |
| DLL | Gibt den Namen der .dll-Datei an, die der Seite des Assistenten zugeordnet ist. (Die .dll muss sich im Ordner installation_folder\Templates\Distribution\Tools\platform befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben, und die Plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist). Hinweis: Stellen Sie sicher, dass die DLL-Prozessorarchitektur mit der installierten MDT-Prozessorarchitektur übereinstimmt. Wenn Sie beispielsweise eine 32-Bit-Version von MDT installiert haben, stellen Sie sicher, dass Sie eine 32-Bit-DLL für die Assistentenseite verwenden. |
| Image | Gibt den Namen eines Bilds der Seite im PNG-Format (Portable Network Graphics) an (Die .png Datei muss sich im Ordner installation_folder\Bin\Images befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben.) |
| Typ | Gibt den Assistentenseiten-Editor an und muss mit dem Namen übereinstimmen, der bei der Registrierung der benutzerdefinierten Seite verwendet wurde |
Hinweise
Der UDI-Assistenten-Designer verwendet das Page-Element wie eine Vorlage, um die anfängliche XML-Datei für einen neuen Assistenten zu erstellen. Der UDI-Assistenten-Designer führt eine Schemaüberprüfung durch, um sicherzustellen, dass die Page- und untergeordneten Elemente ein gültiges Format aufweisen. Dieses Element stellt eine Zuordnung zwischen dem Seitentyp des UDI-Assistenten und den Informationen bereit, die der UDI-Assistenten-Designer benötigt, um Seiten dieses Typs mit einem benutzerdefinierten Seiteneditor zu bearbeiten und zu erstellen.
Beispiel
None.
Param
Dieses Element gibt einen Parameter an, der an das übergeordnete Task- oder Validator-Element übergeben wird und einem Setter-Element in der Konfigurationsdatei des UDI-Assistenten entspricht.
Hinweis
Die Attribute für dieses Element unterscheiden sich, wenn das übergeordnete Element das Task - oder das Validator-Element ist.
Informationen zu Elementen
Tabelle 59 enthält Informationen über das Param-Element .
Tabelle 59. Informationen zum Param-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eines oder mehrere für jedes übergeordnete Element TaskItem oder Validator |
| Übergeordnete Elemente | TaskItem, Validator |
| Inhalt | Beliebiger wohlgeformter XML-Inhalt |
Elementattribute
Tabelle 60 listet die Attribute des Param-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 60. Attribute und entsprechende Werte für das Param-Element
| Attribut | Beschreibung |
|---|---|
| Beschreibung | Gibt Text an, der Informationen über den Parameter enthält, der im UDI-Assistenten-Designer angezeigt wird Hinweis: Dieses Attribut ist nur für das Validator-Element gültig. |
| DisplayName | Gibt den benutzerfreundlichen Namen des Validator-Parameters an, der für die entsprechende UDI-Assistentenseite im UDI-Assistenten-Designer angezeigt wird (Dieser Name ist normalerweise aussagekräftiger als das Name-Attribut.) Hinweis: Dieses Attribut ist nur für das Validator-Element gültig. |
| Name | Gibt den Namen des Parameters an, der in Abhängigkeit vom übergeordneten Element an die Aufgabe oder den Validator übergeben wird (Dieses Attribut wird zum Property-Attribut in einem Setter-Element in der UDI-Assistenten-Konfigurationsdatei.) Hinweis: Dieser Parameter wird sowohl für übergeordnete TaskItem - als auch für Validator-Elemente verwendet. |
Hinweise
None.
Beispiel
None.
Aufgabe
Dieses Element gibt eine Aufgabe innerhalb der Aufgabenbibliothek an.
Informationen zu Elementen
Tabelle 61 enthält Informationen zum Task-Element .
Tabelle 61. Informationen zum Aufgabenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb des TaskLibrary-Elements (Dieses Element ist nicht optional, wenn das TaskLibrary-Element angegeben ist.) |
| Übergeordnete Elemente | Aufgabenbibliothek |
| Inhalt | TaskItem |
Elementattribute
Tabelle 62 listet die Attribute des Task-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 62. Attribute und entsprechende Werte für das Aufgabenelement
| Attribut | Beschreibung |
|---|---|
| Beschreibung | Gibt Text mit Informationen zur Aufgabe an, der im UDI-Assistenten-Designer angezeigt wird |
| DLL | Gibt den Namen der .dll Datei an, die der Aufgabe zugeordnet ist (Die Datei .dll muss sich im Ordner installation_folder\Templates\Distribution\Tools\platform befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und die Plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist). |
| Name | Gibt den Namen der Aufgabe an, der auf der entsprechenden UDI-Assistentenseite und im UDI-Assistenten-Designer angezeigt wird |
| Typ | Gibt den Tasktyp an, der in der Werksregistrierung registriert wird und zum Aufrufen einer bestimmten Task in einer .dll Datei verwendet wird. |
Hinweise
None.
Beispiel
None.
TaskItem
Dieses Element gibt eine Gruppe von Parametern an, die an die Aufgabe übergeben werden.
Informationen zu Elementen
Tabelle 63 enthält Informationen zum TaskItem-Element .
Tabelle 63. Informationen zum TaskItem-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere für jedes Task-Element |
| Übergeordnete Elemente | Aufgabe |
| Inhalt | Param |
Elementattribute
Tabelle 64 listet die Attribute des TaskItem-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 64. Attribut und entsprechende Werte für das TaskItem-Element
| Attribut | Beschreibung |
|---|---|
| Typ | Gibt den of-Elementtyp an, der in der Konfigurationsdatei des UDI-Assistenten erstellt wird. Es wird ein XML-Element erstellt, das dem Wert dieses Attributs entspricht. Wenn der Wert für dieses Attribut beispielsweise File lautet, wird ein File-Element in der Konfigurationsdatei des UDI-Assistenten erstellt. Derzeit werden nur folgende Werte unterstützt: - Datei, die zwei untergeordnete Param-Elemente erfordert (ein untergeordnetes Param-Element, bei dem das Name-Attribut auf "Source" festgelegt ist, und ein weiteres untergeordnetes Param-Element, bei dem das Name-Attribut auf "Dest" festgelegt ist) - Setter, der ein untergeordnetes Param-Element erfordert |
Hinweise
None.
Beispiel
None.
Aufgabenbibliothek
Dieses Element gruppiert eine Reihe von Task-Elementen .
Informationen zu Elementen
Tabelle 65 enthält Informationen zum TaskLibrary-Element .
Tabelle 65. Informationen zum TaskLibrary-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder Eins innerhalb des DesignerConfig-Elements (Dieses Element ist optional, wenn keine benutzerdefinierten Tasks in der DLL vorhanden sind, die dieser UDI Wizard Designer-Konfigurationsdatei entsprechen.) |
| Übergeordnete Elemente | DesignerConfig |
| Inhalt | Aufgabe |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<DesignerConfig>
- <TaskLibrary>
+<Task DLL="" Description="Executes a process with the given command line." Type="Microsoft.Wizard.ShellExecuteTask" Name="Shell Execute Task">
+<Task DLL="OSDRefreshWizard.dll" Description="Discovers supported applications for install." Type="Microsoft.OSDRefresh.AppDiscoveryTask" Name="Application Discovery">
+<Task DLL="SharedPages.dll" Description="Check to ensure a wired network connection is available." Type="Microsoft.SharedPages.WiredNetworkTask" Name="Wired Network Check">
+<Task DLL="OSDRefreshWizard.dll" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.OSDRefresh.ACPowerTask" Name="AC Power Check">
+<Task DLL="" Description="Check to ensure power source is AC (not battery)." Type="Microsoft.Wizard.CopyFilesTask" Name="Copy Files Task">
</TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
Validator
Dieses Element gibt ein Validierungssteuerelement innerhalb der Validierungsbibliothek an.
Informationen zu Elementen
Tabelle 66 enthält Informationen zum Validator-Element .
Tabelle 66. Informationen zum Validatorelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb des ValidatorLibrary-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | ValidatorLibrary |
| Inhalt | Param |
Elementattribute
Tabelle 67 listet die Attribute des Validator-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 67. Attribute und entsprechende Werte für das Validator-Element
| Attribut | Beschreibung |
|---|---|
| Beschreibung | Gibt den Text an, der Informationen über das Validierungssteuerelement enthält, das im UDI-Assistenten-Designer angezeigt wird |
| DisplayName | Gibt den benutzerfreundlichen Namen des Validators an, der im UDI-Assistenten-Designer angezeigt wird (dieser Name ist normalerweise aussagekräftiger als das Namensattribut.) |
| DLL | Gibt den Namen der .dll Datei an, die dem Validator zugeordnet ist. (Die Datei .dll muss sich im Ordner installation_folder\Templates\Distribution\Tools\platform befinden (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und die Plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist). |
| Name | Gibt den Namen des Validators an, der auf der entsprechenden Seite des UDI-Assistenten und im UDI-Assistenten-Designer angezeigt wird. |
| Typ | Gibt den Validierungstyp an, der mit dem Registrierungsfaktor registriert wird und verwendet wird, um ein bestimmtes Validierungssteuerelement innerhalb einer .dll Datei aufzurufen |
Hinweise
None.
Beispiel
None.
ValidatorLibrary
Dieses Element gruppiert eine Reihe von Validator-Elementen .
Informationen zu Elementen
Tabelle 68 enthält Informationen über das ValidatorLibrary-Element .
Tabelle 68. Informationen zum ValidatorLibrary-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder Eins innerhalb des DesignerConfig-Elements (Dieses Element ist optional, wenn keine benutzerdefinierten Validatoren in der DLL vorhanden sind, die dieser UDI Wizard Designer-Konfigurationsdatei entsprechen.) |
| Übergeordnete Elemente | DesignerConfig |
| Inhalt | Validator |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Erfordert Text in einem Feld" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Lässt nicht zu, dass bestimmte Zeichen in einem Feld enthalten sind" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Muss einem vordefinierten Muster folgen" 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>
Referenz zu UDI-Assistenten-Designer
Steuerelemente
Die Steuerelemente, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren zur Verwendung im UDI-Assistenten-Designer verwendet werden, sind WPF UserControl-Instanzen. Tabelle 69 listet die Steuerelemente auf, die Sie zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwenden können.
Tabelle 69. Steuerelemente, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet werden können
| Control | Beschreibung |
|---|---|
| SammlungTControl | Dieses Steuerelement wird verwendet, um Daten zu bearbeiten, die im Data-Elementinnerhalb eines Page-Elements gespeichert sind. |
| FieldElementControl | Dieses Steuerelement wird zum Bearbeiten eines Felds verwendet, das normalerweise mit einem TextBox-Steuerelement auf der XAML-Seite verknüpft ist. |
| SetterControl | Dieses Steuerelement wird verwendet, um den Wert eines Setter-Elements in der Konfigurationsdatei des UDI-Assistenten zu ändern. |
SammlungTControl
Dieses Steuerelement bietet viele Funktionen zum Bearbeiten von Daten. Die beste Möglichkeit, um zu erfahren, wie dieses Steuerelement verwendet wird, ist ein Blick in das Beispiel, das zeigt, wie Daten unter dem Data-Element einer Seite bearbeitet werden. Insbesondere zeigt das Beispiel, wie in diesem Steuerelement Elemente hinzugefügt, entfernt und bearbeitet werden.
FieldElementControl
Verwenden Sie dieses Steuerelement zum Bearbeiten eines Felds, das normalerweise mit einem TextBox-Steuerelement auf der XAML-Seite verknüpft ist.
Beispiel
Der folgende Auszug aus einer XAML-Datei veranschaulicht die Verwendung von FieldElementControl zum Konfigurieren des Standardwerts für ein Feld auf einer Assistentenseite mithilfe eines untergeordneten TextBox-Steuerelements :
<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>
Eigenschaften
FieldData
Diese string-Eigenschaft enthält Informationen zum Herstellen einer Verbindung zwischen dem FieldElementControl und dem zugrunde liegenden XML-Code für das Feld. Die Verbindung wird mit einer Eigenschaft der Seiteneditorschnittstelle hergestellt. Der folgende Auszug aus einer XAML-Datei veranschaulicht die Verwendung der FieldData-Eigenschaft :
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
In diesem Auszug heißt die Oberfläche des Seiteneditors ControlRoot und wird im Parameter ElementName angegeben. Die Bindung wird an die DataContext.Location-Eigenschaft der ControlRoot-Seiteneditorschnittstelle ausgeführt. DataContext ist ein Ansichtsmodell, das auf das Page-Element in der Konfigurationsdatei des UDI-Assistenten verweist. "Ort" ist eine Eigenschaft der Ansicht, die eine Liste möglicher Speicherorte zurückgibt und durch ein Data-Element in der Konfigurationsdatei des UDI-Assistenten definiert wird. Jeder Speicherort wird durch ein DataItem-Element in der Konfigurationsdatei des UDI-Assistenten definiert.
HeaderText
Mit dieser Zeichenfolgeneigenschaft können Sie einen Header für das FieldElementControl-Steuerelement angeben. Die Kopfzeile fungiert als Titel für das Steuerelement und ist als fetter, orangefarbener Text formatiert, der direkt über dem Steuerelement angezeigt wird.
InstructionText
Mit dieser Zeichenfolgeneigenschaft können Sie Informationstext für das FieldElementControl-Steuerelement angeben. In der Regel wird der Text verwendet, um eine kurze Beschreibung des Felds bereitzustellen und zu erläutern, wie sich die Konfiguration des Felds auf die entsprechende Assistentenseite auswirkt.
HideEnableButton
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit der Schaltfläche steuern, die den Status zwischen "Entsperrt " und "Gesperrt" (aktiviert oder deaktiviert) wechselt. Wenn festgelegt:
Wahr, die Schaltfläche ist nicht sichtbar
Falsch, die Schaltfläche ist sichtbar (Dies ist der Standardwert.)
HideDefaultTab
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Abschnitts steuern, der das Steuerelement enthält, das zum Festlegen des Standardwerts verwendet wird. Obwohl sich die Eigenschaft auf eine Registerkarte bezieht, gibt es im FieldElementControl keine Registerkarte, sondern einen Abschnitt, der ausgeblendet werden kann. Wenn festgelegt:
Wahr, der Abschnitt ist nicht sichtbar
False, der Abschnitt ist sichtbar (Dies ist der Standardwert.)
HideBorder
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Rahmens um das Feldsteuerelement steuern. Wenn festgelegt:
Wahr, der Rahmen ist nicht sichtbar
Falsch, der Rahmen ist sichtbar (Dies ist der Standardwert.)
HideImage
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Bilds steuern, das von der FieldImageSource-Eigenschaft konfiguriert wird. Wenn festgelegt:
"Wahr", das Bild ist nicht sichtbar.
False, das Bild ist sichtbar (Dies ist der Standardwert.)
HideValidationTab
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Abschnitts steuern, in dem die Liste der Validatoren verwaltet wird. Obwohl sich die Eigenschaft auf eine Registerkarte bezieht, gibt es im FieldElementControl keine Registerkarte, sondern einen Abschnitt, der ausgeblendet werden kann. Wenn festgelegt:
Wahr, der Abschnitt ist nicht sichtbar
False, der Abschnitt ist sichtbar (Dies ist der Standardwert.)
HideSummaryTab
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Abschnitts steuern, in dem Sie die Untertitel der Feldzusammenfassung konfigurieren. Die Untertitel und der entsprechende Wert aus dem Feld werden auf einer SummaryPage-Assistentenseite in einem Phasenfluss angezeigt. Obwohl sich die Eigenschaft auf eine Registerkarte bezieht, gibt es im FieldElementControl keine Registerkarte, sondern einen Abschnitt, der ausgeblendet werden kann. Wenn festgelegt:
Wahr, der Abschnitt ist nicht sichtbar
False, der Abschnitt ist sichtbar (Dies ist der Standardwert.)
HideTaskSequenceTab
Mit dieser booleschen Eigenschaft können Sie die Sichtbarkeit des Abschnitts steuern, in dem Sie die Tasksequenzvariable konfigurieren, die dem Feld entspricht. Obwohl sich die Eigenschaft auf eine Registerkarte bezieht, gibt es im FieldElementControl keine Registerkarte, sondern einen Abschnitt, der ausgeblendet werden kann. Wenn festgelegt:
Wahr, der Abschnitt ist nicht sichtbar
False, der Abschnitt ist sichtbar (Dies ist der Standardwert.)
SetterControl
Verwenden Sie dieses Steuerelement, um den Wert eines Setter-Elements in der Konfigurationsdatei des UDI-Assistenten zu ändern. Dieses Steuerelement enthält ein untergeordnetes Steuerelement, das zum Ändern des Werts des setter-Elements verwendet wird.
Beispiel
Der folgende Auszug aus einer XAML-Datei veranschaulicht die Verwendung von SetterControl zum Ändern eines Setter-Elements namens KeyLocationSetter mithilfe eines untergeordneten TextBox-Steuerelements .
<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>
Eigenschaften
SetterData
Sie müssen dies an eine Eigenschaft Ihrer Ansicht oder Ihres Ansichtsmodells binden, die mit dem Setter verbunden ist. Dies ähnelt der Bindung an ein Feld, wie für das FieldElementControl beschrieben.
HeaderText
Mit dieser Eigenschaft können Sie den Text festlegen, der in der Kopfzeile des Steuerelements angezeigt wird. Stellen Sie sich diese Eigenschaft als Titel für das Steuerelement vor. Standardmäßig wird er als fetter, orangefarbener Text angezeigt.
InstructionText
Legen Sie diese Eigenschaft auf den Text fest, der unter der Kopfzeile angezeigt werden soll – in der Regel ein Anweisungstext, der dem Benutzer Ihres benutzerdefinierten Editors mitteilt, wann und warum er das Verhalten des Felds ändern möchte.
Schnittstellen
Tabelle 70 listet die Schnittstellen auf, die Sie verwenden können, um benutzerdefinierte Assistentenseiten-Editoren zu erstellen.
Tabelle 70. Schnittstellen, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet werden können
| Schnittstelle | Beschreibung |
|---|---|
| IDataService | Verwenden Sie diese Schnittstelle, um Felder mit den Data-Elementen in der Konfigurationsdatei des UDI-Assistenten zu verbinden. |
| IMessageBoxService | Diese Schnittstelle ermöglicht den Zugriff auf Methoden, mit denen Sie Meldungsfelder anzeigen können. |
IDataService
Diese Schnittstelle enthält mehrere Eigenschaften und Methoden, aber es gibt nur eine Eigenschaft, die Sie benötigen. Diese Eigenschaft ist die einzige, die hier dokumentiert ist.
Sie können die Abhängigkeitsinjektion verwenden, um einen Zeiger auf diese Schnittstelle zu erhalten, indem Sie Code wie den folgenden in Ihrer Klasse verwenden:
[Dependency]
public IDataService DataService { get; set; }
Eigenschaften
Tabelle 71 listet die Eigenschaften für die IDataService-Schnittstelle auf.
Tabelle 71. Eigenschaften für die IDataService-Schnittstelle
| Schnittstelle | Beschreibung |
|---|---|
| CurrentPage | Diese Eigenschaft ermöglicht den Zugriff auf die XML-Elemente, -Attribute und -Werte unterhalb des Kontexts der aktuellen Seite, die in der Konfigurationsdatei des UDI-Assistenten bearbeitet wird |
CurrentPage
XElement CurrentPage { get; set; }
Diese Eigenschaft ermöglicht den Zugriff auf den XML-Code für die aktuelle Seite. Sie sollten diese Eigenschaft nie festlegen, aber es steht Ihnen frei, den XML-Code für Ihre Seite zu ändern. Der Beispielseiteneditor zeigt Beispiele für das Ändern des XML-Texts. Diese Eigenschaft verwenden Sie hauptsächlich, wenn Sie über benutzerdefinierte Daten verfügen. Für Felder und Eigenschaften (Setter) können Sie vorgefertigte Steuerelemente verwenden, die sich um alle Details kümmern.
IMessageBoxService
Diese Schnittstelle ermöglicht den Zugriff auf Methoden, mit denen Sie Meldungsfelder anzeigen können. Sie fragen sich vielleicht, warum Sie eine Schnittstelle zum Anzeigen eines Meldungsfelds benötigen. In Wirklichkeit tun Sie das nicht: Microsoft verwendet diese Schnittstelle mit In-Code, weil sie das Schreiben automatisierter Tests für Designerseiten erleichtert.
Die Verwendung dieser Methoden bietet jedoch einen nützlichen Vorteil: In den Dialogfeldern ist der "Besitzer" immer auf den UDI-Assistenten eingestellt, wodurch sichergestellt wird, dass das Dialogfeld korrekt mit dem Hauptfenster gruppiert ist.
Sie können die Abhängigkeitsinjektion verwenden, um einen Zeiger auf diese Schnittstelle zu erhalten, indem Sie Code wie den folgenden in Ihrer Klasse verwenden:
[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Methoden
Tabelle 72 listet die Methoden für die IMessageBoxService-Schnittstelle auf.
Tabelle 72. Methoden für die IMessageBoxService-Schnittstelle
| Methode | Beschreibung |
|---|---|
| ShowMessageBox | Diese überladene Methode wird verwendet, um ein Meldungsfeld mit den folgenden Elementen anzuzeigen: - ShowMessageBox(String message, String Untertitel, MessageBoxImage icon) - ShowMessageBox(string message, string Untertitel, MessageBoxButton button, MessageBoxImage icon) - ShowMessageBox(Ausnahmeausnahme) |
| ShowDialogWindow | Verwenden Sie diese Methode, um ein neues Dialogfeld zu erstellen. |
| ShowWizardWindow | Verwenden Sie diese Methode, um einen benutzerdefinierten Editor in einem Dialogfeld anzuzeigen, der Schaltflächen "Weiter " und "Zurück " für die Navigation enthält. |
ShowMessageBox
Diese Methode zeigt ein Meldungsfeld an, das dem Editor der benutzerdefinierten Assistentenseite untergeordnet ist. Dieses Mitglied ist überladen: Tabelle 73 enthält eine Liste der Mitglieder und eine kurze Beschreibung der einzelnen Elemente. Vollständige Informationen zu den einzelnen Elementen (einschließlich Syntax, Verwendung und Beispielen) finden Sie in dem Abschnitt, der den einzelnen Elementen entspricht.
Tabelle 73. Überladene Member für die ShowMessagBox-Methode
| Member | Beschreibung |
|---|---|
| ShowMessageBox(String message, String Untertitel, MessageBoxImage icon) | Zeigt ein Meldungsfeld mit einem Symbol und einer Schaltfläche "OK " an. |
| ShowMessageBox(string message, string Untertitel, MessageBoxButton button, MessageBoxImage icon) | Zeigt ein Meldungsfeld mit einem Symbol und verschiedenen möglichen Tastenkombinationen an |
| ShowMessageBox(Ausnahmeausnahme) | Zeigt ein Meldungsfeld mit Informationen zu einer Ausnahme und einer Schaltfläche "OK " an |
ShowMessageBox(String message, String Untertitel, MessageBoxImage icon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
Bei dieser Methode wird ein Meldungsfeld mit der Schaltfläche "OK " angezeigt. Siehe Tabelle 74.
Tabelle 74. Parameter für die ShowMessageBox(String message, String Untertitel, MessageBoxImage-Symbol) Methode
| Parameter | Beschreibung |
|---|---|
| Nachricht | Die Meldung, die im Inhaltsbereich des Meldungsfelds angezeigt werden soll |
| caption | Der Text, der in der Titelleiste des Dialogfelds angezeigt werden soll |
| icon | Der Typ des Symbols, das im Meldungsfeld angezeigt werden soll |
ShowMessageBox(string message, string Untertitel, MessageBoxButton button, MessageBoxImage icon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);
Bei dieser Methode wird ein Meldungsfeld mit den gewünschten Schaltflächen angezeigt und gemeldet, welche Schaltfläche Sie ausgewählt haben. Siehe Tabelle 75.
Tabelle 75. Parameter für die ShowMessageBox(string message, string Untertitel, MessageBoxButton button, MessageBoxImage icon) Methode
| Parameter | Beschreibung |
|---|---|
| Nachricht | Die Meldung, die im Inhaltsbereich des Meldungsfelds angezeigt werden soll |
| caption | Der Text, der in der Titelleiste des Dialogfelds angezeigt werden soll |
| Schaltfläche | Welche Schaltflächen angezeigt werden sollen |
| icon | Der Typ des Symbols, das im Meldungsfeld angezeigt werden soll |
ShowMessageBox(Ausnahmeausnahme)
void ShowMessageBox(Exception exception);
Mit dieser Methode wird ein Meldungsfeld angezeigt, das Informationen zu einer Ausnahme meldet. Dieses Meldungsfeld enthält eine einzelne Schaltfläche "OK ". Siehe Tabelle 76.
Tabelle 76. Parameter für die ShowMessageBox(Exception exception)-Methode
| Parameter | Beschreibung |
|---|---|
| Ausnahme | Die Ausnahme, die Sie melden möchten (Im Dialogfeld wird eine Ausnahme verwendet. Nachricht als Inhalt.) |
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
Diese Methode erstellt ein neues Dialogfeld, dessen Inhalt dem Text entspricht, den Sie im viewType-Parameter angeben. Der UDI-Designer erstellt eine neue Instance dieses Typs und verpackt sie in ein Dialogfeld mit den Schaltflächen "OK" und "Abbrechen".
Sie übergeben Daten mit dem Parameter dialogPayload an Ihr Steuerelement. Die SampleEditor-Projektmappe im SDK-Verzeichnis enthält ein Beispiel für die Verwendung dieser Funktionalität.
ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
Mit dieser Methode können Sie einen benutzerdefinierten Editor in einem Dialogfeld anzeigen, der Schaltflächen "Weiter " und "Zurück " für die Navigation enthält. Microsoft hat kein Beispiel für die Verwendung dieser Methode bereitgestellt.
Konfigurationsdatei des UDI-Assistenten – Schemareferenz
Diese Datei wird vom UDI-Assistenten verwendet und vom UDI-Assistenten-Designer konfiguriert. Diese Datei wird verwendet, um Folgendes zu konfigurieren:
Im UDI-Assistenten angezeigte Assistentenseiten
Die Reihenfolge der Assistentenseiten im UDI-Assistenten
Einstellungen für die Felder auf den einzelnen Assistentenseiten
Verfügbare StageGroups im UDI-Assistenten-Designer
Verfügbare Phasen in jedem Bereitstellungsassistenten im UDI-Assistenten-Designer
77 listet die Elemente in der Konfigurationsdatei des UDI-Assistenten und ihre Beschreibungen auf. Das Wizard-Element ist der Stammknoten für diesen Verweis.
Tabelle 77. Elemente in der Konfigurationsdatei des UDI-Assistenten und ihre Beschreibungen
| Elementname | Beschreibung |
|---|---|
| Daten | Gruppiert die einzelnen DataItem-Elemente innerhalb eines Page-Elements und wird durch das Name-Attribut benannt . |
| DataItem | Gruppiert die einzelnen Setter-Elemente innerhalb eines Page-Elements . Sie können hierarchische Daten erstellen, indem Sie mindestens ein Data-Element in ein DataItem-Element aufnehmen. Jedes DataItem-Element stellt ein individuelles Element dar. Eine Liste verfügbarer Laufwerke kann beispielsweise ein DataItem für den Anzeigenamen und ein weiteres DataItem-Element für den entsprechenden Laufwerkbuchstaben enthalten. |
| Default | Gibt einen Standardwert für das Feld an, das im übergeordneten Element Feld oder RadioGroup angegeben ist. Der Standardwert wird auf den Wert gesetzt, der von diesem Element in Klammern gesetzt wird. |
| DLL | Gibt eine DLL an, die vom UDI-Assistenten und vom UDI-Assistenten-Designer geladen und referenziert werden soll. |
| DLLs | Gruppiert die einzelnen DLL-Elemente . |
| Error | Gibt einen möglichen Fehlercode an, den eine Aufgabe zurückgeben kann. Der Wert des Fehlercodes wird vom HRESULT der Aufgabe zurückgegeben und von diesem Element abgefangen, um spezifischere Fehlerinformationen bereitzustellen. |
| ExitCode | Gibt einen möglichen Exitcode für eine Aufgabe an. Die Beendigungscodes sind Rückgabecodes, die die Aufgabe erwartet. Erstellen Sie ein ExitCode-Element für jeden möglichen Beendigungscode. Andernfalls können Sie ein Sternchen (*) im Value-Attribut angeben, um Rückgabecodes zu behandeln, die nicht in anderen ExitCode-Elementen aufgeführt sind. |
| ExitCodes | Gruppiert eine Reihe von ExitCode- und Error-Elementenfür ein Task-Element oder ein Error-Element . |
| Field | Gibt eine Instance eines Steuerelements in einem Page-Element an, das zur Anpassung mit XML verwendet wird. Nicht alle Steuerelemente ermöglichen die Anpassung mit XML, sondern nur Steuerelemente, die das Field-Element verwenden. |
| Fields | Gruppiert die einzelnen Field-Elemente innerhalb eines Page-Elements . |
| Datei | Gibt die Quelle und das Ziel für einen Dateikopiervorgang mit dem Tasktyp Microsoft.Wizard.CopyFilesTask an. Sie können ein separates File-Element einschließen, um mehr als eine Datei in einer einzigen Aufgabe zu kopieren. |
| Page | Gibt eine Instance einer Seite an und enthält alle Konfigurationseinstellungen für die Seite. |
| Seitenverweis | Gibt einen Verweis auf eine Instance einer Seite innerhalb einer Stage innerhalb einer StageGroup an. |
| Pages | Gruppiert die einzelnen Seitenelemente . |
| RadioGroup | Gibt eine Gruppe von Optionsfeldern innerhalb eines Field-Elements an. |
| StageGroup | Gibt eine Gruppe von einer oder mehreren Phasen an. |
| StageGroups | Gruppiert eine Reihe von Phasengruppen innerhalb einer Konfigurationsdatei des UDI-Assistenten. |
| Setter | Gibt eine Eigenschaftseinstellung eines Werts für eine Eigenschaft an, die in der Eigenschaft-Eigenschaft benannt ist. |
| Stufe | Gibt eine Phase innerhalb einer StageGroup an und enthält mindestens ein PageRef-Element . |
| Style | Gruppiert die einzelnen Setterelemente , die das Aussehen und Verhalten des UDI-Assistenten konfigurieren, einschließlich des Titels, der oben im Assistenten angezeigt wird, und des Bannerbilds, das im UDI-Assistenten angezeigt wird. |
| Aufgabe | Gibt eine Aufgabe an, die auf der Seite ausgeführt werden soll, die im übergeordneten Page-Element angegeben ist. |
| Aufgaben | Gruppiert eine Reihe von Aufgaben für ein Page-Element . |
| Validator | Gibt ein Validierungssteuerelement für das Feldsteuerelement an, das im übergeordneten Field-Element angegeben wird. |
| Assistent | Gibt den Stamm für alle anderen Elemente an. |
Daten
Dieses Element gruppiert die einzelnen DataItem-Elemente innerhalb eines Page-Elements und wird durch das Name-Attribut benannt.
Informationen zu Elementen
Tabelle 78 enthält Informationen über das Data-Element .
Tabelle 78. Informationen zu Datenelementen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes Page-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | Seite, DataItem |
| Inhalt | DataItem, Setter |
Elementattribute
Tabelle 79 listet die Attribute des Data-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 79. Attribute und entsprechende Werte für das Datenelement
| Attribut | Beschreibung |
|---|---|
| Name | Gibt den Namen des Data-Elements an. |
Hinweise
Mit dem Name-Attribut kann Code einen bestimmten Datensatz abrufen.
Beispiel
None.
DataItem
Dieses Element gruppiert die einzelnen Setter-Elemente innerhalb eines Page-Elements . Sie können hierarchische Daten erstellen, indem Sie mindestens ein Data-Element in ein DataItem-Element aufnehmen. Jedes DataItem-Element stellt ein individuelles Element dar. Eine Liste verfügbarer Laufwerke kann beispielsweise ein DataItem für den Anzeigenamen und ein weiteres DataItem-Element für den entsprechenden Laufwerkbuchstaben enthalten.
Informationen zu Elementen
Tabelle 80 enthält Informationen zum DataItem-Element .
Tabelle 80. Informationen zum DataItem-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes Datenelements (dieses Element ist optional.) |
| Übergeordnete Elemente | Daten |
| Inhalt | Daten, Setter |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
None.
Default
Dieses Element gibt einen Standardwert für das Feld an, das im übergeordneten Element Field oder RadioGroup angegeben ist. Der Standardwert ist auf den Wert gesetzt, den dieses Element umklammert.
Informationen zu Elementen
Tabelle 81 enthält Informationen zum Default-Element .
Tabelle 81. Informationen zum Standardelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb eines Field - oder RadioGroup-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | Field, RadioGroup |
| Inhalt | Kann jeder wohlgeformte XML-Inhalt sein, ist aber in der Regel Standardtext |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
Im folgenden Beispiel ist die Standardeinstellung für das Feld "TimeZone" die "Pacific Standard Time":
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
DLL
Dieses Element gibt eine DLL an, die der UDI-Assistent und der UDI-Assistent Designer laden und auf die verwiesen werden soll.
Informationen zu Elementen
Tabelle 82 enthält Informationen zum DLL-Element .
Tabelle 82. Informationen zu DLL-Elementen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb des DLL-Elements |
| Übergeordnetes Element | DLLs |
| Inhalt | Für dieses Element ist kein Inhalt zulässig |
Elementattribute
Tabelle 83 listet die Attribute des DLL-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 83. Attribute und entsprechende Werte für das DLL-Element
| Attribut | Beschreibung |
|---|---|
| Name | Gibt den Namen der DLL an, auf die der UDI-Assistent und der UDI-Assistenten-Designer verweisen sollen. |
Hinweise
None.
Beispiel
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
DLLs
Dieses Element gruppiert die einzelnen DLL-Elemente .
Informationen zu Elementen
Tabelle 84 enthält Informationen zum DLL-Element .
Tabelle 84. Informationen zum DLL-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eins |
| Übergeordnete Elemente | Assistent |
| Inhalt | DLL |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Fehler
Dieses Element gibt einen möglichen Fehlercode an, den eine Aufgabe zurückgeben kann. Der Wert des Fehlercodes wird zurückgegeben und vom HRESULT der Aufgabe abgefangen, um spezifischere Fehlerinformationen bereitzustellen.
Informationen zu Elementen
Tabelle 85 enthält Informationen über das Error-Element .
Tabelle 85. Informationen zum Fehlerelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes ExitCode-Elements (dieses Element ist optional.) |
| Übergeordnete Elemente | ExitCodes |
| Inhalt | Beliebiger wohlgeformter XML-Inhalt |
Elementattribute
Tabelle 86 listet die Attribute des Error-Elements auf und bietet eine Beschreibung der einzelnen Attribute.
Tabelle 86. Informationen zum Fehlerelement
| Attribut | Beschreibung |
|---|---|
| Status | Gibt den Rückgabestatus einer Aufgabe an, bei der ein Fehler aufgetreten ist. Normalerweise wird der Wert für dieses Attribut auf "Error" gesetzt. Dieser Wert wird in der Spalte "Status " auf der Assistentenseite im UDI-Assistenten angezeigt. |
| Text | Gibt den beschreibenden Text über die Fehlerbedingung an, auf die die Aufgabe gestoßen ist. |
| Typ | Gibt an, ob dieses Element einen Fehler, eine Warnung oder einen Erfolg darstellt. Der inType angegebene Wert muss innerhalb eines ExitCodes-Elements eindeutig sein. Die folgenden Werte sind gültige Werte für dieses Element: - **0.**Das Element stellt einen Erfolg dar. - 1. Das Element stellt eine Warnung dar. - -1. Das Element stellt einen Fehler dar. |
| Wert | Gibt den Wert des Codes an, den die Aufgabe als numerischen Wert zurückgegeben hat. Wenn Sie den Wert eines Sternchens (*) angeben, wird das Standardelement für Rückgabecodes angegeben, die nicht in anderen Error-Elementen aufgeführt sind. |
Hinweise
None.
Beispiel
None.
ExitCode
Dieses Element gibt einen möglichen Exitcode für eine Aufgabe an. Die Beendigungscodes sind Rückgabecodes, die die Aufgabe erwartet. Erstellen Sie ein ExitCode-Element für jeden möglichen Beendigungscode. Andernfalls können Sie ein Sternchen (*) im Value-Attribut angeben, um Rückgabecodes zu behandeln, die nicht in anderen ExitCode-Elementen aufgeführt sind.
Informationen zu Elementen
Tabelle 87 enthält Informationen zum ExitCode-Element .
Tabelle 87. Informationen zum ExitCode-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes ExitCodes-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | ExitCodes |
| Inhalt | Mindestens ein ExitCode-Element und null oder mehr Error-Elemente |
Elementattribute
Tabelle 88 listet die Attribute des ExitCode-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 88. Attribute und entsprechende Werte für das ExitCode-Element
| Attribut | Beschreibung |
|---|---|
| Status | Gibt den Rückgabestatus einer Aufgabe an. Der Wert dieses Attributs wird in der Spalte "Status " auf der entsprechenden Assistentenseite im UDI-Assistenten angezeigt. Sie können beliebige Werte für dieses Attribut verwenden, die für Ihre Aufgabe sinnvoll sind. Die folgenden typischen Werte werden für dieses Attribut verwendet: – Erfolg – Warnung – Fehler |
| Text | Gibt den beschreibenden Text über den vorhandenen Code der Aufgabe an. |
| Typ | Gibt an, ob dieses Element einen Fehler, eine Warnung oder einen Erfolg darstellt. Der in type angegebene Wert muss innerhalb eines ExitCodes-Elements eindeutig sein. Die folgenden Werte sind gültige Werte für dieses Element: - 0. Das Element stellt einen Erfolg dar. - 1. Das Element stellt eine Warnung dar. - -1. Das Element stellt einen Fehler dar. |
| Wert | Gibt den Wert des Codes an, den die Aufgabe als numerischen Wert zurückgegeben hat. Die Angabe des Werts eines Sternchens (*) gibt das Standardelement für Rückgabecodes an, die nicht in anderen ExitCode-Elementen aufgeführt sind. |
Hinweise
None.
Beispiel
None.
ExitCodes
Dieses Element gruppiert eine Reihe von ExitCode- und Error-Elementenfür ein Task- oder ein Error-Element .
Informationen zu Elementen
Tabelle 89 enthält Informationen zum ExitCodes-Element .
Tabelle 89. Informationen zum ExitCodes-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Einer innerhalb jedes Task-Elements |
| Übergeordnete Elemente | Aufgabe |
| Inhalt | Fehler, ExitCode |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
None.
Feld
Dieses Element gibt eine Instance eines Steuerelements in einem Page-Element an, das für die Anpassung mit XML verwendet wird. Nicht alle Steuerelemente ermöglichen die Anpassung mit XML, sondern nur Steuerelemente, die das Field-Element verwenden.
Informationen zu Elementen
Tabelle 90 enthält Informationen über das Field-Element .
Tabelle 90. Informationen zum Feldelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes Field-Elements (dieses Element ist optional.) |
| Übergeordnete Elemente | Fields |
| Inhalt | Standard, Validator |
Elementattribute
Tabelle 91 listet die Attribute des Field-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 91. Attribute und entsprechende Werte für das Feldelement
| Attribut | Beschreibung |
|---|---|
| Enabled | Gibt an, ob das Feld für Benutzereingaben aktiviert ist (das Attribut kann auf "True" oder "False" festgelegt werden.) |
| Name | Gibt den Namen des Felds an. |
| Summary | Gibt den beschreibenden Text an, der auf der Seite Zusammenfassungs-Assistent für den Wert angezeigt wird, den dieses Feld festlegt |
| VarName | Gibt den Namen der Tasksequenzvariablen an, der mithilfe des Felds im übergeordneten Field-Element gelesen oder konfiguriert wurde |
Hinweise
Dieses Element kann null oder mehr Default-Elemente und null oder mehr Validator-Elemente enthalten.
Beispiel
None.
Felder
Dieses Element gruppiert die einzelnen Field-Elemente innerhalb eines Page-Elements .
Informationen zu Elementen
Tabelle 92 enthält Informationen über das Fields-Element .
Tabelle 92. Fields Element-Informationen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes Page-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | Page |
| Inhalt | Field, RadioGroup |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
None.
File
Dieses Element gibt die Quelle und das Ziel für einen Dateikopiervorgang mit dem Tasktyp Microsoft.Wizard.CopyFilesTask an. Sie können ein separates File-Element einschließen, um mehr als eine Datei in einer einzigen Aufgabe zu kopieren.
Informationen zu Elementen
Tabelle 93 enthält Informationen über das File-Element.
Tabelle 93. Informationen zu Dateielementen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere für jede Aufgabe mit dem Aufgabentyp "Microsoft.Wizard.CopyFilesTask" |
| Übergeordnete Elemente | Aufgabe |
| Inhalt | Keine |
Elementattribute
Tabelle 94 listet die Attribute des File-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 94. Attribute und entsprechende Werte für das File-Element
| Attribut | Beschreibung |
|---|---|
| Ziel | Gibt den vollqualifizierten oder relativen Pfad zum Zielordner für die im Source-Attribut angegebene Datei an. Umgebungsvariablen sind als Teil des Pfads zulässig. |
| Source | Gibt den vollqualifizierten oder relativen Pfad zur Quelldatei an, die vom Tasktyp "Microsoft.Wizard.CopyFilesTask" kopiert wird. Dieses Attribut unterstützt Platzhalterzeichen, sodass mehrere Dateien mit einem einzigen File-Element kopiert werden können. Umgebungsvariablen sind als Teil des Pfads zulässig. |
Hinweise
None.
Beispiel
None.
Seite
Dieses Element gibt eine Instance einer Seite an und enthält alle Konfigurationseinstellungen für die Seite.
Informationen zu Elementen
Tabelle 95 enthält Informationen über das Page-Element.
Tabelle 95. Informationen zum Seitenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Mindestens eine innerhalb jedes Pages-Elements |
| Übergeordnete Elemente | Pages |
| Inhalt | Daten, Felder, Setter, Aufgaben |
Elementattribute
Tabelle 96 listet die Attribute des Page-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 96. Attribute und entsprechende Werte für das Seitenelement
| Attribut | Beschreibung |
|---|---|
| DisplayName | Gibt den benutzerfreundlichen Namen der Assistentenseite an, die im UDI-Assistenten-Designer angezeigt wird. Dieser Name ist in der Regel aussagekräftiger als das Namensattribut. |
| Name | Gibt den Namen der Assistentenseite an, die im UDI-Assistenten-Designer angezeigt wird. |
| Typ | Gibt den Typ der Assistentenseite an, die in direktem Zusammenhang mit einer bestimmten Assistentenseite innerhalb einer DLL steht. |
Hinweise
None.
Beispiel
None.
Seitenverweis
Dieses Element gibt einen Verweis auf eine Instance einer Seite innerhalb einer Stage innerhalb einer StageGroup an.
Informationen zu Elementen
Tabelle 97 enthält Informationen über das PageRef-Element .
Tabelle 97. PageRef-Elementinformationen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb eines Stage-Elements |
| Übergeordnete Elemente | Stufe |
| Inhalt | Keine |
Elementattribute
Tabelle 98 listet das Attribut des PageRef-Elements auf und enthält eine Beschreibung davon.
Tabelle 98. Attribute und entsprechende Werte für das PageRef-Element
| Attribut | Beschreibung |
|---|---|
| Page | Gibt die Instance einer Seite innerhalb einer Stage innerhalb einer StageGroup an. Legen Sie diesen Wert auf das Name-Attribut eines Page-Elements fest. |
Hinweise
None.
Beispiel
None.
Seiten
Dieses Element gruppiert die einzelnen Page-Elemente .
Informationen zu Elementen
Tabelle 99 enthält Informationen über das Pages-Element .
Tabelle 99. Informationen zum Seitenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eins |
| Übergeordnete Elemente | Assistent |
| Inhalt | Page |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<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
Dieses Element gibt eine Gruppe von Optionsfeldern in einem Field-Element an.
Informationen zu Elementen
Tabelle 100 enthält Informationen über das RadioGroup-Element .
Tabelle 100. Informationen zu RadioGroup-Elementen
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb eines Fields-Elements (Dieses Element ist optional.) |
| Übergeordnete Elemente | Fields |
| Inhalt | Default |
Elementattribute
Tabelle 101 listet die Attribute des RadioGroup-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 101. Attribute und entsprechende Werte für das Element RadioGroup
| Attribut | Beschreibung |
|---|---|
| Locked | Gibt an, ob die Gruppe der Optionsfelder für Benutzereingaben aktiviert ist. Das Attribut kann festgelegt werden auf: - Stimmt. Gibt an, dass die Optionsfelder deaktiviert sind und Benutzer kein Optionsfeld in der Gruppe auswählen können. - Falsch. Gibt an, dass die Optionsfelder aktiviert sind und Benutzer ein Optionsfeld in der Gruppe auswählen können. |
| Name | Gibt den Namen der Funkoptionsgruppe an. |
Hinweise
None.
Beispiel
None.
StageGroup
Dieses Element gibt eine Bereitstellungsphasengruppe an.
Informationen zu Elementen
Tabelle 102 enthält Informationen über das StageGroup-Element .
Tabelle 102. Informationen zum StageGroup-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb eines StageGroups-Elements |
| Übergeordnete Elemente | StageGroups |
| Inhalt | Stufe |
Elementattribute
Tabelle 103 listet die Attribute des StageGroup-Elements und eine Beschreibung des Attributs auf.
Tabelle 103. Attribute und entsprechende Werte für das StageGroup-Element
| Attribut | Beschreibung |
|---|---|
| DisplayName | Gibt den benutzerfreundlichen Namen der Phasengruppe an, die im UDI-Assistenten-Designer angezeigt wird. Dieser Name ist in der Regel aussagekräftiger als das Namensattribut. |
Hinweise
None.
Beispiel
None.
StageGroups
Dieses Element gruppiert eine Reihe von Phasengruppen in einer Konfigurationsdatei des UDI-Assistenten.
Informationen zu Elementen
Tabelle 104 enthält Informationen über das StageGroups-Element .
Tabelle 104. Informationen zum StageGroups-Element
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder Eins innerhalb eines Assistentenelements |
| Übergeordnete Elemente | Assistent |
| Inhalt | StageGroup |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
None.
Setter
Dieses Element gibt eine Eigenschaftseinstellung für den Wert einer Eigenschaft an, die in der Property-Eigenschaft benannt ist.
Informationen zu Elementen
Tabelle 105 enthält Informationen über das Setter-Element .
Tabelle 105. Informationen zum Setterelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder mehr innerhalb jedes übergeordneten Elements (dieses Element ist optional.) |
| Übergeordnete Elemente | Daten, Datenelement, Seite, Stil, Aufgabe, Validator |
| Inhalt | Enthält einen Zeichenfolgenwert im Property-Attribut |
Elementattribute
Tabelle 106 listet das Attribut des Setter-Elements auf und enthält eine Beschreibung davon.
Tabelle 106. Attribute und entsprechende Werte für das Setter-Element
| Attribut | Beschreibung |
|---|---|
| Eigenschaft | Gibt den festzulegenden Eigenschaftsnamen an. Der Eigenschaftsname ist auf den Wert festgelegt, den dieses Attribut einschließt. |
Hinweise
None.
Beispiel
None.
Phase
Dieses Element gibt eine Stage innerhalb einer StageGroup an und enthält mindestens ein PageRef-Element .
Informationen zu Elementen
Tabelle 107 enthält Informationen über das Stage-Element .
Tabelle 107. Informationen zum Phasenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb eines StageGroup-Elements |
| Übergeordnete Elemente | StageGroup |
| Inhalt | Seitenverweis |
Elementattribute
Tabelle 108 listet die Attribute des Stage-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 108. Attribute und entsprechende Werte für das Stage-Element
| Attribut | Beschreibung |
|---|---|
| DisplayName | Gibt den benutzerfreundlichen Namen der Assistentenseite an, die im UDI-Assistenten-Designer angezeigt wird. Dieser Name ist in der Regel aussagekräftiger als das Namensattribut. |
| Name | Gibt den Namen der Bühne an. Der Wert dieses Elements wird beim Starten des UDI-Assistenten mit dem Befehlszeilenparameter /stage: name verwendet. |
Hinweise
None.
Beispiel
None.
Format
Dieses Element gruppiert die einzelnen Setter-Elemente , die das Erscheinungsbild des UDI-Assistenten konfigurieren, einschließlich des Titels, der oben im Assistenten angezeigt wird, und des Bannerbilds, das im UDI-Assistenten angezeigt wird.
Informationen zu Elementen
Tabelle 109 enthält Informationen über das Style-Element.
Tabelle 109. Informationen zum Stilelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eins |
| Übergeordnete Elemente | Assistent |
| Inhalt | Setter |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<Style>
<Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
<Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>
Aufgabe
Dieses Element gibt eine Aufgabe an, die auf der Seite ausgeführt werden soll, die im übergeordneten Page-Element angegeben ist.
Informationen zu Elementen
Tabelle 110 enthält Informationen über das Task-Element .
Tabelle 110. Informationen zum Aufgabenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eine oder mehrere innerhalb eines Tasks-Elements |
| Übergeordnete Elemente | Aufgaben |
| Inhalt | ExitCodes, Datei, Setter |
Elementattribute
Tabelle 111 listet die Attribute des Task-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 111. Attribute und entsprechende Werte für das Aufgabenelement
| Attribut | Beschreibung |
|---|---|
| Hängt von | Gibt an, ob die Aufgabe von einer anderen Aufgabe abhängig ist. Der Wert dieses Attributs wird auf das Name-Attribut eines anderen Task-Elements festgelegt. Hinweis: Dieses Attribut kann nicht mit dem UDI-Assistenten-Designer konfiguriert werden. Sie können dieses Attribut jedoch manuell einem Task-Element hinzufügen, indem Sie die .xml Datei direkt ändern. |
| DisplayName | Gibt den benutzerfreundlichen Namen der Aufgabe an, die im UDI-Assistenten-Designer angezeigt wird. Dieser Name ist in der Regel aussagekräftiger als das Namensattribut. |
| Name | Gibt den Namen der Aufgabe an. Dieser Name muss eindeutig sein. |
| Typ | Gibt den Aufgabentyp für die auszuführende Aufgabe an, der in der DLL definiert ist, die die Aufgabe enthält. |
Hinweise
None.
Beispiel
None.
Aufgaben
Dieses Element gruppiert eine Reihe von Aufgaben für ein Page-Element .
Informationen zu Elementen
Tabelle 112 enthält Informationen über das Tasks-Element .
Tabelle 112. Informationen zum Aufgabenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder eins innerhalb jedes Page-Elements (dieses Element ist optional.) |
| Übergeordnete Elemente | Page |
| Inhalt | Aufgabe |
Elementattribute
Tabelle 113 listet die Attribute des Tasks-Elements auf und enthält eine Beschreibung der einzelnen Attribute.
Tabelle 113. Attribute und entsprechende Werte für das tasks-Element
| Attribut | Beschreibung |
|---|---|
| NameTitle | Gibt die Untertitel an, die am oberen Rand der Spalte angezeigt werden, die den Namen der Aufgaben auf der entsprechenden Assistentenseite enthält. |
| StatusTitle | Gibt die Untertitel an, die oben in der Spalte angezeigt werden, die den Status der Aufgaben auf der entsprechenden Assistentenseite enthält. |
Hinweise
None.
Beispiel
None.
Validator
Dieses Element gibt ein Validierungssteuerelement für das Feldsteuerelement an, das im übergeordneten Field-Element angegeben wird.
Informationen zu Elementen
Tabelle 114 enthält Informationen über das Validator-Element .
Tabelle 114. Informationen zum Validatorelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Null oder Eins innerhalb eines Field-Elements |
| Übergeordnete Elemente | Field |
| Inhalt | Setter |
Elementattribute
Tabelle 115 listet das Attribut des Validator-Elements auf und enthält eine Beschreibung davon.
Tabelle 115. Attribute und entsprechende Werte für das Validator-Element
| Attribut | Beschreibung |
|---|---|
| Typ | Gibt den Typ für das Validierungssteuerelement an, das in der DLL definiert ist, die das Validierungssteuerelement enthält |
Hinweise
None.
Beispiel
None.
Assistent
Dieses Element gibt den Stamm für alle anderen Elemente an.
Informationen zu Elementen
Tabelle 116 enthält Informationen über das Wizard-Element .
Tabelle 116. Informationen zum Assistentenelement
| Attribut | Wert |
|---|---|
| Anzahl der Vorkommen | Eins |
| Übergeordnete Elemente | Keine |
| Inhalt | DLLs, Seiten, StageGroups, Style |
Elementattribute
Dieses Element weist keine Attribute auf.
Hinweise
None.
Beispiel
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>