Benutzergesteuerte Installation – Entwicklerhandbuch

Die benutzergesteuerte Installation (User Driven Installation, UDI) vereinfacht die Bereitstellung von Windows-Clientbetriebssystemen®, z. B. Windows 8.1, auf Computern, die das Betriebssystembereitstellungsfeature (OSD) in Microsoft ® System Center 2012 R2 Configuration Manager verwenden. UDI ist Teil des Microsoft Deployment Toolkit (MDT).

Einführung

Bei der Bereitstellung von Betriebssystemen mit dem OSD-Feature müssen Sie in der Regel alle erforderlichen Informationen für die Bereitstellung des Betriebssystems bereitstellen. Die Informationen werden in Konfigurationsdateien oder in Datenbanken (z. B. der CustomSettings.ini-Datei oder der MDT-Datenbank [MDT DB]) konfiguriert. Sie müssen alle Konfigurationseinstellungen angeben, bevor Sie die Bereitstellung initiieren können.

UDI stellt eine assistentengesteuerte Schnittstelle bereit, mit der Sie Konfigurationsinformationen unmittelbar vor der Bereitstellung bereitstellen können. Dieses Verhalten ermöglicht es Ihnen, generische OSD-Tasksequenzen zu erstellen und dann zum Zeitpunkt der Bereitstellung computerspezifische Informationen bereitzustellen, was eine größere Flexibilität im Bereitstellungsprozess bietet.

Zielgruppe

Dieser Leitfaden wurde für Entwickler geschrieben, die benutzerdefinierte Assistentenseiten für den UDI-Assistenten und benutzerdefinierte Assistentenseiten-Editoren für den UDI-Assistenten-Designer erstellen. In diesem Leitfaden wird davon ausgegangen, dass Sie mit der Entwicklung von Windows-Anwendungen vertraut sind mit:

  • C++, das zum Erstellen benutzerdefinierter Assistentenseiten verwendet wird

  • Microsoft .NET Framework, das zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet wird

  • Windows Presentation Foundation (WPF), das zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet wird

  • Sprachen, die WPF unterstützt, z. B. C#, C++ oder Microsoft Visual Basic® .NET, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet werden

Informationen zu diesem Leitfaden

Dieser Leitfaden enthält die erforderlichen Referenzinformationen, die Ihnen helfen, UTI für Ihre Organisation anzupassen. In diesem Leitfaden werden keine administrativen oder betrieblichen Themen behandelt, z. B. die Installation von MDT (einschließlich UDI), das Konfigurieren von UDI für die Bereitstellung von Betriebssystemen und Anwendungen oder das Durchführen von Bereitstellungen mithilfe des UDI-Assistenten. Weitere Informationen zu diesen Themen finden Sie in den UDI-Themen unter Verwenden des Microsoft Deployment Toolkits, das in MDT enthalten ist.

Übersicht über die UDI-Entwicklung

Mit der UDI-Entwicklung können Sie die Von UDI bereitgestellten Features erweitern. In der Regel ist die UDI-Entwicklung erforderlich, wenn Sie zusätzliche Informationen sammeln möchten, die der UDI-Bereitstellungsprozess nutzt. Diese zusätzlichen Informationen werden in der Regel als Tasksequenzvariablen gespeichert, die Tasksequenzschritte in einer UDI-Tasksequenz in Configuration Manager gelesen werden.

UDI-Architektur

Das allgemeine Ziel der UDI-Entwicklung besteht darin, benutzerdefinierte Assistentenseiten zu erstellen, die im UDI-Assistenten angezeigt werden können. Durch das Erstellen benutzerdefinierter Assistentenseiten können Sie die vorhandenen Features von UDI erweitern, um die geschäftlichen und technischen Anforderungen Ihrer Organisation zu erfüllen. Eine benutzerdefinierte Assistentenseite sammelt Informationen zusätzlich zu oder anstelle der Von UDI bereitgestellten Assistentenseiten.

Abbildung 1 veranschaulicht die Beziehung zwischen dem UDI-Assistenten-Designer und dem UDI-Assistenten.

Abbildung 1. Beziehung zwischen dem UDI-Assistenten und dem Designer des UDI-Assistenten Abbildung 1. Beziehung zwischen dem UDI-Assistenten und dem Designer des UDI-Assistenten

Abbildung 1: Beziehung zwischen dem UDI-Assistenten und dem Designer des UDI-Assistenten

Auf konzeptioneller Ebene umfasst die UDI-Entwicklung die Erstellung von:

  • Benutzerdefinierte Assistentenseiten. Assistentenseiten werden im UDI-Assistenten angezeigt und sammeln die Informationen, die zum Abschließen des Bereitstellungsprozesses erforderlich sind. Sie erstellen Assistentenseiten mit C++ in Microsoft Visual Studio®. Die Seiten des benutzerdefinierten Assistenten werden als DLLs implementiert, die der UDI-Assistent liest. 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 benutzerdefinierten Assistentenseiten-Editoren werden als DLLs implementiert, die der UDI-Assistent-Designer liest. 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 Assemblys, die zum Erstellen eines benutzerdefinierten Assistenten-Seiten-Editors für die Verwendung im UDI-Assistenten-Designer erforderlich sind. Das UDI SDK enthält ein Beispiel für das Erstellen benutzerdefinierter Assistentenseiten-Editoren.

    Darüber hinaus verwendet der UDI-Assistent-Designer unterstützende Konfigurationsdateien des Assistenten-Seiten-Editors. Sie erstellen die Konfigurationsdateien des Assistenten-Seiten-Editors als Teil des Prozesses zum Erstellen Ihrer benutzerdefinierten Assistentenseiten und benutzerdefinierten Assistentenseiten-Editoren. Der UDI-Assistent-Designer erstellt 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:

  1. Bereiten Sie die Voraussetzungen für die UDI-Entwicklungsumgebung wie unter Vorbereiten der Voraussetzungen für die UDI-Entwicklungsumgebung beschrieben vor.

  2. Konfigurieren Sie die UDI-Entwicklungsumgebung wie unter Konfigurieren der UDI-Entwicklungsumgebung beschrieben.

  3. 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:

  1. Bereiten Sie die Hardwareanforderungen der UDI-Entwicklungsumgebung wie unter Vorbereiten der Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung beschrieben vor.

  2. Bereiten Sie die Softwareanforderungen der UDI-Entwicklungsumgebung wie unter Vorbereiten der Softwarevoraussetzungen für die UDI-Entwicklungsumgebung beschrieben vor.

Vorbereiten der Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung

Die Hardwarevoraussetzungen für die UDI-Entwicklungsumgebung entsprechen den Hardwareanforderungen 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 die folgenden 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 eine 32-Bit- und 64-Bit-UDI-Entwicklung mit einem 64-Bit-Betriebssystem durchführen. Sie führen nur die 32-Bit-UDI-Entwicklung auf 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 für die einzelnen Editionen in der Visual Studio-Dokumentation.

  • Microsoft .NET Framework Version 4.0 (für Visual Studio 2010 erforderlich)

  • C++-Sprache (die Sprache, die beim Erweitern von Seiten des UDI-Assistenten verwendet wird)

  • Andere Sprachen, die WPF unterstützt, z. B. C#, Visual Basic .NET oder C++/Common Language Infrastructure, die zum Erweitern von Assistenten-Editoren des UDI-Assistenten verwendet werden

    Hinweis

    Der Beispielquellcode für die Assistenten-Assistenten-Editoren des UDI-Assistenten ist in C# geschrieben. Installieren Sie die Sprache C#, wenn Sie den Beispielquellcode verwenden möchten.

Konfigurieren der UDI-Entwicklungsumgebung

Nachdem die Voraussetzungen für die UDI-Entwicklungsumgebung erfüllt sind, führen Sie die folgenden Schritte aus, um die UDI-Entwicklungsumgebung zu konfigurieren:

  1. Installieren Sie Visual Studio 2010.

    Stellen Sie sicher, dass Sie die Sprache C++ und jede andere Sprache installieren, die WPF unterstützt.

    Hinweis

    Der Beispielquellcode für die Editorseiten des UDI-Assistenten 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.

  2. 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 Toolkits.

  3. Erstellen Sie in Windows-Explorer local_folder (wobei local_folder ein beliebiger Ordner ist, der sich auf einem lokalen Laufwerk auf dem Entwicklungscomputer befindet).

  4. Kopieren Sie den Ordner installation_folder\SDK in 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 ist).

    Sie kopieren den SDK-Ordner an einen anderen Speicherort, da MDT im Ordner Programme installiert ist, in den ohne erhöhte Berechtigungen nicht 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.

  5. Kopieren Sie den Ordner installation_folder\Templates\Distribution\Tools in local_folder (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben, und local_folder der Ordner ist, den Sie zuvor erstellt haben).

  6. Benennen Sie den Ordner local_folder\Tools in local_folder\OSDSetupWizard (wobei local_folder der Ordner ist, den Sie zuvor erstellt haben).

    Nach Abschluss des Vorgangs sollte die Ordnerstruktur unter local_folder wie die in Abbildung 2 dargestellte Ordnerstruktur 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-Entwicklung Abbildung 2. Ordnerstruktur für die UDI-Entwicklung

    Abbildung 2: Ordnerstruktur für die UDI-Entwicklung

Überprüfen der UDI-Entwicklungsumgebung

Wenn die UDI-Entwicklungsumgebung konfiguriert ist, überprüfen Sie, ob die UDI-Entwicklungsumgebung ordnungsgemäß konfiguriert ist, indem Sie sicherstellen, dass die Beispielprojekte in Visual Studio 2010 ordnungsgemäß erstellt werden.

Überprüfen Sie, ob die UDI-Entwicklungsumgebung ordnungsgemäß konfiguriert ist, indem Sie bestimmen, ob:

Überprüfen, ob das SamplePage-Projekt ordnungsgemäß erstellt wird

Das SamplePage-Projekt enthält ein Beispiel für das Erstellen einer benutzerdefinierten Assistentenseite für den UDI-Assistenten. Weitere Informationen zum SamplePage-Projekt finden Sie unter Überprüfen der Visual Studio-Projektmappe SamplePage.

So überprüfen Sie, ob das SamplePage-Projekt ordnungsgemäß erstellt wird

  1. Starten Sie Visual Studio 2010.

  2. Öffnen Sie das SamplePage-Projekt.

    Das SamplePage-Projekt befindet sich im Ordner local_folder\SDK\UDI\SamplePage (wobei local_folder der Ordner ist, den Sie zuvor erstellt haben).

  3. Klicken Sie in Visual Studio 2010 in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt SamplePage, und klicken Sie dann auf Eigenschaften.

    Das Dialogfeld SamplePage-Eigenschaftenseiten wird angezeigt.

  4. Wechseln Sie im Dialogfeld SamplePage-Eigenschaftenseiten zu Konfigurationseigenschaften/Debuggen.

  5. Wählen Sie in den Debugeigenschaften unter Konfigurationdie Option Alle Konfigurationen aus.

  6. Geben Sie unter Befehl in den Debugeigenschaften $(TargetDir)\OSDSetupWizard.exe ein.

  7. Geben Sie in den Debugeigenschaften unter Arbeitsverzeichnisdie Zeichenfolge $(TargetDir) ein.

  8. Navigieren Sie im Dialogfeld SamplePage-Eigenschaftenseiten zu Konfigurationseigenschaften/Buildereignisse/Postbuildereignis.

  9. Geben Sie in den Eigenschaften für Postbuildereignis 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"  
    
  10. Klicken Sie im Dialogfeld SamplePage-Eigenschaftenseiten auf OK.

  11. Speichern Sie das Projekt.

  12. Klicken Sie im Menü Debuggen auf Debuggen starten.

    Das Dialogfeld Microsoft Visual Studiowird angezeigt, in dem angezeigt wird, dass die Quelle veraltet ist, und Sie werden gefragt, ob Sie das Projekt erstellen möchten.

  13. Klicken Sie im Dialogfeld Microsoft Visual Studio auf Ja.

    Das Dialogfeld Keine Debuginformationen wird angezeigt, in dem Sie darüber informiert werden, dass keine Debuginformationen für OSDSetupWizard.exe verfügbar sind.

  14. Klicken Sie im Dialogfeld Keine Debuginformationen auf Ja.

    Der UDI-Assistent wird geöffnet, und die Seite des benutzerdefinierten Assistenten wird angezeigt.

  15. Vergewissern Sie sich, dass Sie unter Standort auswählen einen Wert auswählen können.

  16. Klicken Sie im Formular Assistent mit Beispielseite auf Abbrechen.

    Das Dialogfeld Abbrechen-Assistent wird angezeigt.

  17. Klicken Sie im Dialogfeld Abbrechen-Assistent auf Ja.

  18. 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 Assistenten-Seiten-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 ordnungsgemäß erstellt wird

  1. Starten Sie Visual Studio 2010.

  2. Öffnen Sie das Projekt SampleEditor.

    Das SampleEditor-Projekt befindet sich im Ordner local_folder\SDK\UDI\SampleEditor (wobei local_folder der Ordner ist, den Sie zuvor erstellt haben).

  3. Wählen Sie in Visual Studio 2010 in Projektmappen-Explorer das Projekt SampleEditor aus.

  4. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

    Das Dialogfeld Verweis hinzufügen wird geöffnet.

  5. Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte Durchsuchen .

  6. Wechseln Sie auf der Registerkarte Durchsuchen zu installation_folder\Bin (wobei 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 die STRG-TASTE gedrückt halten, während Sie auf die Dateien klicken.

  7. Wechseln Sie Projektmappen-Explorer zu SampleEditor/References.

  8. Vergewissern Sie sich, dass keiner der Verweise Warnungen oder Fehler enthält.

  9. Klicken Sie Projektmappen-Explorer mit der rechten Maustaste auf das Projekt SampleEditor, und klicken Sie dann auf Eigenschaften.

    Das Dialogfeld SampleEditor-Eigenschaftenseiten wird angezeigt.

  10. Klicken Sie im Dialogfeld SampleEditor-Eigenschaftenseiten auf die Registerkarte Debuggen .

  11. Klicken Sie auf der Registerkarte Debuggen auf Externes Programm starten.

  12. Geben Sie unter Externes Programm starteninstallation_folder\Bin\UDIDesigner.exe ein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben), und klicken Sie dann auf OK.

    Tipp

    Sie können auf die Schaltfläche mit den Auslassungspunkten (...) klicken, um zum Ordner zu navigieren und UDIDesigner.exe auszuwählen.

  13. Klicken Sie im Menü Datei auf Alle speichern.

  14. Kopieren Sie die datei local_folder\SDK\SamplePage\SamplePage.dll.config in den Ordner installation_folder\Bin\Config (wobei local_folder der Ordner ist, den Sie zuvor im Konfigurationsvorgang auf dem Entwicklungscomputer erstellt haben, undinstallation_folder der Ordner ist, in dem Sie MDT installiert haben).

  15. Klicken Sie in Visual Studio 2010 im Menü Debuggen auf Debuggen starten.

    Der Designer des UDI-Assistenten wird gestartet.

  16. Klicken Sie im UDI-Assistenten-Designer im Menüband auf Öffnen.

    Das Dialogfeld Öffnen wird angezeigt.

  17. Öffnen Sie im Dialogfeld Öffnen die datei local_folder\SDK\SamplePage\SamplePage\Config.xml (wobei local_folder der Ordner ist, den Sie zuvor im Konfigurationsvorgang auf dem Entwicklungscomputer erstellt haben).

    Die Config.xml Datei wird geöffnet, und die Benutzerdefinierte StageGroup wird im Detailbereich angezeigt.

  18. Klicken Sie im Detailbereich auf die Registerkarte Konfigurieren .

  19. Überprüfen Sie die Konfigurationsinformationen für das Feld Speicherort , einschließlich der folgenden:

    • Schaltfläche "Entsperrt ", mit der Sie das Feld "Speicherort " aktivieren oder deaktivieren

    • Feld "Standardwert ", in das Sie einen Standardwert eingeben, der im Feld Speicherort angezeigt werden soll

    • Anzeigename auf der Zusammenfassungsseite, in der Sie die Beschriftung für die Informationen eingeben, die auf der Seite Zusammenfassung angezeigt werden

    • Listenfeld "Speicherort ", das eine Liste möglicher Speicherorte enthält

  20. Schließen Sie den Designer des UDI-Assistenten.

  21. Schließen Sie Visual Studio 2010.

Überprüfen der UDI SDK-Beispiele

Bevor Sie mit der Entwicklung beginnen, sehen Sie sich die Beispiele im UDI SDK an. Verwenden Sie die Informationen in diesem Leitfaden und den Quellcode in den Beispielen, um Ihre eigenen benutzerdefinierten UDI-Assistentenseiten und Assistentenseiten-Editoren zu erstellen.

Sehen Sie sich die Beispiele für das UDI SDK an, indem Sie folgendes lesen:

Ü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. In Tabelle 1 sind die Ordner direkt unterhalb des SDK-Ordners aufgeführt, die jeweils eine kurze Beschreibung enthalten.

Tabelle 1. Ordner im UDI SDK

Ordner Dieser Ordner enthält
Beinhaltet Die C++-Headerdateien, die zum Erstellen benutzerdefinierter Assistentenseiten für den UDI-Assistenten erforderlich sind
Libs Die C++-Bibliotheksdateien, die mit Ihrer benutzerdefinierten Seite verknüpft werden; es gibt 32-Bit- und 64-Bit-Versionen der Statischen Linkbibliotheken. Hinweis: Itanium-Versionen der Bibliotheken (IA-64) sind nicht verfügbar.
SampleEditor Ein Visual Studio-Projekt zum Erstellen eines benutzerdefinierten Editors zum Bearbeiten der Seite SamplePage im UDI-Assistenten-Designer, die in C geschrieben ist #
SamplePage Ein Visual Studio-Projekt zum Erstellen einer benutzerdefinierten UDI-Assistentenseite, die in Visual C++ geschrieben ist

Überprüfen der Visual Studio-Projektmappe SamplePage

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 des Lebenszyklus der Assistentenseite

Eine Seite des UDI-Assistenten 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 enthält die Methoden, die Sie überschreiben müssen, und enthält eine kurze Beschreibung der einzelnen Methoden, einschließlich der Verwendung der Methode im Lebenszyklus der Assistentenseite.

Tabelle 2. Methoden in einem Assistentenseitenlebenszyklus

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 Konfigurationsdatei des UDI-Assistenten zu lesen.
OnWindowShown Diese Methode wird jedes Mal aufgerufen, wenn die Seite im UDI-Assistenten angezeigt (angezeigt) wird. Es wird aufgerufen, wenn die Seite zum ersten Mal angezeigt wird, und jedes Mal, wenn Sie zur Seite navigieren, indem Sie im Assistenten auf Weiter oder Zurück klicken.

Schreiben Sie für diese Methode Code, der die anzuzeigende Seite vorbereitet, z. B. Das Lesen von Arbeitsspeichervariablen, Tasksequenzvariablen oder Umgebungsvariablen, und aktualisieren Sie dann die Seite basierend auf änderungen an diesen Variablen.
OnCommonControlEvent Diese Methode kann immer aufgerufen werden, wenn die Assistentenseite angezeigt wird und eine WM_NOTIFY Nachricht von einem untergeordneten Element empfängt (in der Regel allgemeine Steuerelemente).

Schreiben Sie für diese Methode Code, der WM_NOTIFY basierend auf der Benachrichtigung verarbeitet. Sie können z. B. auf Ereignisse eines allgemeinen Steuerelements reagieren, z. B. auf Klick- oder Doppelklickereignisse für ein TreeView-Steuerelement .
OnUnhandledEvent Diese Methode wird immer dann aufgerufen, wenn eine Unbehandelte Fenstermeldung für Ihre Assistentenseite auftritt. Diese Methode bietet die Möglichkeit, diese andernfalls nicht behandelten Fenstermeldungen abzufangen und zu verarbeiten.

Schreiben Sie für diese Methode Code, der die Fenstermeldungen verarbeitet, die für Ihre Assistentenseite relevant sind. In der Regel müssen Sie diese Methode nicht überschreiben.
OnNextClicked Diese Methode wird aufgerufen, wenn Sie im Assistenten auf Weiter klicken.

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 sehr 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 entweder die vorherige oder die nächste Assistentenseite 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 überschreiben.

Sehen Sie sich das SamplePage-Beispiel an.

Sehen Sie sich das Beispiel SamplePage anhand der folgenden Liste an, die die Abfolge der Ereignisse während des Lebenszyklus der Assistentenseite des Beispiels SamplePage darstellt:

  1. Der UDI-Assistent, OSDSetupWizard.exe, liest die Konfigurationsinformationen aus der Konfigurationsdatei des UDI-Assistenten im Beispiel (die Config.xml-Datei), wie in Schritt 1: Der UDI-Assistent (OSDSetupWizard.exe) liest die Config.xml-Datei beschrieben.

  2. Der UDI-Assistent lädt die DLLs, die für jede Assistentenseite erforderlich sind, die in der Konfigurationsdatei des UDI-Assistenten aufgeführt sind, wie in Schritt 2: Lädt der UDI-Assistent die DLL für die Seite des benutzerdefinierten Assistenten beschrieben.

  3. Der UDI-Assistent zeigt die Seite des benutzerdefinierten Assistenten an und ermöglicht die gewünschte Steuerelementinteraktion, wie in Schritt 3: Der UDI-Assistent zeigt die Seite des benutzerdefinierten Assistenten an.

  4. Wenn die Seite des benutzerdefinierten Assistenten die Informationen gesammelt hat, führen Sie alle erforderlichen Aufgaben aus, bevor Sie auf Weiter klicken, um mit dem nächsten Assistenten fortzufahren, wie in Schritt 4: Auf die Schaltfläche "Weiter" auf der Seite des benutzerdefinierten Assistenten beschrieben.

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 zur Konfiguration im Ordner Skripts im MDT Files-Paket befindet.

Sie können die Standardkonfigurationsdatei überschreiben, die der UDI-Assistent verwendet, indem Sie den Tasksequenzschritt des UDI-Assistenten so ändern, dass der Parameter /definition verwendet wird. Weitere Informationen zum Überschreiben der Standardkonfigurationsdatei, die der UDI-Assistent verwendet, finden Sie unter Überschreiben der Konfigurationsdatei, die der UDI-Assistent verwendet.

Die Elemente der obersten Ebene in der Config.xml-Datei sind die

  • DLLs-Element

  • Style-Element

  • Pages-Element

  • StageGroups-Element

    Weitere Informationen zum Schema der Konfigurationsdatei des UDI-Assistenten und zu jedem dieser Elemente finden Sie unter Referenz zum Konfigurationsdateischema des UDI-Assistenten.

    Der UDI-Assistent scannt das DLLs-Element auf die .dll Dateien, die geladen werden sollen. Im Beispiel werden zwei .dll Dateien aufgeführt: SamplePage.dll und SharedPages.dll. Diese .dll Dateien müssen sich im selben Ordner wie OSDSetupWizard.exe befinden– dem Ordner Tools\platform (wobei platform für die 32-Bit-Version x86 oder x64 für die 64-Bit-Version ist).

    Der UDI-Assistent scannt das Pages-Element nach den definierten Seiten. Im Beispiel werden zwei Seiten definiert: Custom und SummaryPage. Das Type-Attribut des Page-Elements wird in der Datei PageClassIDs.h definiert und definiert eindeutig den Typ Ihrer benutzerdefinierten Seite.

    Im Beispiel ist der definierte Typ Microsoft. SamplePage.LocationPage. Ersetzen Sie für Ihre benutzerdefinierte Seite Folgendes, um potenzielle Konflikte mit anderen Seiten zu vermeiden, die Sie in Zukunft erstellen können:

  • Der Name Ihrer Organisation wird anstelle von Microsoft.

  • Ihr Projektname anstelle von SamplePage.

  • Der Name ihrer benutzerdefinierten Assistentenseite anstelle von LocationPage.

Schritt 2: Der UDI-Assistent lädt die DLL für die Seite des benutzerdefinierten Assistenten

Wenn der UDI-Assistent Ihre DLL lädt, ruft er die Funktion RegisterFactories auf, die in Ihrer .dll-Datei implementiert werden muss. Im Beispiel wird diese Funktion in der Datei dllmain.ccp implementiert. Auf jeder Assistentenseite, die Sie erstellen, muss die RegisterFactories-Funktion implementiert werden .

Die Funktion RegisterFactories wird verwendet, um die Factoryklasse Ihrer Assistentenseite bei der Klassenfactoryregistrierung für den UDI-Assistenten zu registrieren. Klassenfactorys sind Klassen, die eine Instanz einer anderen Klasse erstellen können. Die RegisterFactories-Funktion erstellt eine neue Instanz einer Factoryklasse und übergibt diese Klasse an die Klassenfactoryregistrierung für den UDI-Assistenten, wodurch diese Factoryklasse für den Assistenten verfügbar wird. Der UDI-Assistent sucht nach einer Factoryklasse, die mit einer ID registriert ist, die dem Type-Attribut des Page-Elements für die seite des benutzerdefinierten Assistenten entspricht.

Im Beispiel wird die ID als ID_Location in der Datei PageClassIds.h als Microsoft definiert. SamplePage.LocationPage, die dem Type-Attribut für das Page-Element in der Config.xml-Datei entspricht. ID_Location wird als Parameter in der RegisterFactories-Funktion ü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 Factoryinstanz zu vereinfachen und die neu erstellte Instanz zu registrieren. Der name-Wert , der mithilfe der Register-Funktionsvorlage bereitgestellt wird, muss die iClassFactory-Schnittstelle implementieren. Die ClassFactoryImpl-Klasse verarbeitet die meisten Details zum Implementieren einer Klassenfactory.

Sie können auch die RegisterFactories-Funktion 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 Aufgaben oder Validierungssteuerelemente und registriert daher keine benutzerdefinierten Aufgaben oder Validierungssteuerelemente.

Schritt 3: Der UDI-Assistent zeigt die Seite des benutzerdefinierten Assistenten an

Die Seite des benutzerdefinierten Assistenten im Beispiel ist in der Datei LocationPage.cpp definiert. Assistentenseiten werden von Vorlagenklassen abgeleitet, die einen Großteil der Funktionen einer Seite bereitstellen. Alle Assistentenseiten sollten von der WizardPageImpl-Vorlagenklasse abgeleitet werden, die die IWizardPage-Schnittstelle implementiert. Jede Assistentenseite kann andere optionale Vorlagenklassen und entsprechende Schnittstellen basierend auf den Anforderungen der Seite implementieren.

Die WizardPageImpl-Vorlagenklasse verfügt über mehrere nützliche Schnittstellen, mit denen Sie benutzerdefinierte Assistentenseiten schreiben können. Implementieren Sie die WizardPageImpl-Vorlagenklasse als Basisklasse für Ihre benutzerdefinierte Assistentenseite.

Eine Liste der verfügbaren:

  • Vorlagenklassen für Assistentenseiten, siehe Assistentenseitenhilfsklassen

  • Schnittstellen für die Vorlagenklassen der Assistentenseite, siehe Assistentenseitenschnittstellen

    Die Seite des benutzerdefinierten Assistenten im Beispiel ist von der WizardPageImpl-Vorlagenklasse abgeleitet und implementiert die IWizardPage-Schnittstelle. Darüber hinaus implementiert die Seite des benutzerdefinierten Assistenten die IFieldCallback-Schnittstelle . Beides ist in der Datei LocationPage.cpp implementiert.

    Die Beispielseite des benutzerdefinierten Assistenten setzt die folgenden Methoden außer Kraft:

  • OnWindowCreated. Die OnWindowCreated-Methode auf der Seite des Beispiel-Assistenten ruft die folgenden Methoden auf:

    • AddField. Diese Methode verknüpft das IDC_COMBO_LOCATION-Box-Steuerelement in der IDD_LOCATION_PAGE-Ressource mit dem Data-Element mit dem Namen Location in der Config.xml-Datei.

      Zusätzlich zur AddField-Methode können Sie die AddRadioGroup - und AddToGroup-Methoden 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 Zeiger der Seite ist ein Parameter. Im Beispiel wird der this-Zeiger übergeben, der auf die aktuelle Seite verweist.

      Hinweis

      Um die Verwendung des this-Zeigers zu unterstützen, müssen Sie die IFieldCallback-Schnittstelle zusätzlich zu den Schnittstellen implementieren, die von der WizardPageImpl-Vorlagenklasse unterstützt werden.

      Die IFieldCallback-Schnittstelle ruft die SetFieldDefault-Methode auf, die verwendet wird, um die Standardwerte für andere Steuerelemente als Textfeld- und Kontrollkästchen-Steuerelemente festzulegen. Im 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 auf. Das Data-Element und die untergeordneten DataItem-Elemente in der Confg.xml Datei stellen die Liste der möglichen Werte bereit.

  • OnNextClicked. Diese Methode führt die folgenden Aufgaben aus:

    • Aktualisierungen die Tasksequenzvariable TSLocation mit dem im Kombinationsfeld ausgewählten Wert mithilfe der SaveFields-Methode

    • Fügt Informationen hinzu, die mithilfe der SaveFields-Methode auf der Seite Zusammenfassung angezeigt werden.

Schritt 4: Auf die Schaltfläche Weiter wird auf der Seite des benutzerdefinierten Assistenten geklickt.

Wenn der Benutzer die Felder auf der Seite des benutzerdefinierten Assistenten ausgefüllt hat, klickt er auf Weiter, wodurch die OnNextClicked-Methode aufgerufen wird . Die OnNextClicked-Methode führt alle erforderlichen Aufgaben aus, bevor sie mit der nächsten Assistentenseite fortfahren, z. B. das Aufzeichnen von Konfigurationsänderungen, die auf der Seite des benutzerdefinierten Assistenten vorgenommen wurden.

Für die Beispielseite des benutzerdefinierten Assistenten wird die Außerkraftsetzung für die OnNextClicked-Methode in der Datei LocationPage.ccp implementiert. In der OnNextClicked-Methode auf der Seite des benutzerdefinierten Beispiel-Assistenten werden die folgenden Methoden aufgerufen:

  1. InitSection. Diese Methode initialisiert die Kopfzeile (Bezeichnungsbeschriftung) für die Zusammenfassungsdaten, die auf der Seite Zusammenfassung angezeigt werden. In der Regel können Sie diesen Wert mithilfe der DisplayName() -Funktion festlegen. Die dieser Beschriftung zugeordneten Daten werden mithilfe der SaveFields-Methode gespeichert.

  2. 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 der Designerarchitektur des UDI-Assistenten

Der UDI-Assistenten-Designer wurde mit WPF, Prism und Unity entwickelt. Der UDI-Designer wird verwendet, um die Konfigurationsdatei des UDI-Assistenten (UDIWizard_Config.xml) zu bearbeiten, 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 über ein separates Page-Element für jede Assistentenseite verfügen.

Wenn Sie die Konfigurationseinstellungen für eine Assistentenseite bearbeiten, lädt der UDI-Assistent-Designer den benutzerdefinierten Seiten-Editor, der dem Seitentyp des Assistenten entspricht. Die benutzerdefinierten Assistentenseiten-Editoren werden als WPF-Benutzersteuerelemente entwickelt. Die Seiten-Editor-Seiten des benutzerdefinierten Assistenten verwenden das MVVM-Entwurfsmuster ( Model-View–ViewModel ) für WPF.

Das MVVM-Entwurfsmuster hilft dabei, die Benutzeroberfläche (UI; Präsentation) von den dargestellten Daten zu trennen. Die Daten sind eine Fassade über dem Page-Element in der Konfigurationsdatei des UDI-Assistenten (die Config.xml-Datei im Beispiel), auf die über die CurrentPage-Eigenschaft der IDataService-Schnittstelle zugegriffen wird.

Der UDI-Assistent-Designer verwendet DependencyAttribute , um Zugriff auf die DataService-Klasse basierend auf dem Dependency Injection-Framework in Unity zu erhalten. Weitere Informationen zum Abhängigkeitsinterjektionsframework in Unity finden Sie unter Inject Some Life into Your Applications – Getting to Know the Unity Application Block(Injizieren von Etwas Leben in Ihre Anwendungen – Kennenlernen des Unity-Anwendungsblocks).

Überprüfen der konfigurierbaren Komponenten einer UDI-Assistentenseite

Während 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 mithilfe des UDI-Assistenten-Designers geändert werden.

In der Regel werden die Konfigurationseinstellungen, die Sie mit dem Designer des UDI-Assistenten konfigurieren möchten, in der Konfigurationsdatei des UDI-Assistenten gespeichert (die Config.xml-Datei im Beispiel). Bei Bedarf können Sie jedoch auch eine eigene separate Konfigurationsdatei erstellen. Ein Beispiel für die Verwendung einer separaten Konfigurationsdatei ist die Datei UDIWizard_Config.xml.app, die der Anwendungsermittlungstask und der ApplicationPage-Assistent-Seitentyp verwenden.

Im Folgenden finden Sie eine Liste der typischen Konfigurationseinstellungen, die Sie mit dem UDI-Assistenten-Designer verwalten können:

  • Feld. Mithilfe von Feldern können Benutzer Eingaben bereitstellen. Felder werden als Field-Elemente in der Konfigurationsdatei des UDI-Assistenten (UDIWizard_Config.xml) angezeigt, die die Konfigurationseinstellungen für jedes Feld enthält. Der entsprechende Assistenten-Seiten-Editor muss eine Methode zum Bearbeiten der Feldkonfigurationseinstellungen für das Feld mit 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 in den Data- oder DataItem-Elementen. Sie konfigurieren Eigenschaften in den Setter-Elementen . Fügen Sie für jede Eigenschaft, die Sie definieren möchten, ein separates Setter-Element hinzu. Sie bearbeiten die Eigenschaften mithilfe von SetterControl und konfigurieren andere Setter-Elemente mithilfe anderer Steuerelemente.

  • Daten. Daten werden verwendet, um Informationen zu speichern, die von der Assistentenseite und anderen Komponenten verwendet werden können. Sie können Daten für Seiten oder Felder mithilfe der Data - oder DataItem-Elemente 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 benutzerdefinierte Assistenten-Seiten-Editor, den Sie erstellen, muss diese Konfigurationseinstellungen verwalten können.

Sehen Sie sich das EditorPage-Beispiel an.

Das EditorPage-Beispiel wird verwendet, um die Konfigurationseinstellungen für die Seite des SamplePage-Assistenten in der Konfigurationsdatei des UDI-Assistenten zu konfigurieren. Das EditorPage-Beispiel enthält die folgenden primären Komponenten:

  • Benutzeroberfläche zum Konfigurieren der Einstellungen des Kombinationsfelds "Standort "

  • Benutzeroberfläche zum Hinzufügen oder Bearbeiten einer Position in der Liste möglicher Speicherorte, die im Kombinationsfeld Speicherort angezeigt werden

  • Konfigurationseinstellungen, die aus der Konfigurationsdatei des UDI-Assistenten gelesen und in dieser gespeichert werden

  • Unterstützender Code für die anderen Komponenten

    Sehen Sie sich das EditorPage-Beispiel in Visual Studio an, indem Sie die folgenden Schritte ausführen:

  1. Überprüfen Sie, wie der Seiten-Editor des SampleEditor-Assistenten im UDI-Assistenten-Designer geladen und initialisiert wird, wie unter Laden und Initialisieren von Seiten-Editor des Assistenten beschrieben.

  2. Überprüfen Sie die Benutzeroberfläche, die zum Bearbeiten des Kombinationsfelds LocationPageEditor.xaml in den Dateien LocationPageEditor.xaml und LocationPageEditor.xaml.cs verwendet wird, wie unter Überprüfen der Benutzeroberfläche zum Konfigurieren des Kombinationsfelds "Speicherort" beschrieben.

  3. Ü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 zum Ändern der Liste möglicher Speicherorte beschrieben.

  4. Überprüfen Sie den Code, der verwendet wird, um Konfigurationsinformationen zu verwalten, die in der Konfigurationsdatei des UDI-Assistenten gespeichert sind, wie unter Überprüfen des codes zum Verwalten von Konfigurationsinformationen beschrieben.

Laden und Initialisieren des Seiten-Editors des Assistenten überprüfen

Benutzerdefinierte Assistentenseiten-Editoren werden entsprechend den Anforderungen des UDI-Assistenten-Designers geladen. Die Konfigurationsdateien des UDI-Assistenten-Designers werden beim Start des UDI-Assistenten-Designers geladen. Der UDI-Assistent-Designer überprüft den Ordner install_folder\Bin\Config (wobei install_folder der Name des Ordners ist, in dem MDT installiert ist) auf Dateien mit einer .config Dateierweiterung.

Während der Konfiguration der UDI-Entwicklungsumgebung haben Sie die Datei SamplePage.dll.confg in den Ordner install_folder\Bin\Config kopiert. Wenn Sie den UDI-Assistenten-Designer starten, wird die Datei SamplePage.dll.confg gefunden und geladen.

Der Designer des UDI-Assistenten verwendet 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 im selben Ordner wie die UDIDesigner.exe-Datei abgelegt werden. Dabei handelt es sich um den 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.

  • Geben Sie ein. Verwenden Sie dieses Attribut, um den Seitentyp der benutzerdefinierten Assistentenseite zu konfigurieren, die vom UDI-Assistenten geladen wird. Der Designer des UDI-Assistenten 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 zum Assistenten-Seiten-Editor bereitzustellen. Der Wert dieses Attributs wird im Dialogfeld Neue Seite hinzufügen im UDI-Assistenten-Designer angezeigt, der zum Hinzufügen der Assistentenseite zur "Seitenbibliothek" verwendet 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, der zum Hinzufügen der Assistentenseite zur "Seitenbibliothek" verwendet wird.

    Im Beispiel ist der Typ der Seite des benutzerdefinierten Assistenten SamplePageMicrosoft. SamplePage.LocationPage, die in der Config.xml Datei gespeichert wird. Die Config.xml Datei befindet sich im Ordner local_folder\SDK\SamplePage\SamplePage in (wobei local_folder der Ordner ist, den Sie zuvor im Konfigurationsvorgang auf dem Entwicklungscomputer erstellt haben).

Überprüfen der Benutzeroberfläche, die zum Konfigurieren des Kombinationsfelds "Standort" verwendet wird

Wenn der Seiten-Editor des Assistenten geladen und initialisiert wird, wird der Seiten-Editor des SampleEditor-Assistenten geladen, wenn eine Seite mit dem Typ Microsoft. SamplePage.LocationPage wird bearbeitet. Die Benutzeroberfläche für den Seiten-Editor wird 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 extensible Application Markup Language (XAML) sehen.

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 beispielsweise 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 Vorgehensweise: Verfügbarmachen von Daten für die Bindung in XAML.

Verwenden Sie das Views:CollectionTControl.ColumnCollectionView-Element im XAML-Code, um die Liste der verfügbaren Speicherorte in der Rasteransicht zu bearbeiten. Sie verwenden das CollectionTControl-Steuerelement , um die Rasteransicht anzuzeigen und die Rasteransicht an das Data-Element mit dem Namen Location in der UDI-Konfigurationsdatei zu binden.

Überprüfen der Benutzeroberfläche zum Ändern der Liste möglicher Standorte

Die Benutzeroberfläche zum Ändern der Liste möglicher Speicherorte besteht aus:

Überprüfen sie kontextabhängige Menü- und Menübandschaltflächen zum Ändern der Liste der Speicherorte.

Wenn Sie mit der rechten Maustaste auf das Listenfeld klicken, das die Liste der Speicherorte enthält, wird ein kontextabhängiges Menü angezeigt. Das Menüband verfügt über entsprechende Schaltflächen, mit denen Sie die gleichen Aufgaben ausführen können. Das Views:CollectionsTControl-Steuerelementelement 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 Datei LocationPageEditorViewModel.cs 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 kontextabhängigen Menü auf die Option Element hinzufügen oder auf die entsprechenden Schaltflächen im Menüband klickt. 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 Datei LocationPageEditorViewModel.cs befindet und das Dialogfeld in der Datei AddEditLocationView.xaml anzeigt.

  • EditItemAction. Diese Aktion wird ausgeführt, wenn der Benutzer im kontextmenübezogenen Menü auf die Option Element bearbeiten klickt. 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 Datei LocationPageEditorViewModel.cs befindet und das Dialogfeld in der Datei AddEditLocationView.xaml anzeigt.

  • RemoveAction. Diese Aktion wird ausgeführt, wenn der Benutzer im kontextmenübezogenen Menü auf die Option Element entfernen klickt. 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 Datei LocationPageEditorViewModel.cs befindet und eine Meldung anzeigt, die das Löschen des Speicherorts bestätigt.

Überprüfen des Dialogfelds zum Hinzufügen oder Bearbeiten von Speicherorten

Wenn Sie der Liste der Speicherorte einen neuen Speicherort hinzufügen oder einen vorhandenen Speicherort bearbeiten, wird eine Meldung in der Datei AddEditLocationView.xaml angezeigt. Die Meldung wird mithilfe der ShowDialogWindow-Fenstermethode in der Datei LocationPageEditorViewModel.cs angezeigt.

Die Benutzeroberfläche in der Datei AddEditLocationView.xaml besteht aus:

  • Ein Dialogframe mit dem Namen DialogFrame, der die folgenden Elemente enthält:

    • Ein Titel, den Sie mit dem DialogTitle-Attribut des Dialogframes konfigurieren.

    • Eine Schaltfläche OK , die den Rückgabestatus für die Approved-Eigenschaft auf True festlegt (Der Rückgabestatus wird in der AddLocationCallback-Methode in der Datei LocationPageEditorViewModel.cs überprüft, um zu bestimmen, ob der Benutzer auf OK geklickt hat.)

    • Eine Schaltfläche Abbrechen , die den Rückgabestatus für die Approved-Eigenschaft auf False festlegt (Der Rückgabestatus wird in der Methode AddLocationCallback in der Datei LocationPageEditorViewModel.cs überprüft, um zu bestimmen, ob der Benutzer auf Abbrechen geklickt 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 (die Config.xml-Datei im Beispiel)

Überprüfen des Codes, der zum Verwalten von Konfigurationsinformationen verwendet wird

Die Konfigurationsinformationen für Die Seite des benutzerdefinierten Assistenten werden in der Konfigurationsdatei des UDI-Assistenten gespeichert:

  • Config.xml Datei im Beispiel, das mit dem UDI SDK bereitgestellt wird (diese Datei enthält nur die Konfigurationseinstellungen für das Beispiel.)

  • UDIWizard_Config.xml mit MDT bereitgestellte 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 Beispiel SampleEditor hilft die Locations-Routine bei der Verwaltung der Konfigurationsinformationen und befindet sich in der Datei LocationPageEditorViewModel.cs. Die Locations-Routine 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.

Erstellen benutzerdefinierter UDI-Assistentenseiten

Der allgemeine Prozess zum Erstellen benutzerdefinierter UDI-Assistentenseiten sieht wie folgt aus:

  1. Erstellen Sie eine Kopie der SamplePage-Lösung als Ausgangspunkt.

  2. Platzieren Sie die gewünschten Steuerelemente (Felder) auf dem Formular.

  3. 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:

    1. Initialisieren Sie das Formular.

    2. Lesen von Arbeitsspeichervariablen, Tasksequenzvariablen, Umgebungsvariablen oder XML-Dateiinformationen (z. B . Setter-Eigenschaften ).

  4. Schreiben Sie Code, um die entsprechenden Aufgaben auszuführen, wenn die Seite angezeigt wird (Außerkraftsetzungen für die OnWindowShown-Methode ), einschließlich der folgenden Schritte:

    1. Aktivieren oder deaktivieren Sie Steuerelemente basierend auf Informationen, die beim Laden der Seite in Schritt 3 gelesen wurden.

    2. Aktualisieren Sie die Steuerelemente basierend auf Informationen, die beim Laden der Seite in Schritt 3 gelesen werden, z. B. die Auffüllung von Steuerelementen basierend auf den gelesenen Informationen.

  5. Schreiben Sie Code, um die entsprechenden Aufgaben auszuführen, während der Benutzer mit der Assistentenseite interagiert.

  6. Schreiben Sie Code, um die entsprechenden Aufgaben auszuführen, wenn der Benutzer im UDI-Assistenten auf Weiter klickt (Außerkraftsetzungen für die OnNextClicked-Methode ), einschließlich der folgenden Schritte:

    1. Aktualisieren Sie alle Arbeitsspeichervariablen, Tasksequenzvariablen, Umgebungsvariablen oder XML-Dateiinformationen.

    2. Aktualisieren sie die Informationen der Zusammenfassungsseite (wenn sie nicht von den Feldern auf der Seite ausgeführt werden).

  7. Erstellen Sie die Projektmappe.

    Stellen Sie sicher, dass die Version der erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT ist, insbesondere die Prozessorplattform für Windows Preinstallation Environment (Windows PE). Der UDI-Assistent kann in Folgendem ausgeführt werden:

    • Das vorhandene Betriebssystem auf dem Zielcomputer. Sie können 32-Bit-Versionen Ihrer Assistentenseite auf 32-Bit- oder 64-Bit-Windows-Betriebssystemen ausführen. Sie können jedoch nur 64-Bit-Versionen Ihrer Assistentenseite auf 64-Bit-Windows-Betriebssystemen ausführen.

    • Windows PE auf dem Zielcomputer. Windows PE unterstützt die Ausführung von 32-Bit-Anwendungen auf einer 64-Bit-Version von Windows PE nicht. Daher müssen Sie eine Version für Ihre Assistentenseite für jede Prozessorarchitektur von Windows PE erstellt haben, die Sie verwenden möchten.

  8. Kopieren Sie die DLL für Ihre benutzerdefinierte Assistentenseite in installation_folder\Templates\Distribution\Tools\-Plattformordner (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist).

  9. Führen Sie die Schritte zum Erstellen eines benutzerdefinierten Seiten-Editors aus.

Erstellen benutzerdefinierter Assistentenseiten-Editoren

Der allgemeine Prozess zum Erstellen benutzerdefinierter UDI-Assistenten-Seiten-Editoren sieht wie folgt aus:

  1. Erstellen Sie eine Kopie der SampleEditor-Lösung als Ausgangspunkt.

  2. Erstellen Sie die primäre Benutzeroberfläche des Seiten-Editors in einer XAML-Datei.

  3. Fügen Sie Instanzen des FieldElementControl-Steuerelements gemäß den Anforderungen der zu konfigurierenden Assistentenseite hinzu (falls erforderlich).

  4. Fügen Sie Instanzen des SetterControl-Steuerelements gemäß den Anforderungen der zu konfigurierenden Assistentenseite hinzu (falls erforderlich).

  5. Fügen Sie Instanzen des CollectionTControl-Steuerelements hinzu, wie für die zu konfigurierende Assistentenseite erforderlich (falls erforderlich).

  6. Fügen Sie die IDataService-Schnittstelle hinzu.

  7. Schreiben Sie den entsprechenden Code, um die Konfigurationsdatei des UDI-Assistenten basierend auf den Konfigurationseinstellungen zu aktualisieren, die mit dem Benutzerdefinierten Assistenten-Seiten-Editor konfiguriert werden sollen.

  8. Erstellen Sie untergeordnete Dialogfelder in einer XAML-Datei, und rufen Sie sie über den primären Seiten-Editor mithilfe der IMessageBoxService-Schnittstelle auf, wie dies für die zu konfigurierende Assistentenseite erforderlich ist.

  9. Fügen Sie dem Menüband des UDI-Assistenten die entsprechenden Schnittstellen basierend auf den Anforderungen der zu konfigurierenden Assistentenseite hinzu.

  10. Erstellen Sie die Projektmappe.

    Hinweis

    Stellen Sie sicher, dass die Version der erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT ist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihres benutzerdefinierten Seiten-Editors.

  11. Erstellen Sie eine Konfigurationsdatei des UDI-Assistenten-Designers, um die erforderlichen DLLs zu laden, und ordnen Sie den Assistentenseiten-Editor der entsprechenden Assistentenseite zu (die SamplePage.dll.config-Datei im Beispiel).

    Weitere Informationen zu den Elementen, die zum Durchführen der Zuordnung zwischen der Assistentenseite und dem Assistentenseiten-Editor erforderlich sind, finden Sie unter DesignerMappings-Element , untergeordnete Elemente und entsprechende Attribute.

  12. Kopieren Sie die Konfigurationsdatei des UDI-Assistenten-Designers, die Sie im vorherigen Schritt erstellt haben, in den Ordner installation_folder\Bin\Config (wobei installation_folder der Ordner ist, in dem Sie die MDT-Version installiert haben).

  13. Kopieren Sie die DLL für den Benutzerdefinierten Assistenten-Seiten-Editor in den Ordner installation_folder\Bin (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).

Erstellen benutzerdefinierter UDI-Aufgaben

UDI-Aufgaben sind in C++ geschriebene DLLs, die die ITask-Schnittstelle implementieren. Sie registrieren die DLL bei der Aufgabenbibliothek des UDI-Assistenten-Designers, indem Sie eine Konfigurationsdatei des UDI-Assistenten-Designers (.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, Aufgaben und Validierungssteuerelemente in derselben .dll Datei enthält. Sie können auch eine einzelne Konfigurationsdatei des Designer des UDI-Assistenten (.config) erstellen, die die Konfigurationseinstellungen für die Assistentenseiten, Aufgaben und Validierungssteuerelemente in der DLL enthält.

So erstellen Sie benutzerdefinierte UDI-Aufgaben

  1. Schreiben Sie Code, der die ITask-Schnittstelle und die folgenden Methoden implementiert:

    • Initialisierung. Diese Methode wird aufgerufen, um Ihre Aufgabe zu initialisieren.

    • Führen Sie aus. Diese Methode wird aufgerufen, um Ihre Aufgabe auszuführen.

  2. Schreiben Sie Code, der die benutzerdefinierte Taskklassenfactory bei der Factoryregistrierung registriert.

  3. Erstellen Sie die Lösung für Ihre benutzerdefinierte Aufgabe.

    Hinweis

    Stellen Sie sicher, dass die Version der erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT ist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihrer benutzerdefinierten UDI-Aufgabe.

  4. Erstellen Sie ein Task-Element unter dem TaskLibrary-Element in der Konfigurationsdatei des UDI-Assistenten-Designers, ä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 BitmapFilename-Parameter enthalten. Geben Sie alle anderen Parameter entsprechend den für die Aufgabe benötigten Parametern an. Im vorherigen Auszug wird beispielsweise der Log-Parameter verwendet, um einen Parameter für den Speicherort einer Protokolldatei anzugeben.

  5. Kopieren Sie die im vorherigen Schritt erstellte Konfigurationsdatei des UDI-Assistenten-Designers in den Ordner installation_folder\Bin\Config (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).

  6. Kopieren Sie die DLL für Ihre benutzerdefinierte Aufgabe in den Plattformordner installation_folder\Templates\Distribution\Tools\ (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist).

Erstellen benutzerdefinierter UDI-Validierungssteuerelemente

UDI-Validierungssteuerelemente sind in C++ geschriebene DLLs, die die IValidator-Schnittstelle implementieren. Sie registrieren die DLL bei der Validierungsbibliothek des UDI-Assistenten-Designers, indem Sie eine Konfigurationsdatei des UDI-Assistenten-Designers (.config Datei) erstellen und im Ordner installation_folder\Bin\Config ablegen (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).

So erstellen Sie benutzerdefinierte UDI-Validierungssteuerelemente

  1. 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. In der Regel werden alle Eigenschaften gelesen, die für das Validierungssteuerelement aus der Konfigurationsdatei des UDI-Assistenten festgelegt wurden. Beispielsweise ruft das InvalidCharactersValidator-Validierungssteuerelement den Wert der InvalidChars-Eigenschaft mithilfe dieser Methode ab.

    • IsValid. Der Formularcontroller ruft diese Methode auf, um festzustellen, ob das Steuerelement gültigen Text enthält. Es folgt ein Beispiel für die IsValid-Methode für ein Validierungssteuerelement, das ü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 jede Tastatureingabe und andere Ereignisse auf, damit das Validierungssteuerelement den Inhalt des Steuerelements und aktualisierte Meldungen unten auf der Assistentenseite überprüfen (oder löschen kann).

      In der Regel sind dies die einzigen Methoden, die Sie überschreiben müssen. Je nach Validierungssteuerelement müssen Sie jedoch möglicherweise andere Methoden in der Unterklasse der baseValidator-Klasse überschreiben, die Sie erstellen. Weitere Informationen zu diesen anderen Methoden finden Sie unter der BaseValidator-Klasse .

  2. Schreiben Sie Code, der die benutzerdefinierte Aufgabenklasse bei der Registrierungsfactory registriert.

  3. Erstellen Sie die Lösung für Ihre benutzerdefinierte Aufgabe.

    Hinweis

    Stellen Sie sicher, dass die Version der erstellten DLL dieselbe Prozessorplattform wie die Installation von MDT ist. Wenn Sie beispielsweise die 64-Bit-Version von MDT installieren, erstellen Sie eine 64-Bit-Version Ihrer benutzerdefinierten UDI-Aufgabe.

  4. Erstellen Sie ein Validator-Element unter dem ValidatorLibrary-Element in der Konfigurationsdatei des UDI-Assistenten-Designers, ähnlich dem 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 Validierungssteuerelementelemente sollten den Message-Parameter enthalten. Geben Sie alle anderen Parameter gemäß den Anforderungen des Validierungssteuerelements an. Im vorherigen Auszug wird beispielsweise der NamedPattern-Parameter verwendet, um einen Parameter für den Namen eines vordefinierten Musters für reguläre Ausdrücke anzugeben.

  5. Kopieren Sie die im vorherigen Schritt erstellte Konfigurationsdatei des UDI-Assistenten-Designers in den Ordner installation_folder\Bin\Config (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben).

  6. Kopieren Sie die DLL für Ihre benutzerdefinierte Aufgabe in den Plattformordner installation_folder\Templates\Distribution\Tools\ (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und plattformx86 für die 32-Bit-Version oder x64 für die 64-Bit-Version ist).

Referenz zum 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 Factorys werden bei einer Factoryregistrierung registriert, wobei eine Zeichenfolge als Schlüssel für die Factory verwendet wird. Beispielsweise wird die WmiRepository-Komponente durch die Zeichenfolge "Microsoft. Wizard.WmiRepository", die in der IWmiRepository-Headerdatei als ID_WmiRepository verfügbar ist.

Wenn Sie Ihre Seite als Unterklasse von WizardPageImpl geschrieben haben, können Sie eine neue Instanz eines 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, sodass es 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 er von der ausführbaren Hauptdatei des UDI-Assistenten bereitgestellt wird. Die anderen beiden Komponentensätze werden in "optionalen" DLLs bereitgestellt. Damit diese Komponenten verfügbar sind, muss die DLL im Abschnitt DLLs der .config XML-Datei 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 entspricht der ID, aber ohne die anfängliche ID_), die bei der Factoryregistrierung (definiert in OSDSetupWizard) registriert sind, wird in Tabelle 3 angezeigt.

Tabelle 3. Komponenten-IDs

ID Beschreibung
ID_ACPowerTask (ITask, IWizardComponent) Eine Preflight-Aufgabe, die sicherstellt, dass Ihr Computer nicht allein im Akkubetrieb ausgeführt wird
ID_AppDiscoveryTask (ITask, IWizardComponent) Eine spezielle Aufgabe zum Ermitteln der Softwareelemente, die Sie auf Ihrem Computer installiert haben
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) Am liebsten müssen Sie keine Instanz selbst erstellen, da Ihre Seite eine eigene Instanz erhält.
ID_InvalidCharactersValidator (IValidator) Stellt sicher, dass kein Textfeld Zeichen aus einer Liste enthält, die für das Validierungssteuerelement bereitgestellt wird.
ID_Logger (ILogger) Am liebsten müssen Sie keine Instanz selbst erstellen, da Ihre Seite einen Zeiger auf die freigegebene Instanz empfängt.
ID_NonEmptyValidator (IValidator) Ein Validierungssteuerelement, das sicherstellt, dass kein Feld leer ist
ID_PasswordValidator (IValidator) Ein Validierungssteuerelement, das sicherstellt, dass keine zwei Textfelder denselben Inhalt aufweisen
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 wird
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) Stellt eine einfache Möglichkeit zum Senden von Eigenschaften an Aufgaben bereit, ohne XML zu verwenden.
ID_ShellExecuteTask (ITask, IWizardComponent) Ausführen eines externen Programms
ID_SummaryBag (ISummaryBag) Indirekt über Ihre Seite über die Form-Methode verfügbar
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) Verwaltet die Ausführung einer Reihe von Aufgaben und der Benutzeroberfläche
ID_WmiRepository (IWmiRepository, IWizardComponent) Ermöglicht das Ausführen von WMI-Abfragen (Windows Management Instrumentation)
ID_IXmlDocument (IXmlDocument) Stellt eine Fassade zum Lesen und Schreiben von XML-Dokumenten bereit

Die definierten OSDRefreshWizard.dll, freigegebenen Seiten und anderen Steuerelementkomponenten werden in Tabelle 4 und Tabelle 5 angezeigt.

Tabelle 4. Verzeichnissteuerelemente

ID Beschreibung
ID_Directory (IDirectory) Eine Fassade zum Abrufen von Verzeichnisinformationen aus dem Dateisystem

Tabelle 5. Definierte SharedPages.dll

ID Beschreibung
ID_ADHelper (IADHelper) Stellt eine Fassade für eine begrenzte Anzahl von Features in Active Directory® Domain Services (AD DS) bereit.
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 von Laufwerken auf Ihrem Computer
ID_WiredNetworkTask (ITask) Eine Aufgabe, die überprüft, ob Sie mit einem fest verkabelten (anstelle eines drahtlosen) Netzwerkadapters mit dem Netzwerk verbunden sind.

Steuerungskomponenten

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ästchensteuerelementen
CONTROL_COMBO_BOX (IComboBox) Eine Fassade für Kombinationsfeld-Steuerelemente
CONTROL_GENERIC (IControl) Ermöglicht es Ihnen, mit den meisten Steuerelementtypen zu arbeiten, um den aktivierten 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 Statusanzeigen-Steuerelements
CONTROL_RADIO_BUTTON (IRadioButton) Eine Fassade zum Arbeiten mit Optionsfeld-Steuerelementen
CONTROL_STATIC_TEXT (IStaticText) Eine Fassade, die Lese-/Schreibberechtigungen für den Text eines Steuerelements bereitstellt, z. B. eine Bezeichnung oder ein Textfeld
CONTROL_TREE_VIEW (ItreeView) Eine Fassade zum Arbeiten mit einem Baumansichtssteuerelement

Imagelistenkomponente

Diese Komponente ist eine Fassade für ein ImageList-Steuerelement auf Ihrer Seite. Sie erstellen eine Bildliste ü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 mithilfe der Form-Methode darauf zu, die von der WizardPageImpl-Basisklasse implementiert wird.

InvalidCharacterValidator-Komponente

Dies ist ein Validierungssteuerelementtyp, den Sie auf einer Seite einschließen können. Die ID ist ID_InvalidCharactersValidator (definiert in IValidator.h), die den Textwert "Microsoft. Wizard.Validation.InvalidChars."

Dieses Validierungssteuerelement sucht nach einer einzelnen Eigenschaft (ein Setter-Element in der .config-Datei) mit dem Namen InvalidChars, bei der es sich um eine Liste nicht zulässiger Zeichen handelt. 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 ein Validierungssteuerelementtyp, den Sie auf einer Seite einschließen können. Die ID ist ID_NonEmptyValidator (definiert in IValidator.h), die 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 aufweist.

PasswordValidator-Komponente

Dies ist ein Validierungssteuerelementtyp, den Sie auf einer Seite einschließen können. Die ID ist ID_PasswordValidator (definiert in IValidator.h), die den Textwert "Microsoft. Wizard.Validation.Password."

Dieses Validierungssteuerelement funktioniert mit zwei verschiedenen Textsteuerelementen (Steuerelemente, die IStaticText unterstützen) und meldet Fehler, wenn sie nicht die gleichen Werte enthalten. Anders ausgedrückt: Es tritt ein Fehler auf, wenn die Textfelder Kennwort und Kennwort bestätigen nicht übereinstimmen.

Da für dieses Validierungssteuerelement zwei Steuerelemente erforderlich sind, ist eine größere Einrichtung als für andere Validierungssteuerelemente erforderlich. 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 "untergeordnetes" Element des Kennwortsteuerelements . Wenn der Formularcontroller das Kennwortsteuerelement deaktiviert, wird auf diese Weise auch das Steuerelement Kennwort bestätigen deaktiviert. Fügen Sie als Nächstes dem Formular ein Kennwortüberprüfungssteuerelement hinzu. Geben Sie schließlich das Kennwortüberprüfungssteuerelement mit der Schnittstelle zum Steuerelement Kennwort bestätigen an.

Aufgrund der Anforderung für zwei Steuerelemente müssen Sie zum Einrichten dieses Validierungssteuerelements Code anstelle der .config XML-Datei verwenden.

RegExValidator-Komponente

Dies ist ein Validierungssteuerelementtyp, den Sie auf einer Seite einschließen können. Die ID ist ID_RegExValidator (definiert in IValidator.h), die den Textwert "Microsoft. Wizard.Validation.RegEx."

Dieses Validierungssteuerelement vergleicht den Inhalt eines Textsteuerelements (eines Steuerelements, 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 dieses Validierungssteuerelement 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 Mustersetter

Pattern Beschreibung
Benutzername Überprüft, ob der Text das Format Domäne\Benutzer oder user@domain
Computername Der Name muss zwischen 1 und 15 Zeichen lang sein und darf keine 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 Klassenfactorys und -dienste nach. Sie implementiert die IFactoryRegistry-Schnittstelle und ist indirekt über die Container-Methode 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 RegisterFactories. Sie müssen diese Funktion implementieren und darin die Klassenfactorys für Ihre Seiten, Aufgaben und Validierungssteuerelemente (und alle anderen Klassenfactorys, die Sie registrieren möchten) registrieren. Hier sehen Sie ein Beispiel aus dem Beispielprojekt:

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

Protokollierungskomponente

Diese Komponente steht Ihrer Seite über die Logger-Methode (implementiert von WizardPageImpl) zur Verfügung. Sie verwenden diese Methode, um Einträge in die Protokolldatei zu schreiben. Der Inhalt der Protokolldatei ist nützlich, um Probleme zu diagnostizieren, die Benutzer möglicherweise mit dem UDI-Assistenten ausgeführt haben.

PropertyBag-Komponente

Der Eigenschaftenbehälter ist ein Container für Speichervariablen. Sie ist über Ihre Seite mit 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 auf Fertig stellen klickt (standardmäßig). Sie können auf den TSVariable-Beutel über die TSVariables-Methode der Seite zugreifen (die von der WizardPageImpl-Basisklasse implementiert wird). Diese Komponenten protokollieren alle Lese- und Schreibvorgänge von Tasksequenzvariablen.

WmiRepository-Komponente

Diese Komponente stellt eine Fassade für die Arbeit mit WMI-Abfragen bereit. Sie können die CreateInstance-Hilfsfunktion mit ID_WmiRepository aufrufen, um eine Instanz dieser Komponente abzurufen, die die IWmiRepository-Schnittstelle unterstützt. Diese Komponente gibt Ergebnisdatensätze über die IWmiIterator-Schnittstelle zurück.

Assistentenseitenhilfsklassen

Sie können benutzerdefinierte UDI-Assistentenseiten mit integrierten Hilfsklassen erstellen, die mit dem UDI SDK bereitgestellt werden. In Tabelle 8 sind die Hilfsklassen aufgeführt, die Sie zum Erstellen benutzerdefinierter Assistentenseiten verwenden können.

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 mehrere Schnittstellen implementiert.
Path-Hilfsklasse Diese Klasse stellt allgemeine Datei-/Verzeichnisvorgänge bereit.
Zeigervorlagenklasse Diese Klasse stellt die Referenzzählung für die Lebensdauerverwaltung in COM-Komponenten bereit. Es ist wichtig, Schnittstellen freizugeben, wenn Sie damit 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-Hilfsklasse Diese Klasse stellt Hilfsmethoden bereit, die das Arbeiten mit Zeichenfolgen vereinfachen.
SubInterface-Vorlagenklasse Diese Basisklasse erleichtert die Implementierung einer Komponente, die eine Schnittstelle unterstützt, die selbst von einer anderen Schnittstelle erbt.
UnknownImpl-Vorlagenklasse Diese Klasse verarbeitet die meisten Details zum Erstellen 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 seiten des benutzerdefinierten Assistenten 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 ClassFactoryImpl-Klasse .

#pragma once  

#include "ClassFactoryImpl.h"  

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

Es folgt ein Auszug aus der Datei "LocationPage.cpp" auf der Seite des Beispiel-Assistenten, 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 Schnittstellen unterstützt, die WizardPageImpl unterstützt (wobei es sich um IWizardPage handelt).

Path-Hilfsklasse

Diese Klasse stellt allgemeine Datei-/Verzeichnisvorgänge bereit:

static inline std::wstring GetModulePath(HINSTANCE hModule)  

Außerdem wird der vollständige Pfad zur .exe- oder .dll-Datei mit dem Instanzhandle zurückgegeben, das Sie für diese Methode bereitstellen:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)  

Die -Klasse gibt den vollständigen Pfad und Dateinamen der .exe- und .dll Datei mit dem Instanzhandle zurück, das Sie für diese Methode bereitstellen:

static inline std::wstring GetDirectoryName(LPCWSTR fullName)  

. . . oder nur den 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 den kombinierten Pfad und Dateinamen (oder einen anderen Pfad) darstellt.

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 damit fertig sind. Microsoft stellt eine Vorlagenklasse bereit, die die Lebensdauer automatisch verarbeitet. Wenn Sie z. B. einen intelligenten Zeiger für eine XML-Schnittstelle wünschen, können Sie etwa wie folgt schreiben:

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

Die erste Zeile definiert den intelligenten Zeiger. Die zweite Zeile zeigt das Abrufen eines intelligenten 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. Nachdem Sie einen Zeiger wie diesen abgerufen haben, ruft die ZeigerinstanzRelease 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-KlasseQueryInterface auf, um andere Schnittstellen für Sie abzurufen. Wenn die Factoryregistrierung beispielsweise eine neue Instanz einer Komponente erstellt, enthält sie Code wie den folgenden:

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 intelligente Zeiger entspricht 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-Hilfsklasse

Diese Klasse ist in Utilities.h definiert und stellt Hilfsmethoden bereit, die das Arbeiten mit Zeichenfolgen vereinfachen:

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

gibt zurück Beschreibung
0 Übereinstimmung von Zeichenfolgen, Groß-/Kleinschreibung ignorieren
<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 in form von {0}vorliegen. Sie führen jedoch keine Formatierung der Eingabe durch, nur 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 eine wstring zurückgeben, sodass Sie keinen Speicher für Zeichenfolgen oder Puffer selbst zuweisen müssen.

SubInterface-Vorlagenklasse

Diese Basisklasse erleichtert die Implementierung einer Komponente, die eine Schnittstelle unterstützt, die selbst von einer anderen Schnittstelle erbt. Beispielsweise erbt die ICheckBox-Schnittstelle von IControl. Hier sehen Sie, wie diese Klasse verwendet wird, um 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 zum Erstellen einer COM-Komponente. Hier sehen Sie ein Beispiel für die Verwendung dieser Basisklasse:

classDirectory :public UnknownImpl<IDirectory>  

Dieser Code definiert eine Klasse, die die IDirectory-Schnittstelle unterstützt.

WizardComponent-Vorlagenklasse

Diese Klasse ist in IWizardComponent.h definiert und ist eine nützliche Basisklasse zum Erstellen von Komponenten, die Zugriff auf die Assistentendienste benötigen, z. B. erstellung und Protokollierung von Komponenten.

Hier sehen Sie beispielsweise, wie die CopyFilesTask-Komponente definiert wird:

classCopyFilesTask :public WizardComponent<ITask>  
{  
    ...  

Der Parameter für diese Vorlagenklasse ist die "main"-Schnittstelle, die Sie für Ihre Komponente verwenden möchten, bei Aufgaben ITask. 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 Klassenfactoryregistrierung zum Erstellen einer neuen Komponente verwenden, 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.

Assistentenseitenschnittstellen

Der UDI-Assistent verwendet Schnittstellen, um auf die verschiedenen Steuerelemente auf Ihrer Seite zuzugreifen. Auf Ihrer Seite verwenden Sie die GetControlWrapper-Funktion , um einen Steuerelementwrapper 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 sprengen 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 sie 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 von Protokollen auf Details
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain)

Diese Methode überprüft, ob ein Satz von 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-Schnittstelle

__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

Auf der Seite Status wird diese Klasse verwendet, um Aufgaben in einem separaten Thread auszuführen. Sie können diese Klasse auch verwenden, wenn Sie Vorgänge für einen separaten Thread ausführen möchten. Tasks sind alle Klassen, die die ITask-Schnittstelle unterstützen.

Diese Schnittstelle wird vom ID_BackgroundTask ("Microsoft. Wizard.BackgroundTask") -Komponente, 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 zu ermitteln, welcher Task 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 abgeschlossen 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 angezeigten Elemente zurück.

Tabelle 13. Hintergrundthread zurückgeben

gibt zurück Beschreibung
E_INVALIDARG Die Aufgabe wird bereits ausgeführt, sodass Sie sie jetzt 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 gerade 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 ausgeführten Thread (siehe Tabelle 14 und Tabelle 15). Dieser Vorgang kann eine kurze Zeit in Anspruch nehmen, nachdem diese Methode zurückgegeben wurde.

Tabelle 14. HRESULT-Beendigungscode

Parameter Beschreibung
Exitcode Der Exitcode, der an die Finished-Rückrufmethode gesendet wird, die auch über die GetExitCode-Methode verfügbar ist.

Tabelle 15. Beendigungscodes

gibt zurück Beschreibung
E_FAIL Fehler beim Beenden des Aufrufs.
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 rückgabe oder nullptr festgelegt wird, 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 des Tasks zurückgegeben wird, oder auf den Wert, der an die Terminate-Methode übergeben wird, wenn Sie diese Methode aufgerufen haben.
pHresult Zeiger auf ein HRESULT , das bei rückgabe oder nullptr festgelegt wird, wenn Sie den HRESULT-Wert nicht benötigen.
HRESULT Close(void)

Diese Methode gibt den Hintergrundthread frei. Es wird E_INVALIDARG zurückgegeben, wenn der Thread derzeit ausgeführt wird, andernfalls S_OK .

ICheckBox-Schnittstelle

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

Legen Sie den aktivierten Zustand des Kontrollkästchens fest. Wenn die Methode AUF TRUE festgelegt ist, ist das Kontrollkästchen aktiviert. Wenn die Methode AUF FALSE festgelegt ist, ist das Kontrollkästchen deaktiviert.

BOOL IsButtonChecked()

Diese Methode meldet den aktuellen Überprüfungsstatus 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 Instanz 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 caption)

Fügen Sie dem Kombinationsfeld manuell ein Element hinzu.

HRESULT GetText([out, retval] LPBSTR pText)

Rufen Sie 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 Instanz dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_GENERIC ab.

HRESULT SetEnable(BOOL enable)

Aktivieren oder deaktivieren Sie das Steuerelement.

BOOL IsEnabled(void)

Gibt TRUE zurück, wenn das Steuerelement aktiviert ist, FALSE, wenn dies nicht der Fall ist.

HRESULT SetVisible(BOOL visible)

Ein- oder Ausblenden des Steuerelements.

ICpuInfo-Schnittstelle

__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. Wenn Sie ein 32-Bit-Betriebssystem auf einem 64-Bit-Computer verwenden, gibt diese Methode TRUE zurück, da sie nur die Breite der CPU (nicht des Betriebssystems) meldet.

IDirectory-Schnittstelle
__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, stellt eine Fassade zum Arbeiten mit Verzeichnissen im Dateisystem bereit.

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. Es unterstützt Wildcardzeichen und gibt sowohl Datei- als auch Verzeichnisnamen zurück. Die Methode gibt TRUE zurück, wenn eine Übereinstimmung gefunden wurde, andernfalls FALSE.

HRESULT FoundName([out, retval] LPBSTR name)

Diese Methode ruft den Namen der Datei ab, die mit einem Aufruf von FindFirst oder FindNext gefunden wurde.

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 TRUE zurück, wenn eine andere Übereinstimmung gefunden wurde, andernfalls FALSE.

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 Instanz dieser Schnittstelle mithilfe des ID_DomainJoinValidator-Werts für die CreateInstance-Vorlagenfunktion .

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

Initialisieren Sie die -Instanz, wie in Tabelle 17 dargestellt.

Tabelle 17. HRESULT Init – Instanzinitialisierung

Parameter Beschreibung
pLogger Die Protokollierungsinstanz, die für Ihre Seite über die Protokollierungsmethode der Seite verfügbar ist
pContainer Übergibt die Ergebnisse der Containermethode Ihrer Seite.
pBenutzername Das Textfeld, das den zu überprüfenden Benutzernamen enthält
pPassword Das Textfeld, das das zu überprüfende Kennwort enthält
PComputerName Das Textfeld, das den Namen des Computers enthält, der schließlich mit der Domäne verknüpft wird.
HRESULT IsUsernameValid(LPCWSTR domainName)

Diese Methode verwendet die IADHelper-ValidLogon-Methode>, um die Arbeit zu erledigen. Weitere Informationen finden Sie unter dieser Methode.

BOOL CanModifyComputerAdEntry(LPCWSTR domainName)

Überprüfen Sie, ob der Benutzer über Rechte zum Ändern des Computereintrags verfügt. Der Großteil der Arbeit wird von IADHelper-HasAccess> erledigt. Wenn diese Methode FALSE 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. Die folgende Zeile gibt beispielsweise nur USB-Laufwerke zurück:

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

Legen Sie die Größe des Minimierungslaufwerks in 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 Laufwerkliste wird 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. In Tabelle 18 sind drei der nützlichen Eigenschaften aufgeführt.

Tabelle 18. HRESULT AddProperty: Nützliche Eigenschaften

Section Eigenschaft Beschreibung
DISKQUERY_LOGICALDISK Größe Die Größe in Bytes, die als Zeichenfolge dargestellt wird
DISKQUERY_DISKPARTITION DiskIndex Die Datenträgernummer als ganze Zahl, beginnend mit 0
DISKQUERY_LOGICALDISK VolumeName Die Volumebezeichnung
size_t Count(void)

Die Anzahl der Datensätze, die von der Abfrage zurückgegeben werden. 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 Ergebnisdatensatz
Propname Name der Eigenschaft, z. B. "Size"
Wert Bei der Rückgabe enthält dieser Parameter einen Variantwert der -Eigenschaft.
HRESULT GetCaption(size_t Index, LPBSTR pCaption)

Diese Methode ruft die Beschriftung 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 Instanz dieser Komponente aus der IListView-Schnittstelle ab.

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

Erstellen Sie eine neue Imageliste, 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 Vorgänge für die Bildliste ausführen müssen.

int AddImage(HInstance hInstance, int resourceId)

Fügen Sie der Bildliste aus einer Ressource ein neues Bild 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 Instanz 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 gerade hinzugefügten Elements zurück.

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

Fügen Sie der Listenansicht eine neue Spalte hinzu.

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, Spalten 2 und folgende werden mit dieser Methode festgelegt.
text Die in der Spalte anzuzeigende Zeichenfolge
int GetWidth(void)

Diese Methode gibt die Breite des gesamten Textfelds zurück.

void SetExtendedStyle(DWORD style)

Mit dieser Methode können Sie erweiterte Formatvorlagen für das 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)

Legen Sie das ausgewählte Element in der Liste auf diesen Index fest.

BOOL IsItemChecked(int index)

Diese Methode gibt TRUE 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)

Fügen Sie der Bildliste der Listenansicht ein Bild hinzu. 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 Listenansichtselement angezeigt wird.

HRESULT Clear(void)

Entfernen Sie alle Elemente aus der Listenansicht.

IProgressBar-Schnittstelle

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

Diese Schnittstelle wird von der ProgressBarWrapper-Komponente implementiert. Sie rufen eine Instanz dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_PROGRESS_BAR ab.

HRESULT SetPercentage(int position)

Legen Sie 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 von der RadioButtonWrapper-Komponente implementiert. Sie rufen eine Instanz 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 bereit, die als Gruppe behandelt werden sollen. Rufen Sie diese Methode auf, bevor Sie CheckRadio aufrufen.

void CheckRadio(int id)

Legen Sie das spezifische Optionsfeld auf die 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 derzeit ausgewählt ist, andernfalls FALSE.

void EnableRadio(int id, BOOL enable)

Diese Methode aktiviert oder deaktiviert ein Optionsfeld.

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 Instanz dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_STATIC_TEXT ab.

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 Preflightseite verfügbar sein soll oder wenn Sie die BackgroundTask-Komponente verwenden möchten, um Arbeit an einem Hintergrundthread auszuführen.

Die folgenden Komponenten implementieren die ITask-Schnittstelle :

  • 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 Preflightseite schreiben, rufen Sie diese Methode auf, um ihre Aufgabe zu initialisieren. Die .config-Datei enthält XML, das in etwa wie folgt aussieht:

<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 weiteres HRESULT zurückgeben, wenn während der Ausführung der Aufgabe ein Fehler aufgetreten ist. Andere Werte als S_OK , die diese Methode zurückgibt, <werden mit Error-Elementen> im <Abschnitt ExitCodes> abgeglichen, wenn Sie die Preflightseite verwenden.

Der Parameter pReturnCode muss mit einer Zahl aktualisiert werden, die den Status der Aufgabe meldet. Diese Werte werden von der Preflightseite 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 Instanz dieser Komponente mithilfe der GetControlWrapper-Hilfsfunktion mit dem Typ CONTROL_TREE_VIEW ab.

void EnableCheckboxes(void)

Diese Methode aktiviert Kontrollkästchen im Strukturansichtssteuerelement, indem die TVS_CHECKBOXES-Formatvorlage festgelegt wird.

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

Fügen Sie dem Strukturansichtssteuerelement eine neue Bildliste hinzu. Der flags-Parameter wird im Aufruf der ImageList_Create Win32-Funktion übergeben.

int AddImage(HINSTANCE hInstance, int resourceId)

Fügen Sie der Imageliste ein Image aus einer Ressource (resourceId) im Modul mit dem Instanzhandle 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 das neue Element hinzugefügt werden soll. Diese Methode gibt das Handle an das neue Element zurück.

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

Legen Sie das Bild fest, das für ein Strukturansichtselement verwendet werden soll. Sie können sowohl das normale als auch das erweiterte Bild festlegen.

void Clear(void)

Entfernen Sie alle Elemente aus der Strukturansicht.

BOOL SetFirstVisible(HTREEITEM-Element)

Stellen Sie sicher, dass das Strukturansichtselement sichtbar ist. Die Strukturansicht führt bei Bedarf einen Bildlauf durch, um dieses Element sichtbar zu machen.

BOOL SelectItem(HTREEITEM item)

Legen Sie das aktuell ausgewählte Element auf das von Ihnen bereitgestellte Element fest. Anschließend können Sie SetFirstVisible aufrufen, um sicherzustellen, dass das neu ausgewählte Element sichtbar ist.

void CheckItem(HTREEITEM item, UINT checkState)

Die -Methode legt im Grunde das Bild fest, 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 Bildliste drei Bilder, die in Tabelle 22 angezeigt werden.

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)

Diese Methode legt die Höhe aller Elemente im Strukturansichtssteuerelement in Pixel fest. Es 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. Wenn Sie ein Element mit untergeordneten Elementen deaktivieren, werden die untergeordneten Elemente nicht deaktiviert.

void Expand(HTREEITEM hItem, BOOL expand)

Diese Methode erweitert oder reduziert einen Knoten in der Struktur.

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, die dasselbe übergeordnete Element verwendet.

UINT IsChecked(HTREEITEM-Element)

Diese Methode gibt 0 zurück, wenn der Strukturansichtsknoten nicht ausgewählt ist, und 1 , wenn dies der Fall 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 die interne Verwendung vorgesehen.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

Rufen Sie diese Methode auf, wenn Sie eine Benachrichtigung erhalten möchten, wenn sich das ausgewählte Element ändert oder der Benutzer den Überprüfungsstatus eines Strukturansichtselements ändert. Sie müssen das ITreeViewEvent in Ihrer Komponente implementieren, um diese Rückrufe zu erhalten.

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 in der Regel zusammen mit IWmiRepository, wenn Sie mit WMI-Aufrufen arbeiten. Mit der IWmiIteration-Schnittstelle können Sie die Werte durchlaufen, die eine Abfrage zurückgibt.

HRESULT Next(void)

Wechseln Sie zum nächsten Element in den Abfrageergebnissen, wie in Tabelle 23 gezeigt.

Tabelle 23. HRESULT Next(void) Query Returns

HRRESULT Beschreibung
S_OK Zum nächsten Ergebnis verschoben; Sie können GetProperty verwenden, um Eigenschaften dieses Ergebnisses abzurufen.
S_FALSE Die Liste enthält keine weiteren Elemente.
E_NOT_SET Es gibt keine Abfrageergebnisse.
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)

Diese Methode ruft den Wert einer Eigenschaft aus dem aktuellen Ergebnisdatensatz 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-Ergebnis

[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 gezeigt.

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, sodass 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 verfügt über einen eigenen Formularcontroller, der diese Schnittstelle implementiert. Sie verwenden diesen Controller, um die Felddaten in der .config XML-Datei mit den Steuerelementen auf Ihrer Seite zu verbinden. Der Formularcontroller verarbeitet dann viele der Details für Sie.

Einrichten des Formulars

Richten Sie im Allgemeinen den Formularcontroller in der OnWindowCreated-Methode Ihrer Seite ein. Dies umfasst in der Regel das Aufrufen der in Tabelle 28 gezeigten Methoden.

Tabelle 28. OnWindowCreated-Methode

Methode Beschreibung
Init Initialisiert den Formularcontroller.
AddField Stellt eine Verbindung zwischen einem Feld in der .config XML-Datei mit einem Zeichenfolgennamen und einem Steuerelement im Dialogfeld Ihrer Seite bereit, das eine ID ist.
AddRadioGroup Wird verwendet, um ein Optionsfeld mit einer Gruppe und einem Steuerelement in Ihrem Dialogfeld zu verbinden
AddToGroup Ermöglicht Ihnen "untergeordnete" Steuerelemente, die zusammen mit ihrem übergeordneten Element oder basierend auf dem ausgewählten Optionsfeld aktiviert oder deaktiviert sind
InitFields Rufen Sie auf, nachdem Sie alle Add-Methoden zum Einrichten des Formulars aufgerufen haben.
Validate Führt die anfängliche Überprüfung aus.
Verarbeiten von Formularereignissen

Fügen Sie der OnControlEvent-Methode den folgenden Aufruf hinzu:

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

Dieser Aufruf übergibt Ereignisse an den Formularcontroller, damit er formularbezogene Ereignisse verarbeiten kann.

Speichern von Formulardaten

Rufen Sie in der OnNextClicked-Methode die in Tabelle 29 gezeigten Formularmethoden auf.

Tabelle 29. OnNextClicked-Methode

Methode Beschreibung
InitSection Gibt den Namen des Abschnitts an, der auf der Seite Zusammenfassung für diese Seite angezeigt wird.
SaveFields Speichern von Feldwerten in Tasksequenzvariablen und auf der Seite Zusammenfassung
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)  

In der Regel rufen Sie diese Methode 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. Es stellt den XML-Code der Seite für den Formularcontroller bereit.

Validieren
HRESULT Validate(void)  

Diese Methode führt alle Validierungssteuerelemente 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 beendet dann die Verarbeitung von Validierungssteuerelementen. In der Regel müssen Sie diese Methode nur am Ende ihrer OnWindowCreated-Methode aufrufen. es gibt immer S_OK zurück.

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 gezeigt. Alle dieser 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 untergeordneten Steuerelements steuert
Controlld Die ID des Steuerelements, das Sie als untergeordnetes Element 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 über ein Validierungssteuerelement verfügen, das Sie im Code anstelle von mit dem XML-Code 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 über ein Validierungssteuerelement verfügen, das Sie im Code anstelle von mit dem XML-Code erstellen möchten.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)  

Rufen Sie diese Methode auf, um entweder das Validierungssteuerelement für ein Steuerelement explizit zu deaktivieren oder die normale Validierung wiederherzustellen, wie in Tabelle 31 dargestellt. Diese Methode ist z. B. nützlich, wenn Sie Über Aktivierungs-/Deaktivierungsregeln für Steuerelemente verfügen, die nicht von der Formularüberprüfung abgedeckt sind 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 Überprü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 dargestellt. 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 Name des Felds, wie es im XML-Code Ihrer Seite angezeigt wird
Controlid Die ID des Steuerelements in der Dialogfeldvorlage Ihrer Seite
suppressLog Legen Sie diesen Wert auf TRUE fest, wenn die Werte aus diesem Feld nicht in die Protokolldatei geschrieben werden sollen. Legen Sie diesen Parameter für Kennwort- oder PIN-Felder immer auf TRUE fest.
Typ Der Typ des Steuerelements, der einer der folgenden Ist:

- 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 einer benannten Optionsfeldgruppe ein Steuerelement hinzu, wie in Tabelle 33 gezeigt. Sie müssen dies vor der InitFields-Methode aufrufen, da diese Methode Attribute für das RadioGroup-Element verwendet, um Einstellungen für alle Optionsfeldsteuerelemente in der Gruppe zu steuern. Optionsgruppen können beispielsweise gesperrt werden, sodass alle Optionsfelder deaktiviert sind, untergeordnete Steuerelemente jedoch nur aktiviert oder deaktiviert werden, je nachdem, welches Optionsfeld ausgewählt ist. 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 gesamte Optionsfeldgruppe aktivieren oder deaktivieren. Durch das Deaktivieren einer Optionsgruppe werden alle Optionsfeldsteuerelemente in der Gruppe sowie alle untergeordneten Elemente dieser Optionsfelder deaktiviert, die mit AddToGroup hinzugefügt wurden. 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 auf TRUE fest, um die Optionsfeldgruppe zu aktivieren, und 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 vor dem Aufrufen dieser Methode AddField für jedes Feld auf, das vom XML gesteuert werden kann. Diese Methode gibt immer S_OK zurück.

Der pFieldCallback-Parameter ist optional. Wenn Sie ihn 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 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 das Speichern von Werten für Steuerelemente verarbeiten, die CONTROL_STATIC_TEXT nicht unterstützen.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)  

Mit dieser Methode können Sie bestimmen, ob ein Feld im XML-Code deaktiviert wurde.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)  

Diese Methode initialisiert die Zusammenfassungsdaten, die wie in Tabelle 36 auf der Seite Zusammenfassung angezeigt werden. Rufen Sie diese Methode in Ihrer OnNextClicked-Methode auf, bevor Sie SaveFields aufrufen. Diese Methode gibt immer S_OK zurück.

Tabelle 36. HRESULT-Initsection

Parameter Beschreibung
Schlüssel Dieser Parameter sollte für Ihre Seite eindeutig sein. Es wird verwendet, um sicherzustellen, dass jede Seite über eigene Zusammenfassungsinformationen verfügt.
sectionCaption Die Kopfzeile, die auf der Seite Zusammenfassung für die Zusammenfassungsinformationen 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 Seite "Zusammenfassung " Über die mit dem XML-Code festgelegten Elemente hinaus Zusammenfassungselemente hinzufügen. Siehe Tabelle 37.

Tabelle 37. HRESULT AddSummaryItem

Parameter Beschreibung
First Die Beschriftung für das Zusammenfassungselement, das auf der linken Seite angezeigt wird
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, die Kennwörter, PINs oder andere vertrauliche Werte speichern, die ein Benutzer eingeben könnte.

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 ausführt. 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 ein anderes Steuerelement, das Text zurückgeben kann)
tsVariableName Name der Tasksequenzvariable, die Sie ändern möchten
summaryCaption Die Beschriftung auf der Seite Zusammenfassung für diesen Wert
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)  

Diese Methode liest den Wert einer Tasksequenzvariable 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 Steuerungsereignisse verarbeiten kann, was er tun muss, um ordnungsgemäß zu funktionieren. 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 einer der Validierungssteuerelemente einen Fehler gemeldet hat, gibt diese Methode FALSE zurück. Anders ausgedrückt: Es wird nur TRUE zurückgegeben, 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 Validierungssteuerelements besteht darin, es zu einer Unterklasse der BaseValidator-Klasse zu machen, die in der Headerdatei BaseValidator.h definiert ist.

HRESULT Init(IControl *pControl, LPCTSTR-Nachricht)

Wenn Sie ein Validierungssteuerelement im Code erstellen, können Sie diese Methode aufrufen, um das Validierungssteuerelement zu initialisieren. Siehe Tabelle 39.

Tabelle 39. HRESULT Init

Parameter Beschreibung
pControl Das Steuerelement, das ihr Validierungssteuerelement ü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 Validierungssteuerelemente zu initialisieren, die er basierend auf dem XML-Code der Seite erstellt. Siehe Tabelle 40.

Tabelle 40. HRESULT Init-Methode

Parameter Beschreibung
pControl Das Steuerelement, das ihr Validierungssteuerelement überprüfen muss
pContainer Falls Ihr Validierungssteuerelement Zugriff auf die Protokollierung benötigt oder andere Komponenten erstellen muss
pProperties Ermöglicht den Zugriff auf die Eigenschaften (Setterelemente) für Ihr Validierungssteuerelement.
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, der 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-Code angegeben sind.

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

Sie können diese Methode implementieren, wenn Sie zusätzliche Werte benötigen, die nicht im XML-Code angegeben sind.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

Sie können diese Methode implementieren, wenn Sie zusätzliche Werte benötigen, die nicht im XML-Code angegeben 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. Sie verwendet die regex_match-Funktion der C++-Standardbibliothek, um die eigentliche Arbeit auszuführen. Die Methode gibt TRUE zurück, wenn Übereinstimmungen vorhanden sind, andernfalls FALSE.

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 keine Fehlerverarbeitung erfolgt und entweder S_OK zurückgegeben oder eine Ausnahme ausgelöst wird.

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 bietet Zugriff auf Tasksequenzvariablen. Sie können auf diese Schnittstelle mithilfe 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 Lesevorgang 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 auf Fertig stellen klicken.

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. Beim nächsten Aufruf von GetValue mit demselben Tasksequenznamen versucht die Methode, es aus der Tasksequenz abzurufen.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Wenn Tasksequenzvariablen geschrieben werden, z. B. wenn Sie im UDI-Assistenten auf Fertig stellen klicken, 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 vorgesehen.

IWizardFinish-Schnittstelle

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

Diese Schnittstelle ist nützlich in erweiterten Szenarien, in denen Sie zusätzliche Verarbeitungen durchführen möchten, wenn Sie im UDI-Assistenten auf Fertig stellen oder Abbrechen klicken. Der UDI-Assistent enthält einen Fertig stellen-Task , der Tasksequenzvariablen speichert, wenn Sie auf Fertig stellen klicken. Wenn Sie den Assistenten abbrechen, legt die Aufgabe nur die Tasksequenzvariable OSDSetupWizCancelled auf TRUE fest und speichert keine Änderungen an anderen Tasksequenzvariablen.

Wenn Sie eine eigene Fertigteilkomponente erstellen, müssen Sie sie mit folgendem Code 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 durch Aufrufen der Bind-Methode an ein Kombinationsfeld binden möchten.

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 Beschriftung 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 bietet Zugriff auf hierarchische Daten, die auf einer Seite gespeichert werden können. Sie erhalten diese Schnittstelle über Methoden auf der ISettingsProperties-Schnittstelle , die ihrer Seite über die Settings-Methode zur Verfügung steht.

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-Instanz mit zwei Datenelementen (von denen jedes wiederum über zwei Eigenschaften verfügt).

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önnen diese Methode beispielsweise mit DisplayName aufrufen, und sie würde diese Settereigenschaft für die Datenbindung verwenden. Das Kombinationsfeld würde dann öffentliche Elemente und Entwicklerteam als Elemente enthalten.

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

Diese Methode ruft eine Eigenschaft aus 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-Objekts , für das Sie einen Eigenschaftswert abrufen möchten.
propertyName Name der Settereigenschaft, 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 Die Eigenschaft wurde abgerufen.
E_INVALIDARG Der Index liegt 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 einer ISettingsProperties-Schnittstelle umschlossen ist. Siehe Tabelle 43 und Tabelle 44.

Tabelle 43. HRESULT GetNode

Parameter Beschreibung
Index Der Indexwert (beginnend mit 0) des DataItem-Objekts , für das Sie einen Eigenschaftswert abrufen möchten.
ppNode Beim Beenden die ISettingsProperties-Schnittstelle , die den DataItem-Knoten umschließt

Tabelle 44. HRESULT GetNode-Ergebnisse

[HRESULT] Beschreibung
S_OK Der Knoten wurde abgerufen.
E_INVALIDARG Der Index liegt 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 – 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; In der Regel sollte dieser Parameter ihren Firmennamen in der Zeichenfolge enthalten, um sicherzustellen, dass er eindeutig ist.
pFactory Ein Zeiger auf Ihre Klassenfactoryinstanz
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)

Diese Methode ist nur für die interne Verwendung vorgesehen.

BOOL Contains(LPCTSTR-Typ)

Diese Methode ist in der Regel für die interne Verwendung vorgesehen. Sie überprüft, ob eine Klassenfactory für einen Typ registriert wurde.

HRESULT GetFactory(LPCTSTR-Typ, 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 Komponente erstellen möchten, ist es effizienter, die Factory abzurufen und sie dann aufzufordern, die Instanzen für Sie zu erstellen.

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

Diese Methode erstellt eine neue Instanz einer Komponente anhand des Typs. Verwenden Sie stattdessen die CreateInstance-Vorlagenmethode , die die typsichere Objekterstellung ermöglicht.

HRESULT SetContainer(IWizardPageContainer *pContainer)

Diese Methode ist nur für die interne Verwendung vorgesehen.

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 Instanz 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 languageId-Parameter 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 " bereitgestellt wird

  • 0, wenn Sie den Befehlszeilenparameter /locale nicht angegeben haben

ILogger-Schnittstelle

__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, wodurch Probleme im Feld behoben werden können. Es ist eine gute Idee, dass Ihre Seiten Informationen protokollieren. Sie können einen Zeiger auf diese Schnittstelle innerhalb Ihrer Seite abrufen, indem Sie die Methode Logger() der Seite verwenden. Zeilen in der Protokolldatei enthalten eine "Level"-Zahl, die Fehler-, Normal-, Ausführlichkeits- oder Debugmeldungen darstellt.

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 die interne Verwendung vorgesehen.

MoveLog
HRESULT MoveLog(LPCWSTR logFilename)  

Diese Methode ist nur für die interne Verwendung vorgesehen.

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

Diese Methode ist nur für die interne Verwendung vorgesehen.

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

Diese Methode ist nur für die interne Verwendung vorgesehen.

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 Aufruf zurückgegebene Fehlercode (Dieser Code wird im Protokolleintrag als Zahl angezeigt.)
Komponente Eine Zeichenfolge, die die Quelle des Fehlers angibt. Dies ist in der Regel Ihre Seite oder die Komponente, die Sie geschrieben haben.
Meldung Die Meldung, in der erläutert wird, was den Fehler verursacht hat
Fehler2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

Diese Methode ähnelt der Error-Methode , ermöglicht aber das Bereitstellen einer zweiteiligen Nachricht. Die letzte Nachricht enthält "message" und dann "message2" in der Ausgabedatei. Dies ist einfach eine einfache Methode.

Standard
HRESULT Normal(LPCTSTR component, LPCTSTR message)  

Diese Methode protokolliert eine normale Meldung. Parameter finden Sie in der Beschreibung der Error-Methode .

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

Diese Methode protokolliert eine normale Meldung. 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 nur in der Datei gespeichert, wenn sie aktiviert sind. Weitere Informationen finden Sie im Abschnitt Übersicht.

EnableDebug
HRESULT EnableDebug(BOOL debug)  

Diese Methode ist nur für die interne Verwendung vorgesehen.

Schließen
HRESULT Close(void)  

Diese Methode ist nur für die interne Verwendung vorgesehen.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)  

Diese Methode ruft den Namen der Protokolldatei ab.

IOrientation-Schnittstelle

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

Diese Schnittstelle ist nur für die interne Verwendung vorgesehen.

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 die interne Verwendung vorgesehen.

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 bietet Zugriff auf Seitendaten. Verwenden Sie die Einstellung() -Methode der Seite, um zur obersten Ebene der Seitendaten zu gelangen.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

Mit dieser Methode können Sie die Werte von Attributen auf dem Hauptknoten abrufen, bei dem es sich um den Knoten Page handelt, wenn Sie die Settings()- Methode der Seite verwenden.

IStringProperties * Properties()

Diese Methode ermöglicht den Zugriff auf die Settereigenschaftswerte unter dem Hauptknoten. Für eine Seite sind dies die Eigenschaften der obersten Ebene.

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

Rufen Sie diese Methode auf, wenn Sie mithilfe eines XPath-Ausdrucks direkt eine Liste von XML-Knoten abrufen möchten. Wenn möglich, ist es besser, eine der anderen Methoden zu verwenden. Verwenden Sie diese Methode nur, wenn Sie auf andere Weise nicht zu Knoten gelangen können.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

Rufen Sie diese Methode auf, wenn Sie einen einzelnen XML-Knoten mithilfe eines XPath-Ausdrucks direkt abrufen möchten. Wenn möglich, ist es besser, eine der anderen Methoden zu verwenden. Verwenden Sie diese Methode nur, wenn Sie auf keinen anderen Weg zu einem Knoten gelangen können.

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 der Seitenebene GetDataNode auf, um eine ISettingsProperty-Schnittstelle für die Daten abzurufen. Rufen Sie dann auf dieser Instanz GetDataNodes auf, um die Liste der Datensätze abzurufen. Beispiel: Bei diesem XML-Code:

    <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, auf die Gruppe von DataItem-Knoten unter einem bestimmten Datenknoten zu gelangen. Mit dem XML-Code aus dem GetDataNodes-Beispiel führt der folgende Code genau dasselbe aus wie die vier Codezeilen im Beispiel unter GetDataNodes , aber mit Fehlerüberprüfung:

ISimpleStringProperties Interface  

ISimpleStringProperties-Schnittstelle

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

Diese Schnittstelle an sich 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 eine Reihe von Eigenschaften an eine andere Komponente übergeben müssen, z. B. eine Aufgabe, aber Sie möchten Werte programmgesteuert hinzufügen, anstatt Werte aus XML zu verwenden. Hier sehen Sie ein Beispiel für die Verwendung dieser Schnittstelle:

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 mit 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. DESULT 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. DESULT Get Property Value Results

[HRESULT] Beschreibung
S_OK Der 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 Preflightseite ausführt. Sie können entweder die Preflightseite direkt verwenden, was Sie die meiste Zeit tun, oder Eine eigene Seite erstellen, sodass diese Komponente den Großteil der Arbeit erledigen kann.

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 verwendet wird, um eine Meldung für die von Ihnen ausgewählte Aufgabe anzuzeigen.
idRetryButton Die Steuerelement-ID einer Schaltfläche, auf die Sie klicken können, um die Aufgaben erneut auszuführen.
pPageInfo Ein Wrapper um den XML-Code der Seite (TaskManager lädt den Satz von Tasks, die aus diesem XML ausgeführt werden sollen.)
pCallback Kann NULL sein (Wenn dieser Parameter nicht NULL ist, ruft TaskManager die Started-Methode auf, wenn eine Aufgabe gestartet wird, und die Finished-Methode für jeden Task, der ausgeführt wird.)
HRESULT SetFailMessage(LPCWSTR-Nachricht)

Diese Methode legt die Meldung fest, die angezeigt wird, wenn eine oder mehrere Aufgaben fehlschlagen.

HRESULT Start(void)

Diese Methode startet alle Aufgaben. Jede Aufgabe wird in einem separaten Thread gestartet.

HRESULT GetTaskMessage(size_t Index, LPBSTR-Nachricht)

Diese Methode ist nur für die interne Verwendung vorgesehen. Es ruft die aktuelle Nachricht für einen Vorgang basierend auf seinem Index in der Aufgabenliste ab.

HRESULT GetResultType)(size_t Index, LPBSTR-Typ)

Diese Methode ruft den aktuellen "Typ" für eine Aufgabe ab. In Tabelle 50 sind die verfügbaren Typen aufgeführt.

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 betrachtet 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 Preflightseiten verwendet, um die BitmapFilename-Settereigenschaft abzurufen, damit neben der Meldung für die von Ihnen hervorgehobene Aufgabe ein Bild angezeigt werden kann. Anders ausgedrückt: Sie können dem XML-Code der Aufgabe einen benutzerdefinierten Setter hinzufügen und dann mit dieser Methode abrufen.

int GetSelectedIndex(void)

Diese Methode ruft den Index der aktuell ausgewählten Aufgabe ab. Dies ist nützlich, wenn Sie zusätzliche Informationen zur Aufgabe abrufen möchten (siehe GetProperty-Methode ), die für die ausgewählte Aufgabe angezeigt werden sollen. Die Status- und Preflightseiten 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 abgeschlossen werden, bevor der Komponententest beendet wird. Diese Methode wird normalerweise nicht aufgerufen. Es wird entweder zurückgegeben, wenn alle Tasks ausgeführt werden oder die Wartezeit verstrichen ist.

size_t FailedCount(void)

Diese Methode gibt die Anzahl der Aufgaben zurück, die derzeit als fehlerhaft gekennzeichnet sind.

size_t WarningCount(void)

Diese Methode gibt die Anzahl der Aufgaben zurück, die derzeit als Warnung gekennzeichnet sind.

size_t SucceedCount(void)

Diese Methode gibt die Anzahl der Vorgänge zurück, die derzeit als erfolgreich gekennzeichnet sind.

size_t RunningCount(void)

Diese Methode gibt die Anzahl der derzeit ausgeführten Tasks zurück.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

Rufen Sie diese Methode aus dem OnCommonControlEvent Ihrer Seite auf, damit der TaskManager die benötigten Ereignisse verarbeiten kann.

void OnControlEvent(WORD eventId, WORD controlId)

Rufen Sie diese Methode aus dem OnControlEvent Ihrer Seite auf, damit der TaskManager die benötigten Ereignisse verarbeiten kann.

void EnableButtons(BOOL enable)

Diese Methode ist nur für die interne Verwendung vorgesehen.

IWizardComponent-Schnittstelle

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

In der Regel implementieren Sie diese Schnittstelle nicht direkt, sondern über die Vorlagenklasse WizardComponent . Wenn Ihre Komponente diese Schnittstelle implementiert und Sie eine Klassenfactory bei der Registrierung registriert haben, empfängt Ihre Komponente beim Erstellen einen Zeiger auf die IWizardPageContainer-Instanz . Dies hilft Ihnen beispielsweise beim Zugriff auf die Protokollierung 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 die interne Verwendung vorgesehen.

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 die interne Verwendung vorgesehen.

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 NextClicked(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 dies 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 von WizardPageImpl) zur Verfügung und bietet Ihnen Zugriff auf verschiedene Dienste des Assistenten.

ILogger * Logger(void)

Verwenden Sie diese Methode, um Nachrichten in die Protokolldatei zu schreiben, z. B.:

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

Diese Methode ermöglicht den Zugriff auf "Arbeitsspeicher"-Variablen, bei denen es sich um Eigenschaften handelt, die sich nur während der Ausführung des UDI-Assistenten im Arbeitsspeicher befinden. Diese Eigenschaften sind für andere Seiten entweder im Code oder im XML-Code verfügbar, wobei die syntax $memoryVarName$ verwendet wird.

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

Mit dieser Methode können Sie eine neue Instanz 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 behandelt die Arbeit mit Variablen innerhalb von Zeichenfolgenwerten. Sie unterstützt die in Tabelle 51 und Tabelle 52 gezeigten Formate.

Tabelle 51. HRESULT ReplaceVariables

Format Beschreibung
$Name$ Ersetzt den Wert einer Speichervariable durch diesen Namen (Wenn keine Speichervariable durch den 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 Tasksequenzvariable, falls vorhanden.
2. Verwenden Sie den Wert einer Umgebungsvariable, falls vorhanden.
3. Entfernen Sie andernfalls diesen Text aus der Zeichenfolge.

Tabelle 52. HRESULT-Parameter

Parameter Beschreibung
Source Die Eingabezeichenfolge, die eine beliebige Kombination von $ - und % -Variablen oder gar keine -Variablen enthalten kann
pDest Enthält bei der Rückgabe eine neue Zeichenfolge, in der alle Token gemäß Tabelle 51 ersetzt werden.
HRESULT GotoPage(LPCTSTR pageName)

Diese Methode wurde noch nicht vollständig getestet. Die Idee ist, dass Sie basierend auf dem Namen der Seite, wie in der .config XML-Datei definiert, direkt zu einer bestimmten Seite wechseln können. Beim Aufrufen dieser Methode wird onNextClicked auf Ihrer Seite umgangen. Darüber hinaus kann sich das Verhalten dieser Methode ändern, sodass sie auf eigenes Risiko verwendet wird.

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

Diese Methode zeigt ein Meldungsfeld mit dem Text und der Beschriftung an, die Sie bereitstellen. Der uType-Parameter ist ein beliebiger Wert, den Sie für die MessageBox Win32-Funktion angeben können.

BOOL InPreview(void)

Diese Methode gibt TRUE zurück, wenn Sie den Assistenten im Vorschaumodus gestartet haben, indem Sie den Schalter /preview angeben. Im Vorschaumodus ist die Schaltfläche Weiter nie deaktiviert. Diese Methode ermöglicht es Ihnen, Code im Vorschaumodus zu umgehen, der z. B. Probleme verursachen kann, wenn auf der Seite keine gültigen Daten vorhanden sind.

HWND GetHwnd(void)

Diese Methode gibt den HWND für das Hauptdialogfeld zurück. Verwenden Sie diese Methode mit Bedacht. Im Allgemeinen ist die Anwendungsprogrammierschnittstelle des UDI-Assistenten so konzipiert, dass Sie niemals direkt mit Fensterhandles 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 steht dem Code auf Ihrer Seite über die View-Methode (implementiert durch WizardPageImpl) zur Verfügung.

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. Die Verwendung dieser Fassaden anstelle der eigentlichen Steuerelemente erleichtert das Schreiben von Tests für Ihre Seite, da Sie Simulierte Fassaden 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 dieses Fensterhandle benötigen.

HWND GetControl(int itemId)

Wenn dies erforderlich ist, können Sie diese Methode aufrufen, um das Fensterhandle für ein Steuerelement auf Ihrer Seite abzurufen. (Es ist besser, die Vorlagenfunktion GetControlWrapper aufzurufen.

HRESULT Show (void)

Diese Methode ist nur für die interne Verwendung vorgesehen.

HRESULT Hide(void)

Diese Methode ist nur für die interne Verwendung vorgesehen.

HRESULT Focus(int itemId)

Legen Sie den Eingabefokus auf ein bestimmtes Steuerelement fest.

IWizardPage * Page(void)

Diese Methode ist nur für die interne Verwendung vorgesehen.

IFormController * Form(void)

Diese Methode ist nur für die interne Verwendung vorgesehen.

HRESULT FocusWizardButton(WizardButtons button)

Legt den Fokus auf eine der Schaltflächen des Assistenten fest. WizardButtons verfügt über zwei Werte: BackButton und NextButton.

HRESULT SetEnable(WizardButtons button, BOOL enable)

Fordern Sie an, dass eine der Assistentenschaltflächen aktiviert oder deaktiviert wird. Die Schaltfläche stimmt möglicherweise nicht mit dem von Ihnen gewünschten Zustand überein. Wenn Sie beispielsweise den UDI-Assistenten mit dem Schalter /preview ausführen, werden die Schaltflächen immer aktiviert. WizardButtons verfügt über zwei Werte: BackButton und NextButton.

void ShowWarningMessage(LPCTSTR message)

Diese Methode zeigt eine Warnmeldung am unteren Rand des Seiteninhaltsbereichs an. Diese Nachricht kann ein beliebiger Text sein.

void HideWarningMessage(void)

Blenden Sie eine Warnmeldung aus, die Sie mit 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 das Arbeiten mit XML-Dokumenten in C++ erleichtert.

HRESULT Load(LPCTSTR filename)

Diese Methode lädt ein XML-Dokument aus einer externen Datei. Es wird S_OK zurückgegeben, wenn die Datei ohne Fehler geladen wurde, oder S_FALSE , wenn ein Fehler aufgetreten ist. Wenn ein Fehler auftritt, können Sie die Fehlermeldung erhalten, indem Sie GetParseErrorMessage aufrufen.

HRESULT LoadXml(LPCTSTR xml)

Diese Methode lädt ein XML-Dokument aus einer Zeichenfolge anstelle einer externen Datei. Abgesehen von der Quelle zum Lesen des XML-Codes ist das Verhalten identisch mit der Load-Methode .

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 beim Laden des XML-Dokuments zurück, 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 Auflistung 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 zum Überprüfen des Schemas Ihres XML-Dokuments verwendet wird, wenn es geladen wird. Der von Ihnen bereitgestellte Namespace ist die Zeichenfolge, die Sie in XPath-Abfragen verwenden können, obwohl dies noch 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-Typ, 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 untergeordnetes Element 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 über 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 über 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.)

Referenz zum Konfigurationsdateischema des UDI-Assistenten-Designers

Diese Datei wird vom Designer des UDI-Assistenten verwendet. Für jede benutzerdefinierte .dll-Datei wird eine separate Datei erstellt, die benutzerdefinierte Assistentenseiten-Editoren, benutzerdefinierte Aufgaben oder benutzerdefinierte Validierungssteuerelemente 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).

In Tabelle 54 sind die Elemente in der Konfigurationsdatei des UDI-Assistenten-Designers und ihre Beschreibungen aufgeführt. Das DesignerConfig-Element ist der Stammknoten für diesen Verweis.

Tabelle 54. Elemente in der Konfigurationsdatei des UDI-Assistenten-Designers und deren Beschreibungen

Elementname Beschreibung
DesignerConfig Gibt den Stamm für alle anderen Elemente an.
DesignerMappings Gruppiert einen Satz von Page-Elementen.
Page Gibt einen Assistenten-Seiten-Editor an, der im UDI-Assistenten-Designer geladen werden soll, der zum Bearbeiten der Konfigurationseinstellungen für eine Assistentenseite verwendet wird.
Param 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 Validator-Element ist.
Aufgabe Gibt eine Aufgabe innerhalb der Aufgabenbibliothek an.
TaskItem Gibt eine Gruppe von Parametern an, die an die Aufgabe übergeben werden.
TaskLibrary Gruppiert einen Satz von Task-Elementen .
Validator Gibt ein Validierungssteuerelement in der Validierungsbibliothek an.
ValidatorLibrary Gruppiert einen Satz von Validierungssteuerelementelementen .

DesignerConfig

Dieses Element gibt den Stamm für alle anderen Elemente an.

Informationen zu Elementen

Tabelle 55 enthält Informationen zum DesignerConfig-Element .

Tabelle 55. DesignerConfig-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Eins: Dieses Element ist erforderlich.
Übergeordnete Elemente Keine
Inhalt DesignerMappings, TaskLibrary, ValidatorLibrary
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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

DesignerMappings

Dieses Element gruppiert einen Satz 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 Konfigurationsdatei des UDI-Assistenten-Designers entspricht.)
Übergeordnete Elemente DesignerConfig
Inhalt Page
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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 Assistenten-Seiten-Editor an, der in den 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. Seitenelementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens eine für jede Assistentenseite, die im DesignerMappings-Element definiert ist
Übergeordnete Elemente DesignerMappings
Inhalt Beliebiger wohlgeformten XML-Inhalt
Elementattribute

In Tabelle 58 sind die Attribute des Page-Elements und jeweils eine Beschreibung aufgeführt.

Tabelle 58. Attribute und entsprechende Werte für das Page-Element

Attribut Beschreibung
Beschreibung Gibt Text an, der Informationen zum Parameter bereitstellt, der im Designer des UDI-Assistenten angezeigt wird.
DesignerAssembly Gibt den Namen der .dll-Datei an, die dem Seiten-Editor des Assistenten zugeordnet ist (Die .dll-Datei muss im Ordner installation_folder\Bin vorhanden sein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben.)
DesignerType Gibt den Namen des Assistenten-Seiten-Editors innerhalb 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 Seiten-Editors an, der im Designer des UDI-Assistenten angezeigt wird.
Dll Gibt den Namen der .dll Datei an, die der Assistentenseite zugeordnet ist (Die .dll-Datei muss im Ordner installation_folder\Templates\Distribution\Tools\platform vorhanden sein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und 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 datei .png muss im Ordner installation_folder\Bin\Images vorhanden sein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben.)
Typ Gibt den Assistenten-Seiten-Editor an und muss mit dem benannten übereinstimmen, der beim Registrieren der benutzerdefinierten Seite verwendet wurde.
HinwBemerkungeneise

Der UDI-Assistent-Designer verwendet das Page-Element wie eine Vorlage, um den anfänglichen XML-Code für einen neuen Assistenten zu erstellen. Der Designer des UDI-Assistenten führt eine Schemaüberprüfung durch, um sicherzustellen, dass die Page - und untergeordneten Elemente ein gültiges Format haben. Dieses Element stellt eine Zuordnung zwischen dem Seitentyp des UDI-Assistenten und den Informationen bereit, die der Designer des UDI-Assistenten zum Bearbeiten und Erstellen von Seiten dieses Typs mithilfe eines benutzerdefinierten Seiten-Editors benötigt.

Beispiel

Keine.

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 Validator-Element ist.

Informationen zu Elementen

Tabelle 59 enthält Informationen zum Param-Element .

Tabelle 59. Param-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element für jedes übergeordnete TaskItem- oder Validator-Element
Übergeordnete Elemente TaskItem, Validator
Inhalt Beliebiger wohlgeformten XML-Inhalt
Elementattribute

In Tabelle 60 sind die Attribute des Param-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 60. Attribute und entsprechende Werte für das Param-Element

Attribut Beschreibung
Beschreibung Gibt Text an, der Informationen zum Parameter bereitstellt, der im Designer des UDI-Assistenten angezeigt wird Hinweis: Dieses Attribut ist nur für das Validator-Element gültig.
DisplayName Gibt den benutzerfreundlichen Namen des Validierungsparameters an, der für die entsprechende Seite des UDI-Assistenten im UDI-Assistenten-Designer angezeigt wird (Dieser Name ist in der Regel beschreibender als das Name-Attribut .) Hinweis: Dieses Attribut ist nur für das Validator-Element gültig.
Name Gibt den Namen des Parameters an, der abhängig vom übergeordneten Element an den Task oder das Validierungssteuerelement übergeben wird (dieses Attribut wird in einem Setter-Element in der Konfigurationsdatei des UDI-Assistenten zum Property-Attribut.) Hinweis: Dieser Parameter wird für übergeordnete TaskItem- und Validator-Elemente verwendet.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Aufgabe

Dieses Element gibt eine Aufgabe innerhalb der Aufgabenbibliothek an.

Informationen zu Elementen

Tabelle 61 enthält Informationen zum Task-Element .

Tabelle 61. Taskelementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb des TaskLibrary-Elements (Dieses Element ist nicht optional, wenn das TaskLibrary-Element angegeben wird.)
Übergeordnete Elemente TaskLibrary
Inhalt TaskItem
Elementattribute

Tabelle 62 enthält die Attribute des Task-Elements und eine Beschreibung der einzelnen Elemente.

Tabelle 62. Attribute und entsprechende Werte für das Task-Element

Attribut Beschreibung
Beschreibung Gibt Text an, der Informationen zur Aufgabe bereitstellt, die im UDI-Assistenten-Designer angezeigt wird.
Dll Gibt den Namen der .dll-Datei an, die der Aufgabe zugeordnet ist (Die .dll-Datei muss im Ordner installation_folder\Templates\Distribution\Tools\platform vorhanden sein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben und 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 Seite des UDI-Assistenten und im Designer des UDI-Assistenten angezeigt wird.
Typ Gibt den Tasktyp an, der bei der Factoryregistrierung registriert und zum Aufrufen einer bestimmten Aufgabe in einer .dll-Datei verwendet wird.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

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. TaskItem-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Ein oder mehrere für jedes Task-Element
Übergeordnete Elemente Aufgabe
Inhalt Param
Elementattribute

In Tabelle 64 sind die Attribute des TaskItem-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 64. Attribut und entsprechende Werte für das TaskItem-Element

Attribut Beschreibung
Typ Gibt den des Elementtyps 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 ist, wird in der Konfigurationsdatei des UDI-Assistenten ein File-Element erstellt.

Derzeit werden nur folgende Werte unterstützt:

- Datei, die zwei untergeordnete Param-Elemente erfordert (ein untergeordnetes Param-Element mit dem Name-Attribut auf Source und ein weiteres untergeordnetes Param-Element mit dem Name-Attribut , das auf Dest festgelegt ist)
- Setter, der ein untergeordnetes Param-Element erfordert
HinwBemerkungeneise

Keine.

Beispiel

Keine.

TaskLibrary

Dieses Element gruppiert einen Satz von Task-Elementen .

Informationen zu Elementen

Tabelle 65 enthält Informationen zum TaskLibrary-Element .

Tabelle 65. TaskLibrary-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder eins innerhalb des DesignerConfig-Elements (Dieses Element ist optional, wenn in der DLL keine benutzerdefinierten Aufgaben vorhanden sind, die dieser Konfigurationsdatei des UDI-Assistenten-Designers entsprechen.)
Übergeordnete Elemente DesignerConfig
Inhalt Aufgabe
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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 Validierungssteuerelementelement

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb des ValidatorLibrary-Elements (Dieses Element ist optional.)
Übergeordnete Elemente ValidatorLibrary
Inhalt Param
Elementattribute

In Tabelle 67 sind die Attribute des Validator-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 67. Attribute und entsprechende Werte für das Validierungssteuerelementelement

Attribut Beschreibung
Beschreibung Gibt Text an, der Informationen zum Validierungssteuerelement bereitstellt, das im UDI-Assistenten-Designer angezeigt wird.
DisplayName Gibt den benutzerfreundlichen Namen des Validierungssteuerelements an, das im Designer des UDI-Assistenten angezeigt wird (Dieser Name ist in der Regel aussagekräftiger als das Name-Attribut .)
Dll Gibt den Namen der .dll-Datei an, die dem Validierungssteuerelement zugeordnet ist (Die .dll-Datei muss im Ordner installation_folder\Templates\Distribution\Tools\platform vorhanden sein (wobei installation_folder der Ordner ist, in dem Sie MDT installiert haben, und plattform ist x86 für die 32-Bit-Version oder x64 für die 64-Bit-Version.)
Name Gibt den Namen des Validierungssteuerelements an, der auf der entsprechenden Seite des UDI-Assistenten und im Designer des UDI-Assistenten angezeigt wird.
Typ Gibt den Validierungstyp an, der mit dem Registrierungsfaktor registriert und zum Aufrufen eines bestimmten Validierungssteuerelements in einer .dll-Datei verwendet wird.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

ValidatorLibrary

Dieses Element gruppiert einen Satz von Validierungssteuerelementelementen .

Informationen zu Elementen

Tabelle 68 enthält Informationen zum ValidatorLibrary-Element .

Tabelle 68. ValidatorLibrary-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder 1 innerhalb des DesignerConfig-Elements (Dieses Element ist optional, wenn in der DLL keine benutzerdefinierten Validierungssteuerelemente vorhanden sind, die dieser Konfigurationsdatei des UDI-Assistenten-Designers entsprechen.)
Übergeordnete Elemente DesignerConfig
Inhalt Validator
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Erfordert Text in einem Feld" Type="Microsoft. Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Lässt bestimmte Zeichen nicht in einem Feld zu" 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 zum Designer des UDI-Assistenten

Steuerelemente

Die Steuerelemente, die zum Erstellen benutzerdefinierter Assistenten-Seiten-Editoren für die Verwendung im UDI-Assistenten-Designer verwendet werden, sind WPF UserControl-Instanzen . In Tabelle 69 sind die Steuerelemente aufgeführt, die Sie zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwenden können.

Tabelle 69. Steuerelemente, die zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwendet werden können

Kontrolle Beschreibung
CollectionTControl Dieses Steuerelement wird verwendet, um Daten zu bearbeiten, die im Data-Element innerhalb eines Page-Elements gespeichert sind.
FieldElementControl Dieses Steuerelement wird verwendet, um ein Feld zu bearbeiten, das in der Regel mit einem TextBox-Steuerelement auf der XAML-Seite verknüpft ist.
SetterControl Dieses Steuerelement wird verwendet, um den Wert eines Setterelements in der Konfigurationsdatei des UDI-Assistenten zu ändern.

CollectionTControl

Dieses Steuerelement bietet viele Funktionen zum Bearbeiten von Daten. Die beste Möglichkeit, um zu erfahren, wie sie dieses Steuerelement verwenden, besteht darin, sich das Beispiel anzusehen, das zeigt, wie Daten unter dem Data-Element einer Seite bearbeitet werden. Im Beispiel wird insbesondere gezeigt, wie Elemente in diesem Steuerelement hinzugefügt, entfernt und bearbeitet werden.

FieldElementControl

Verwenden Sie dieses Steuerelement, um ein Feld zu bearbeiten, das in der Regel 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 Zeichenfolgeneigenschaft enthält Informationen zum Verbinden von FieldElementControl mit dem zugrunde liegenden XML-Code für das Feld. Die Verbindung wird mit einer Eigenschaft der Seiten-Editor-Schnittstelle 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 Seiten-Editor-Schnittstelle ControlRoot und wird im ElementName-Parameter angegeben. Die Bindung wird an die DataContext.Location-Eigenschaft der ControlRoot-Seiten-Editor-Schnittstelle durchgeführt. DataContext ist ein Ansichtsmodell, das auf das Page-Element in der Konfigurationsdatei des UDI-Assistenten verweist. Location ist eine Eigenschaft der Ansicht, die eine Liste der möglichen 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 fett formatierter, orangefarbener Text, der unmittelbar ü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 Zustand zwischen Entsperrt und Gesperrt (aktiviert oder deaktiviert) ändert. Bei Festlegung auf:

  • True, die Schaltfläche ist nicht sichtbar.

  • False, 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 die -Eigenschaft auf eine Registerkarte verweist, gibt es keine Registerkarte im FieldElementControl , sondern einen Abschnitt, der ausgeblendet werden kann. Bei Festlegung auf:

  • True, 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. Bei Festlegung auf:

  • True, der Rahmen ist nicht sichtbar.

  • False, 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. Bei Festlegung auf:

  • True, 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 Validierungssteuerelemente verwaltet wird. Obwohl die -Eigenschaft auf eine Registerkarte verweist, gibt es keine Registerkarte im FieldElementControl , sondern einen Abschnitt, der ausgeblendet werden kann. Bei Festlegung auf:

  • True, 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 Feldzusammenfassungsbeschriftung konfigurieren. Die Beschriftung und der entsprechende Wert aus dem Feld werden auf einem Seitentyp des Assistenten SummaryPage in einem Phasenflow angezeigt. Obwohl die -Eigenschaft auf eine Registerkarte verweist, gibt es keine Registerkarte im FieldElementControl , sondern einen Abschnitt, der ausgeblendet werden kann. Bei Festlegung auf:

  • True, 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 die -Eigenschaft auf eine Registerkarte verweist, gibt es keine Registerkarte im FieldElementControl , sondern einen Abschnitt, der ausgeblendet werden kann. Bei Festlegung auf:

  • True, 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 Setterelements 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 diese an eine Eigenschaft Ihres Ansichts- oder Ansichtsmodells binden, die eine Verbindung mit dem Setter herstellt. Dies ähnelt der Bindung an ein Feld, wie für 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 fett formatierter, orangefarbener Text angezeigt.

Instructiontext

Legen Sie diese Eigenschaft auf den Text fest, der unterhalb der Kopfzeile angezeigt werden soll. Dies ist in der Regel Einweisungstext, der dem Benutzer des benutzerdefinierten Editors mitteilt, wann und warum er das Verhalten des Felds ändern möchte.

Schnittstellen

In Tabelle 70 sind die Schnittstellen aufgeführt, die Sie zum Erstellen benutzerdefinierter Assistentenseiten-Editoren verwenden können.

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 bietet Zugriff auf Methoden, die Sie zum Anzeigen von Meldungsfeldern verwenden können.

IDataService

Diese Schnittstelle enthält mehrere Eigenschaften und Methoden, aber es gibt nur eine Eigenschaft, die Sie benötigen möchten. 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

In Tabelle 71 sind die Eigenschaften für die IDataService-Schnittstelle aufgeführt.

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 niemals festlegen, aber Sie können den XML-Code für Ihre Seite ändern. Der Beispielseiten-Editor zeigt Beispiele für das Ändern des XML-Codes. Sie verwenden diese Eigenschaft in erster Linie, wenn Sie über benutzerdefinierte Daten verfügen. Für Felder und Eigenschaften (Setter) können Sie vordefinierte Steuerelemente verwenden, die sich um alle Details kümmern.

IMessageBoxService

Diese Schnittstelle bietet Zugriff auf Methoden, die Sie zum Anzeigen von Meldungsfeldern verwenden können. Möglicherweise fragen Sie sich, warum Sie eine Schnittstelle benötigen, um ein Meldungsfeld anzuzeigen. Die Realität ist, dass Sie dies nicht tun: Microsoft verwendet diese Schnittstelle mit im Code, da sie das Schreiben automatisierter Tests für Designerseiten unterstützt.

Die Verwendung dieser Methoden bietet jedoch einen nützlichen Vorteil: In den Dialogfeldern ist immer der "Besitzer" auf den UDI-Assistenten festgelegt, wodurch sichergestellt wird, dass das Dialogfeld ordnungsgemäß mit dem Hauptfenster gruppiert wird.

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

In Tabelle 72 sind die Methoden für die IMessageBoxService-Schnittstelle aufgeführt.

Tabelle 72. Methoden für die IMessageBoxService-Schnittstelle

Methode Beschreibung
Showmessagebox Diese überladene Methode wird verwendet, um ein Meldungsfeld mit den folgenden Membern anzuzeigen:

- ShowMessageBox(String message, String caption, MessageBoxImage icon)
- ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon)
- ShowMessageBox(Ausnahme)
ShowDialogWindow Verwenden Sie diese Methode, um ein neues Dialogfeld zu erstellen.
ShowWizardWindow Verwenden Sie diese Methode, um einen benutzerdefinierten Editor in einem Dialogfeld anzuzeigen, das die Schaltflächen Weiter und Zurück für die Navigation enthält.
Showmessagebox

Diese Methode zeigt ein Meldungsfeld an, das ein untergeordnetes Element des benutzerdefinierten Assistenten-Seiten-Editors ist. Dieses Element ist überladen: Tabelle 73 enthält eine Liste der Elemente und eine kurze Beschreibung der einzelnen Elemente. Vollständige Informationen zu den einzelnen Membern (einschließlich Syntax, Verwendung und Beispiele) finden Sie im Abschnitt, der den einzelnen Membern entspricht.

Tabelle 73. Überladene Member für die ShowMessagBox-Methode

Member Beschreibung
ShowMessageBox(String message, String caption, MessageBoxImage icon) Zeigt ein Meldungsfeld mit einem Symbol und einer Ok-Schaltfläche an.
ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon) Zeigt ein Meldungsfeld mit einem Symbol und verschiedenen möglichen Kombinationen von Schaltflächen an.
ShowMessageBox(Ausnahme) Zeigt ein Meldungsfeld an, das Informationen zu einer Ausnahme enthält und über die Schaltfläche OK verfügt.
ShowMessageBox(String message, String caption, MessageBoxImage icon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);  

Diese Methode zeigt ein Meldungsfeld mit der Schaltfläche OK an. Siehe Tabelle 74.

Tabelle 74. Parameter für die ShowMessageBox(String message, String caption, MessageBoxImage icon)-Methode

Parameter Beschreibung
message 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 caption, MessageBoxButton button, MessageBoxImage icon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);  

Diese Methode zeigt ein Meldungsfeld mit dem gewünschten Satz von Schaltflächen an und meldet, auf welche Schaltfläche Sie geklickt haben. Siehe Tabelle 75.

Tabelle 75. Parameter für die ShowMessageBox(string message, string caption, 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.
button Welche Schaltflächen angezeigt werden sollen
icon Der Typ des Symbols, das im Meldungsfeld angezeigt werden soll
ShowMessageBox(Ausnahme)
void ShowMessageBox(Exception exception);  

Diese Methode zeigt ein Meldungsfeld an, das Informationen zu einer Ausnahme meldet. Dieses Meldungsfeld verfügt über eine einzelne Ok-Schaltfläche. Siehe Tabelle 76.

Tabelle 76. Parameter für die ShowMessageBox(Exception Exception)-Methode

Parameter Beschreibung
Ausnahme Die Ausnahme, die Sie melden möchten (Das Dialogfeld verwendet die Ausnahme. Nachricht als Inhalt.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);  

Diese Methode erstellt ein neues Dialogfeld, dessen Inhalt der Text ist, den Sie im viewType-Parameter angeben. Der UDI-Designer erstellt eine neue Instanz dieses Typs und umschließt sie in einem Dialogfeld mit den Schaltflächen OK und Abbrechen .

Sie übergeben Daten mithilfe des parameters dialogPayload an Ihr Steuerelement. Die SampleEditor-Lösung 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, das die Schaltflächen Weiter und Zurück für die Navigation enthält. Microsoft hat kein Beispiel für die Verwendung dieser Methode bereitgestellt.

Referenz zum Konfigurationsdateischema des UDI-Assistenten

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 Seiten des Assistenten

  • Die Reihenfolge der Assistentenseiten im UDI-Assistenten

  • Einstellungen für die Felder auf jeder Assistentenseite

  • Verfügbare StageGroups im Designer des UDI-Assistenten

  • Verfügbare Phasen innerhalb der einzelnen Bereitstellungs-Assistenten 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 in einem Page-Element und wird durch das Name-Attribut benannt.
Dataitem Gruppiert die einzelnen Setter-Elemente in einem Page-Element . Sie können hierarchische Daten erstellen, indem Sie ein oder mehrere Data-Elemente in ein DataItem-Element einschließen. Jedes DataItem-Element stellt ein einzelnes Element dar. Beispielsweise kann eine Liste der verfügbaren Laufwerke über ein DataItem-Element für den Anzeigenamen und ein anderes DataItem-Element für den entsprechenden Laufwerkbuchstaben verfügen.
Default Gibt einen Standardwert für das Feld an, das im übergeordneten Field - oder RadioGroup-Element angegeben ist. Der Standardwert ist auf den Wert festgelegt, der von diesem Element in Klammern geklammert ist.
Dll Gibt eine DLL an, die vom UDI-Assistenten und dem UDI-Assistenten-Designer geladen und referenziert werden soll.
Dlls Gruppiert die einzelnen DLL-Elemente .
Error Gibt einen möglichen Fehlercode an, der von einer Aufgabe zurückgegeben werden kann. Der Wert des Fehlercodes wird vom HRESULT des Tasks zurückgegeben und von diesem Element abgefangen, um spezifischere Fehlerinformationen bereitzustellen.
Exitcode Gibt einen möglichen Exitcode für eine Aufgabe an. Die Exitcodes sind Rückgabecodes, die der Task erwartet. Erstellen Sie ein ExitCode-Element für jeden möglichen Exitcode. Andernfalls können Sie ein Sternchen (*) im Value-Attribut angeben, um Rückgabecodes zu behandeln, die in anderen ExitCode-Elementen nicht aufgeführt sind.
Beendigungswerte Gruppiert einen Satz von ExitCode - und Error-Elementen für ein Task-Element oder ein Error-Element .
Field Gibt eine Instanz eines Steuerelements in einem Page-Element an, das zur Anpassung mit XML verwendet wird. Nicht alle Steuerelemente ermöglichen die Anpassung mit XML, nur Steuerelemente, die das Field-Element verwenden.
Fields Gruppiert die einzelnen Field-Elemente in einem Page-Element .
Datei Gibt die Quelle und das Ziel für einen Dateikopiervorgang mit dem Microsoft an. Wizard.CopyFilesTask-Aufgabentyp. Sie können ein separates File-Element einschließen, um mehr als eine Datei in einer einzelnen Aufgabe zu kopieren.
Page Gibt eine Instanz einer Seite an und enthält alle Konfigurationseinstellungen für die Seite.
PageRef Gibt einen Verweis auf eine Instanz einer Seite innerhalb einer Stage innerhalb einer Stagegroup an.
Pages Gruppiert die einzelnen Page-Elemente .
RadioGroup Gibt eine Gruppe von Optionsfeldern innerhalb eines Field-Elements an.
StageGroup Gibt eine Gruppe von einer oder mehreren Phasen an.
StageGroups Gruppiert eine Gruppe von Phasengruppen in einer Konfigurationsdatei des UDI-Assistenten.
Setter Gibt eine Eigenschaftseinstellung eines Werts für eine Eigenschaft an, die in der Eigenschaft Property benannt ist.
Stufe Gibt eine Phase in einer StageGroup an und enthält ein oder mehrere PageRef-Elemente .
Style Gruppiert die einzelnen Setterelemente , die das Aussehen und Verhalten des UDI-Assistenten konfigurieren, einschließlich des Titels oben im Assistenten und des Bannerbilds, das im UDI-Assistenten angezeigt wird.
Aufgabe Gibt eine Aufgabe an, die auf der im übergeordneten Page-Element angegebenen Seite ausgeführt werden soll.
Aufgaben Gruppiert eine Gruppe von Aufgaben für ein Page-Element .
Validator Gibt ein Validierungssteuerelement für das Feldsteuerelement an, das im übergeordneten Field-Element angegeben ist.
Assistent Gibt den Stamm für alle anderen Elemente an.

Daten

Dieses Element gruppiert die einzelnen DataItem-Elemente in einem Page-Element und wird mit dem Name-Attribut benannt.

Informationen zu Elementen

Tabelle 78 enthält Informationen zum Data-Element .

Tabelle 78. Datenelementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb jedes Page-Elements (dieses Element ist optional.)
Übergeordnete Elemente Page, DataItem
Inhalt DataItem, Setter
Elementattribute

In Tabelle 79 sind die Attribute des Data-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 79. Attribute und entsprechende Werte für das Datenelement

Attribut Beschreibung
Name Gibt den Namen des Data-Elements an.
HinwBemerkungeneise

Mit dem Name-Attribut kann Code einen bestimmten Satz von Daten abrufen.

Beispiel

Keine.

Dataitem

Dieses Element gruppiert die einzelnen Setter-Elemente in einem Page-Element . Sie können hierarchische Daten erstellen, indem Sie ein oder mehrere Data-Elemente in ein DataItem-Element einschließen. Jedes DataItem-Element stellt ein einzelnes Element dar. Beispielsweise kann eine Liste der verfügbaren Laufwerke über ein DataItem-Element für den Anzeigenamen und ein anderes DataItem-Element für den entsprechenden Laufwerkbuchstaben verfügen.

Informationen zu Elementen

Tabelle 80 enthält Informationen zum DataItem-Element .

Tabelle 80. DataItem-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb jedes Data-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Daten
Inhalt Daten, Setter
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

Keine.

Default

Dieses Element gibt einen Standardwert für das Feld an, das im übergeordneten Field - oder RadioGroup-Element angegeben ist. Der Standardwert ist auf den Wert festgelegt, den dieses Element in Klammern klammert.

Informationen zu Elementen

Tabelle 81 enthält Informationen zum Default-Element .

Tabelle 81. Standardelementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb eines Field- oder RadioGroup-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Field, RadioGroup
Inhalt Kann ein beliebiger wohlgeformten XML-Inhalt sein, ist aber in der Regel Standardtext.
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

Im folgenden Beispiel ist die Standardeinstellung für das Feld TimeZone auf "Pacific Standard Time" festgelegt:

<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-Assistenten-Designer laden und darauf verweisen können.

Informationen zu Elementen

Tabelle 82 enthält Informationen zum DLL-Element .

Tabelle 82. DLL-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb des DLLs-Elements
Übergeordnetes Element Dlls
Inhalt Für dieses Element sind keine Inhalte zulässig.
Elementattribute

In Tabelle 83 sind die Attribute des DLL-Elements aufgeführt und jeweils eine Beschreibung enthalten.

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 Designer des UDI-Assistenten verweisen sollen.
HinwBemerkungeneise

Keine.

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 DLLs-Element .

Tabelle 84. DLLs-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Eine
Übergeordnete Elemente Assistent
Inhalt Dll
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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 des Tasks abgefangen, um spezifischere Fehlerinformationen bereitzustellen.

Informationen zu Elementen

Tabelle 85 enthält Informationen zum Error-Element .

Tabelle 85. Fehlerelementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb jedes ExitCode-Elements (dieses Element ist optional.)
Übergeordnete Elemente Beendigungswerte
Inhalt Beliebiger wohlgeformten XML-Inhalt
Elementattribute

Tabelle 86 enthält die Attribute des Error-Elements und eine Beschreibung der einzelnen Elemente.

Tabelle 86. Fehlerelementinformationen

Attribut Beschreibung
Status Gibt den Rückgabestatus einer Aufgabe an, bei der ein Fehler aufgetreten ist. In der Regel wird der Wert für dieses Attribut auf Error festgelegt. Dieser Wert wird in der Spalte Status auf der Assistentenseite des UDI-Assistenten angezeigt.
Text Gibt den beschreibenden Text zur Fehlerbedingung an, die bei der Aufgabe aufgetreten 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 für dieses Element gültig:

- 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 Error-Elementen aufgeführt sind.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Exitcode

Dieses Element gibt einen möglichen Exitcode für eine Aufgabe an. Die Exitcodes sind Rückgabecodes, die der Task erwartet. Erstellen Sie ein ExitCode-Element für jeden möglichen Exitcode. Andernfalls können Sie ein Sternchen (*) im Value-Attribut angeben, um Rückgabecodes zu behandeln, die in anderen ExitCode-Elementen nicht 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 0 (null) oder mehr innerhalb jedes ExitCodes-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Beendigungswerte
Inhalt Mindestens ein ExitCode-Element und null oder mehr Error-Elemente
Elementattribute

In Tabelle 88 sind die Attribute des ExitCode-Elements aufgeführt und jeweils eine Beschreibung enthalten.

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 State auf der entsprechenden Assistentenseite des UDI-Assistenten angezeigt. Sie können für dieses Attribut beliebige Werte verwenden, die für Ihre Aufgabe aussagekräftig sind. Im Folgenden werden typische Werte für dieses Attribut verwendet:

-Erfolg
-Warnung
-Fehler
Text Gibt den beschreibenden Text zum vorhandenen Code der Aufgabe an.
Typ Gibt an, ob dieses Element einen Fehler, eine Warnung oder einen Erfolg darstellt. Der im Typ angegebene Wert muss innerhalb eines ExitCodes-Elements eindeutig sein. Die folgenden Werte sind für dieses Element gültig:

- 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 in anderen ExitCode-Elementen nicht aufgeführt sind.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Beendigungswerte

Dieses Element gruppiert einen Satz von ExitCode - und Error-Elementen für ein Task - oder Error-Element .

Informationen zu Elementen

Tabelle 89 enthält Informationen zum ExitCodes-Element .

Tabelle 89. Informationen zum ExitCodes-Element

Attribut Wert
Anzahl der Vorkommen Eins innerhalb jedes Task-Elements
Übergeordnete Elemente Aufgabe
Inhalt Error, ExitCode
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

Keine.

Feld

Dieses Element gibt eine Instanz eines Steuerelements in einem Page-Element an, das zur Anpassung mit XML verwendet wird. Nicht alle Steuerelemente ermöglichen die Anpassung mit XML, nur Steuerelemente, die das Field-Element verwenden.

Informationen zu Elementen

Tabelle 90 enthält Informationen zum Field-Element .

Tabelle 90. Feldelementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb jedes Field-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Fields
Inhalt Standard, Validierungssteuerelement
Elementattribute

In Tabelle 91 sind die Attribute des Field-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 91. Attribute und entsprechende Werte für das Field-Element

Attribut Beschreibung
Enabled Gibt an, ob das Feld für die Benutzereingabe 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 Des Zusammenfassungs-Assistenten für den Wert angezeigt wird, den dieses Feld festlegt.
Varname Gibt den Namen der Tasksequenzvariable an, der mithilfe des Felds im übergeordneten Field-Element gelesen oder konfiguriert wurde.
HinwBemerkungeneise

Dieses Element kann null oder mehr Default-Elemente und null oder mehr Validierungssteuerelementelemente enthalten.

Beispiel

Keine.

Fields

Dieses Element gruppiert die einzelnen Field-Elemente in einem Page-Element .

Informationen zu Elementen

Tabelle 92 enthält Informationen zum Fields-Element .

Tabelle 92. Fields-Elementinformationen

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 verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

Keine.

Datei

Dieses Element gibt die Quelle und das Ziel für einen Dateikopiervorgang mit dem Microsoft an. Wizard.CopyFilesTask-Aufgabentyp. Sie können ein separates File-Element einschließen, um mehr als eine Datei in einer einzelnen Aufgabe zu kopieren.

Informationen zu Elementen

Tabelle 93 enthält Informationen zum File-Element .

Tabelle 93. Dateielementinformationen

Attribut Wert
Anzahl der Vorkommen Eine oder mehrere für jede Aufgabe, die den Vorgangstyp Microsoft hat. Wizard.CopyFilesTask
Übergeordnete Elemente Aufgabe
Inhalt Keine
Elementattribute

Tabelle 94 enthält die Attribute des File-Elements und eine Beschreibung der einzelnen Elemente.

Tabelle 94. Attribute und entsprechende Werte für das File-Element

Attribut Beschreibung
Dest 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 die Microsoft. Wizard.CopyFilesTask-Tasktypkopien. Dieses Attribut unterstützt Wildcardzeichen, sodass mehrere Dateien mit einem einzelnen File-Element kopiert werden können. Umgebungsvariablen sind als Teil des Pfads zulässig.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Seite

Dieses Element gibt eine Instanz einer Seite an und enthält alle Konfigurationseinstellungen für die Seite.

Informationen zu Elementen

Tabelle 95 enthält Informationen zum Page-Element .

Tabelle 95. Seitenelementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb jedes Pages-Elements
Übergeordnete Elemente Pages
Inhalt Daten, Felder, Setter, Aufgaben
Elementattribute

Tabelle 96 enthält die Attribute des Page-Elements und eine Beschreibung der einzelnen Elemente.

Tabelle 96. Attribute und entsprechende Werte für das Page-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 Name-Attribut .
Name Gibt den Namen der Assistentenseite an, die im UDI-Assistenten-Designer angezeigt wird.
Typ Gibt den Typ der Assistentenseite an, die sich direkt auf eine bestimmte Assistentenseite innerhalb einer DLL bezieht.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

PageRef

Dieses Element gibt einen Verweis auf eine Instanz einer Seite innerhalb einer Stage in einer StageGroup an.

Informationen zu Elementen

Tabelle 97 enthält Informationen zum PageRef-Element .

Tabelle 97. PageRef-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb eines Stage-Elements
Übergeordnete Elemente Stufe
Inhalt Keine
Elementattribute

In Tabelle 98 ist das Attribut des PageRef-Elements aufgeführt, und es wird beschrieben.

Tabelle 98. Attribute und entsprechende Werte für das PageRef-Element

Attribut Beschreibung
Page Gibt die Instanz einer Seite innerhalb einer Phase innerhalb einer Stage in einer StageGroup an. Legen Sie diesen Wert auf das Name-Attribut eines Page-Elements fest.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Seiten

Dieses Element gruppiert die einzelnen Page-Elemente .

Informationen zu Elementen

Tabelle 99 enthält Informationen zum Pages-Element .

Tabelle 99. Pages-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Eine
Übergeordnete Elemente Assistent
Inhalt Page
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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 mit in einem Field-Element an.

Informationen zu Elementen

Tabelle 100 enthält Informationen zum RadioGroup-Element .

Tabelle 100. RadioGroup-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb eines Fields-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Fields
Inhalt Default
Elementattribute

In Tabelle 101 sind die Attribute des RadioGroup-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 101. Attribute und entsprechende Werte für das RadioGroup-Element

Attribut Beschreibung
Locked Gibt an, ob die Gruppe von Optionsfeldern für Benutzereingaben aktiviert ist. Das Attribut kann auf Folgendes festgelegt werden:

- True. Gibt an, dass die Optionsfelder deaktiviert sind und Benutzer kein Optionsfeld in der Gruppe auswählen können.
- False. Gibt an, dass die Optionsfelder aktiviert sind und Benutzer ein Optionsfeld in der Gruppe auswählen können.
Name Gibt den Namen der Optionsgruppe an.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

StageGroup

Dieses Element gibt eine Bereitstellungsphasesgruppe an.

Informationen zu Elementen

Tabelle 102 enthält Informationen zum StageGroup-Element .

Tabelle 102. StageGroup-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb eines StageGroups-Elements
Übergeordnete Elemente StageGroups
Inhalt Stufe
Elementattribute

In Tabelle 103 sind die Attribute des StageGroup-Elements und eine Beschreibung des Attributs aufgeführt.

Tabelle 103. Attribute und entsprechende Werte für das StageGroup-Element

Attribut Beschreibung
DisplayName Gibt den benutzerfreundlichen Namen der Im UDI-Assistenten-Designer angezeigten Phasengruppe an. Dieser Name ist in der Regel aussagekräftiger als das Name-Attribut .
HinwBemerkungeneise

Keine.

Beispiel

Keine.

StageGroups

Dieses Element gruppiert eine Gruppe von Phasengruppen in einer Konfigurationsdatei des UDI-Assistenten.

Informationen zu Elementen

Tabelle 104 enthält Informationen zum StageGroups-Element .

Tabelle 104. StageGroups-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder 1 innerhalb eines Assistentenelements
Übergeordnete Elemente Assistent
Inhalt StageGroup
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

Beispiel

Keine.

Setter

Dieses Element gibt eine Eigenschaftseinstellung für den Wert für eine Eigenschaft an, die in der Property-Eigenschaft benannt ist.

Informationen zu Elementen

Tabelle 105 enthält Informationen zum Setter-Element .

Tabelle 105. Setter-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder mehr innerhalb jedes übergeordneten Elements (dieses Element ist optional.)
Übergeordnete Elemente Data, DataItem, Page, Style, Task, Validator
Inhalt Enthält einen Zeichenfolgenwert im Property-Attribut .
Elementattribute

In Tabelle 106 ist das Attribut des Setter-Elements aufgeführt, und es wird beschrieben.

Tabelle 106. Attribute und entsprechende Werte für das Setter-Element

Attribut Beschreibung
Eigenschaft Gibt den eigenschaftennamen an, der festgelegt wird. Der Eigenschaftsname wird auf den Wert festgelegt, den dieses Attribut in Klammern klammert.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Stufe 1

Dieses Element gibt eine Stage in einer StageGroup an und enthält ein oder mehrere PageRef-Elemente .

Informationen zu Elementen

Tabelle 107 enthält Informationen zum Stage-Element .

Tabelle 107. Stage-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb eines StageGroup-Elements
Übergeordnete Elemente StageGroup
Inhalt PageRef
Elementattribute

In Tabelle 108 sind die Attribute des Stage-Elements aufgeführt und jeweils eine Beschreibung enthalten.

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 Name-Attribut .
Name Gibt den Namen der Phase an. Der Wert dieses Elements wird beim Starten des UDI-Assistenten mit dem Befehlszeilenparameter /stage: name verwendet.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Format

Dieses Element gruppiert die einzelnen Setter-Elemente , die das Aussehen und Verhalten des UDI-Assistenten konfigurieren, einschließlich des Titels oben im Assistenten und des Bannerbilds, das im UDI-Assistenten angezeigt wird.

Informationen zu Elementen

Tabelle 109 enthält Informationen zum Style-Element.

Tabelle 109. Style-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Eine
Übergeordnete Elemente Assistent
Inhalt Setter
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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 im übergeordneten Page-Element angegebenen Seite ausgeführt werden soll.

Informationen zu Elementen

Tabelle 110 enthält Informationen zum Task-Element .

Tabelle 110. Taskelementinformationen

Attribut Wert
Anzahl der Vorkommen Mindestens ein Element innerhalb eines Tasks-Elements
Übergeordnete Elemente Aufgaben
Inhalt ExitCodes, Datei, Setter
Elementattribute

In Tabelle 111 sind die Attribute des Task-Elements aufgeführt und jeweils eine Beschreibung enthalten.

Tabelle 111. Attribute und entsprechende Werte für das Task-Element

Attribut Beschreibung
Dependson 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 Name-Attribut .
Name Gibt den Namen der Aufgabe an. Dieser Name muss eindeutig sein.
Typ Gibt den Tasktyp für den auszuführenden Task an, der in der DLL definiert ist, die den Task enthält.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Aufgaben

Dieses Element gruppiert eine Gruppe von Aufgaben für ein Page-Element .

Informationen zu Elementen

Tabelle 112 enthält Informationen zum Tasks-Element .

Tabelle 112. Tasks-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Null oder 1 innerhalb jedes Page-Elements (Dieses Element ist optional.)
Übergeordnete Elemente Page
Inhalt Aufgabe
Elementattribute

In Tabelle 113 sind die Attribute des Tasks-Elements aufgeführt, die jeweils eine Beschreibung enthalten.

Tabelle 113. Attribute und entsprechende Werte für das Tasks-Element

Attribut Beschreibung
NameTitle Gibt die Beschriftung an, die oben in der Spalte angezeigt wird, die den Namen der Aufgaben auf der entsprechenden Assistentenseite enthält.
StatusTitle Gibt die Beschriftung an, die oben in der Spalte angezeigt wird, die den Status der Aufgaben auf der entsprechenden Assistentenseite enthält.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Validator

Dieses Element gibt ein Validierungssteuerelement für das Feldsteuerelement an, das im übergeordneten Field-Element angegeben ist.

Informationen zu Elementen

Tabelle 114 enthält Informationen zum Validator-Element .

Tabelle 114. Informationen zum Validierungssteuerelementelement

Attribut Wert
Anzahl der Vorkommen Null oder eins innerhalb eines Field-Elements
Übergeordnete Elemente Field
Inhalt Setter
Elementattribute

In Tabelle 115 ist das Attribut des Validator-Elements aufgeführt, und es wird beschrieben.

Tabelle 115. Attribute und entsprechende Werte für das Validierungssteuerelementelement

Attribut Beschreibung
Typ Gibt den Typ für das Validierungssteuerelement an, das in der DLL definiert ist, die das Validierungssteuerelement enthält.
HinwBemerkungeneise

Keine.

Beispiel

Keine.

Assistent

Dieses Element gibt den Stamm für alle anderen Elemente an.

Informationen zu Elementen

Tabelle 116 enthält Informationen zum Wizard-Element .

Tabelle 116. Wizard-Elementinformationen

Attribut Wert
Anzahl der Vorkommen Eine
Übergeordnete Elemente Keine
Inhalt DLLs, Pages, StageGroups, Style
Elementattribute

Dieses Element verfügt über keine Attribute.

HinwBemerkungeneise

Keine.

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