Installation pilotée par l’utilisateur - Guide des développeurs

L’installation pilotée par l’utilisateur (UDI) permet de simplifier le déploiement des systèmes d’exploitation clients Windows®, tels que Windows 8.1, sur des ordinateurs utilisant la fonctionnalité de déploiement de système d’exploitation (OSD) dans Microsoft ® system Center 2012 R2 Configuration Manager. UDI fait partie du Microsoft Deployment Toolkit (MDT).

Introduction

En règle générale, lors du déploiement de systèmes d’exploitation à l’aide de la fonctionnalité OSD, vous devez fournir toutes les informations nécessaires au déploiement du système d’exploitation. Les informations sont configurées dans les fichiers de configuration ou dans les bases de données (telles que le fichier CustomSettings.ini ou la base de données MDT [MDT DB]). Vous devez fournir tous les paramètres de configuration avant de pouvoir lancer le déploiement.

UDI fournit une interface pilotée par l’Assistant qui vous permet de fournir des informations de configuration immédiatement avant d’effectuer le déploiement. Ce comportement vous permet de créer des séquences de tâches OSD génériques, puis de fournir des informations spécifiques à l’ordinateur au moment du déploiement, ce qui offre une plus grande flexibilité dans le processus de déploiement.

Public cible

Ce guide est destiné aux développeurs qui créent des pages d’Assistant personnalisées pour l’Assistant UDI et des éditeurs de pages d’Assistant personnalisés pour le Concepteur de l’Assistant UDI. Ce guide part du principe que vous êtes familiarisé avec le développement d’applications Windows à l’aide de :

  • C++, qui est utilisé pour créer des pages d’Assistant personnalisées

  • Microsoft .NET Framework, qui est utilisé pour créer des éditeurs de pages d’Assistant personnalisés

  • Windows Presentation Foundation (WPF), qui est utilisé pour créer des éditeurs de pages d’Assistant personnalisés

  • Langages pris en charge par WPF, tels que C#, C++ ou Microsoft Visual Basic® .NET, qui sont utilisés pour créer des éditeurs de page d’Assistant personnalisés

À propos de ce guide

Ce guide fournit les informations de référence nécessaires pour vous aider à personnaliser l’UTI pour votre organisation. Ce guide ne traite pas des sujets administratifs ou opérationnels, tels que l’installation de MDT (qui inclut UDI), la configuration d’UDI pour déployer des systèmes d’exploitation et des applications, ou l’exécution de déploiements à l’aide de l’Assistant UDI. Pour plus d’informations sur ces rubriques, consultez les rubriques UDI dans Using the Microsoft Deployment Toolkit, qui est inclus avec MDT.

Vue d’ensemble du développement UDI

Le développement UDI vous permet d’étendre les fonctionnalités fournies par UDI. En règle générale, le développement UDI est requis lorsque vous souhaitez collecter des informations supplémentaires que le processus de déploiement UDI consomme. Ces informations supplémentaires sont généralement enregistrées en tant que variables de séquence de tâches que les étapes de la séquence de tâches dans une séquence de tâches UDI dans Configuration Manager lues.

UDI Architecture

L’objectif principal du développement UDI est de créer des pages d’Assistant personnalisées qui peuvent être affichées dans l’Assistant UDI. En créant des pages d’Assistant personnalisées, vous pouvez étendre les fonctionnalités existantes d’UDI pour répondre aux exigences métier et techniques de votre organisation. Une page d’Assistant personnalisée collecte des informations en plus ou à la place des pages de l’Assistant fournies par UDI.

La figure 1 illustre la relation entre le concepteur de l’Assistant UDI et l’Assistant UDI.

Figure 1. Relation entre l’Assistant UDI et le Concepteur de l’Assistant UDI Figure 1. Relation entre l’Assistant UDI et le Concepteur de l’Assistant UDI

Figure 1. Relation entre l’Assistant UDI et le Concepteur de l’Assistant UDI

Au niveau conceptuel, le développement de l’UDI comprend la création de :

  • Pages personnalisées de l’Assistant. Les pages de l’Assistant sont affichées dans l’Assistant UDI et collectent les informations requises pour terminer le processus de déploiement. Vous créez des pages de l’Assistant à l’aide de C++ dans Microsoft Visual Studio®. Les pages de l’Assistant personnalisées sont implémentées en tant que DLL lues par l’Assistant UDI. Le kit de développement logiciel (SDK) UDI inclut un exemple de création de pages d’Assistant personnalisées.

  • Éditeurs de page de l’Assistant personnalisé. Vous utilisez les éditeurs de page de l’Assistant pour configurer le comportement de votre page d’Assistant personnalisée. Les éditeurs de page personnalisés de l’Assistant sont implémentés en tant que DLL lues par le Concepteur de l’Assistant UDI. Vous créez des éditeurs de page de l’Assistant à l’aide de :

    • WPF version 4.0

    • Microsoft Prism version 4.0

    • Microsoft Unity Application Block (Unity) version 2.1

      MDT inclut tous les assemblys nécessaires à la création d’un éditeur de page d’Assistant personnalisé à utiliser dans le concepteur de l’Assistant UDI. Le Kit de développement logiciel (SDK) UDI inclut un exemple de création d’éditeurs de pages d’Assistant personnalisés.

    En outre, le concepteur d’assistant UDI utilise les fichiers de configuration de l’éditeur de page de l’Assistant pris en charge. Vous créez les fichiers de configuration de l’éditeur de pages de l’Assistant dans le cadre du processus de création de vos pages d’Assistant personnalisées et de vos éditeurs de pages d’Assistant personnalisés. Le concepteur de l’Assistant UDI crée les informations XML nécessaires dans le fichier de configuration de l’Assistant UDI et le fichier .app correspondant.

Préparation de l’environnement de développement UDI

Avant de commencer à créer vos propres pages d’Assistant personnalisées et éditeurs de pages d’Assistant, procédez comme suit pour préparer l’environnement de développement UDI :

  1. Préparez les prérequis de l’environnement de développement UDI, comme décrit dans Préparer les prérequis de l’environnement de développement UDI.

  2. Configurez l’environnement de développement UDI comme décrit dans Configurer l’environnement de développement UDI.

  3. Vérifiez que l’environnement de développement UDI est correctement configuré, comme décrit dans Vérifier l’environnement de développement UDI.

Préparer les prérequis de l’environnement de développement UDI

Pour préparer les prérequis de l’environnement de développement UDI, procédez comme suit :

  1. Préparez les exigences matérielles de l’environnement de développement UDI, comme décrit dans Préparer les prérequis matériels de l’environnement de développement UDI.

  2. Préparez les prérequis logiciels de l’environnement de développement UDI, comme décrit dans Préparer les prérequis logiciels de l’environnement de développement UDI.

Préparer les prérequis matériels de l’environnement de développement UDI

Les conditions matérielles requises pour l’environnement de développement UDI sont les mêmes que celles requises pour l’édition de Microsoft Visual Studio que vous utilisez. Pour plus d’informations sur ces exigences, consultez la configuration système requise pour chaque édition dans la documentation de Visual Studio.

Préparer les prérequis logiciels de l’environnement de développement UDI

L’environnement de développement UDI présente les prérequis logiciels suivants :

  • Tout système d’exploitation Windows pris en charge par Visual Studio 2010 (Windows 7 ou Windows Server® 2008 R2 est recommandé.)

    Vous aurez besoin d’un système d’exploitation Windows qui prend en charge l’architecture du processeur pour laquelle vous souhaitez développer. Vous pouvez effectuer un développement UDI 32 bits et 64 bits à l’aide d’un système d’exploitation 64 bits. Vous effectuez uniquement un développement UDI 32 bits sur des systèmes d’exploitation 32 bits. Pour cette raison, vous devez utiliser un système d’exploitation 64 bits.

    Remarque

    Les versions IntelItanium (IA-64) du système d’exploitation Windows ne sont pas prises en charge pour les environnements de développement UDI.

    Pour plus d’informations sur les systèmes d’exploitation pris en charge par Visual Studio 2010, consultez la configuration système requise pour chaque édition dans la documentation de Visual Studio.

  • Microsoft .NET Framework version 4.0 (requis par Visual Studio 2010)

  • Langage C++ (langage utilisé dans l’extension des pages de l’Assistant UDI)

  • Autres langages pris en charge par WPF, tels que C#, Visual Basic .NET ou C++/Common Language Infrastructure, qui sont utilisés pour étendre les éditeurs de page de l’Assistant UDI Wizard Designer

    Remarque

    L’exemple de code source pour les éditeurs de page de l’Assistant Concepteur d’assistant UDI est écrit en C#. Installez le langage C# si vous souhaitez utiliser l’exemple de code source.

Configurer l’environnement de développement UDI

Une fois que les conditions préalables de l’environnement de développement UDI sont remplies, procédez comme suit pour configurer l’environnement de développement UDI :

  1. Installez Visual Studio 2010.

    Veillez à installer le langage C++ et tout autre langage pris en charge par WPF.

    Remarque

    L’exemple de code source des pages de l’éditeur UDI Wizard Designer est écrit en C#. Installez le langage C# si vous souhaitez utiliser l’exemple de code source.

    Pour plus d’informations sur l’installation de Visual Studio 2010, consultez Installation de Visual Studio.

  2. Installez MDT.

    Pour plus d’informations sur l’installation de MDT, consultez la section « Installation ou mise à niveau vers MDT », dans le document MDT Using the Microsoft Deployment Toolkit.

  3. Dans l’Explorateur Windows, créez local_folder (où local_folder est un dossier situé sur un lecteur local sur l’ordinateur de développement).

  4. Copiez le dossier installation_folder\SDK dans local_folder (où installation_folder est le dossier dans lequel vous avez installé MDT et local_folder est n’importe quel dossier situé sur un lecteur local sur l’ordinateur de développement).

    Vous copiez le dossier du KIT de développement logiciel (SDK) à un autre emplacement, car MDT est installé dans le dossier Program Files, qui ne peut pas être écrit dans sans autorisations élevées. La copie du dossier sdk vers un autre emplacement vous permet de modifier les fichiers dans le dossier sdk sans nécessiter d’autorisations élevées.

  5. Copiez le dossier installation_folder\Templates\Distribution\Tools dans local_folder (où installation_folder est le dossier dans lequel vous avez installé MDT et local_folder est le dossier que vous avez créé précédemment dans le processus).

  6. Renommez le dossier local_folder\Tools en local_folder\OSDSetupWizard(où local_folder est le dossier que vous avez créé précédemment dans le processus).

    Lorsque vous avez terminé, la structure de dossiers sous local_folder doit ressembler à la structure de dossiers illustrée dans la Figure 2 (où local_folder est le dossier que vous avez créé précédemment dans le processus et est indiqué sous la forme UDIDevelopment dans la figure).

    Figure 2. Structure de dossiers pour le développement UDI Figure 2. Structure de dossiers pour le développement UDI

    Figure 2. Structure de dossiers pour le développement UDI

Vérifier l’environnement de développement UDI

Lorsque l’environnement de développement UDI est configuré, vérifiez que l’environnement de développement UDI est correctement configuré en vous assurant que les exemples de projets sont générés correctement dans Visual Studio 2010.

Vérifiez que l’environnement de développement UDI est correctement configuré en déterminant si :

Vérifier que le projet SamplePage se génère correctement

Le projet SamplePage fournit un exemple de création d’une page d’Assistant personnalisée pour l’Assistant UDI. Pour plus d’informations sur le projet SamplePage, consultez Passer en revue la solution Visual Studio SamplePage.

Pour vérifier que le projet SamplePage se génère correctement

  1. Démarrez Visual Studio 2010.

  2. Ouvrez le projet SamplePage.

    Le projet SamplePage réside dans le dossier local_folder\SDK\UDI\SamplePage (où local_folder est le dossier que vous avez créé précédemment dans le processus).

  3. Dans Visual Studio 2010, dans Explorateur de solutions, cliquez avec le bouton droit sur le projet SamplePage, puis cliquez sur Propriétés.

    La boîte de dialogue Pages de propriétés SamplePage s’affiche.

  4. Dans la boîte de dialogue Pages de propriétés SamplePage , accédez à Propriétés de configuration/Débogage.

  5. Dans les propriétés débogage, sous Configuration, sélectionnez Toutes les configurations.

  6. Dans propriétés débogage, sous Commande, tapez $(TargetDir)\OSDSetupWizard.exe.

  7. Dans les propriétés débogage, sous Répertoire de travail, tapez $(TargetDir)..

  8. Dans la boîte de dialogue Pages de propriétés SamplePage , accédez à Propriétés de configuration/Événements de build/Événement post-build.

  9. Dans les propriétés de l’événement post-build, sous Ligne de commande, tapez ce qui suit :

    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. Dans la boîte de dialogue Pages de propriétés SamplePage , cliquez sur OK.

  11. Enregistrez le projet.

  12. Dans le menu Déboguer , cliquez sur Démarrer le débogage.

    La boîte de dialogue Microsoft Visual Studios’affiche, indiquant que la source est obsolète et vous demande si vous souhaitez générer le projet.

  13. Dans la boîte de dialogue Microsoft Visual Studio, cliquez sur Oui.

    La boîte de dialogue Aucune information de débogage s’affiche pour vous informer qu’aucune information de débogage n’est disponible pour OSDSetupWizard.exe.

  14. Dans la boîte de dialogue Aucune information de débogage , cliquez sur Oui.

    L’Assistant UDI s’ouvre avec la page de l’Assistant personnalisé affichée.

  15. Vérifiez que vous pouvez sélectionner une valeur dans Choisir votre emplacement.

  16. Dans le formulaire Assistant avec exemple de page , cliquez sur Annuler.

    La boîte de dialogue Assistant Annulation s’affiche.

  17. Dans la boîte de dialogue Assistant Annulation , cliquez sur Oui.

  18. Fermez Visual Studio 2010.

Vérifier que le projet SampleEditor se génère correctement

Le projet SampleEditor fournit un exemple de création d’un éditeur de page d’Assistant personnalisé pour le concepteur de l’Assistant UDI. Pour plus d’informations sur le projet SampleEditor, consultez Examiner la solution Visual Studio SamplePage.

Pour vérifier que le projet SampleEditor est généré correctement

  1. Démarrez Visual Studio 2010.

  2. Ouvrez le projet SampleEditor.

    Le projet SampleEditor réside dans le dossier local_folder\SDK\UDI\SampleEditor (où local_folder est le dossier que vous avez créé précédemment dans le processus).

  3. Dans Visual Studio 2010, dans Explorateur de solutions, sélectionnez le projet SampleEditor.

  4. Dans le menu Projet , cliquez sur Ajouter une référence.

    La boîte de dialogue Ajouter une référence s’ouvre.

  5. Dans la boîte de dialogue Ajouter une référence , cliquez sur l’onglet Parcourir .

  6. Sous l’onglet Parcourir , accédez à installation_folder\Bin (où installation_folder est le dossier dans lequel vous avez installé MDT). Sélectionnez les fichiers suivants, puis cliquez sur 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

    Remarque

    Vous pouvez sélectionner plusieurs fichiers sous l’onglet Parcourir en maintenant la touche Ctrl enfoncée tout en cliquant sur les fichiers.

  7. Dans Explorateur de solutions, accédez à SampleEditor/References.

  8. Vérifiez qu’aucune des références ne contient d’avertissements ou d’erreurs.

  9. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet SampleEditor, puis cliquez sur Propriétés.

    La boîte de dialogue Pages de propriétés SampleEditor s’affiche.

  10. Dans la boîte de dialogue Pages de propriétés SampleEditor , cliquez sur l’onglet Déboguer .

  11. Sous l’onglet Déboguer , cliquez sur Démarrer le programme externe.

  12. Dans Démarrer le programme externe, tapez installation_folder\Bin\UDIDesigner.exe (où installation_folder est le dossier dans lequel vous avez installé MDT), puis cliquez sur OK.

    Conseil

    Vous pouvez cliquer sur le bouton de sélection (...) pour accéder au dossier et sélectionner UDIDesigner.exe.

  13. Dans le menu Fichier , cliquez sur Enregistrer tout.

  14. Copiez le fichier \SDK\SamplePage\SamplePage.dll.config local_folder dans le dossier installation_folder\Bin\Config (où local_folder est le dossier que vous avez créé sur l’ordinateur de développement précédemment dans le processus de configuration etoù installation_folder est le dossier dans lequel vous avez installé MDT).

  15. Dans Visual Studio 2010, dans le menu Déboguer , cliquez sur Démarrer le débogage.

    Le concepteur de l’Assistant UDI démarre.

  16. Dans le concepteur de l’Assistant UDI, dans le ruban, cliquez sur Ouvrir.

    La boîte de dialogue Ouvrir s’affiche.

  17. Dans la boîte de dialogue Ouvrir , ouvrez le fichier local_folder\SDK\SamplePage\SamplePage\Config.xml (où local_folder est le dossier que vous avez créé sur l’ordinateur de développement précédemment dans le processus de configuration).

    Le fichier Config.xml s’ouvre et le groupe de phases personnalisé s’affiche dans le volet d’informations.

  18. Dans le volet d’informations, cliquez sur l’onglet Configurer .

  19. Passez en revue les informations de configuration de la zone Emplacement , notamment les suivantes :

    • Bouton déverrouillé, avec lequel vous activez ou désactivez la zone Emplacement

    • Zone Valeur par défaut, dans laquelle vous entrez une valeur par défaut à afficher dans la zone Emplacement

    • Nom d’affichage convivial visible dans la page résumé, dans laquelle vous entrez la légende des informations affichées sur la page Résumé

    • Zone de liste Emplacement, qui inclut une liste d’emplacements possibles

  20. Fermez le concepteur de l’Assistant UDI.

  21. Fermez Visual Studio 2010.

Examen des exemples du KIT de développement logiciel (SDK) UDI

Avant de commencer le développement, passez en revue les exemples fournis dans le Kit de développement logiciel (SDK) UDI. Utilisez les informations de ce guide et le code source dans les exemples pour vous aider à créer vos propres pages d’Assistant personnalisé UDI et éditeurs de pages d’Assistant.

Passez en revue les exemples du SDK UDI en examinant les points suivants :

Passer en revue le contenu du dossier sdk

Pendant la configuration de l’environnement de développement UDI, vous avez copié le dossier SDK du dossier dans lequel vous avez installé MDT vers un autre dossier que vous avez créé. Le tableau 1 répertorie les dossiers immédiatement sous le dossier sdk et fournit une brève description de chacun d’eux.

Tableau 1. Dossiers dans le Kit de développement logiciel (SDK) UDI

Folder Ce dossier contient
Comprend Fichiers d’en-tête C++ nécessaires pour créer des pages d’Assistant personnalisées pour l’Assistant UDI
Libs Les fichiers de bibliothèque C++ qui seront liés à votre page personnalisée ; il existe des versions 32 bits et 64 bits des bibliothèques de liens statiques. Note: Les versions Itanium des bibliothèques (IA-64) ne sont pas disponibles.
SampleEditor Un projet Visual Studio pour la création d’un éditeur personnalisé utilisé pour modifier la page SamplePage dans le Concepteur de l’Assistant UDI, qui est écrite en C #
SamplePage Un projet Visual Studio pour la création d’une page d’Assistant UDI personnalisée, qui est écrite en Visual C++

Passer en revue la solution Visual Studio SamplePage

Avant de commencer à créer vos pages d’Assistant personnalisées et les éditeurs de pages de l’Assistant, effectuez les tâches suivantes pour préparer l’environnement de développement UDI :

Passer en revue le cycle de vie des pages de l’Assistant

Une page d’Assistant UDI a des méthodes qui correspondent à chaque étape (ou phase) du cycle de vie de la page. Dans le cadre de la création de votre page d’Assistant personnalisée, vous devez remplacer ces méthodes par votre code. Le tableau 2 répertorie les méthodes que vous devez remplacer et fournit une brève description de chaque méthode, y compris quand utiliser la méthode dans le cycle de vie de la page de l’Assistant.

Tableau 2. Méthodes dans un cycle de vie de page de l’Assistant

Méthode Description
OnWindowCreated Cette méthode est appelée une seule fois, après la création de la fenêtre de la page.

Pour cette méthode, écrivez du code qui initialise la page pour la première fois et ne doit être exécuté qu’une seule fois. Par exemple, utilisez cette méthode pour initialiser des champs ou lire les informations de configuration des éléments Setter dans le fichier de configuration de l’Assistant UDI.
OnWindowShown Cette méthode est appelée chaque fois que la page est affichée (affichée) dans l’Assistant UDI. Il est appelé la première fois que la page est affichée et chaque fois que vous accédez à la page en cliquant sur Suivant ou Précédent dans l’Assistant.

Pour cette méthode, écrivez du code qui prépare l’affichage de la page, par exemple, la lecture de variables de mémoire, de séquence de tâches ou de variables d’environnement, puis la mise à jour de la page en fonction des modifications apportées à ces variables.
OnCommonControlEvent Cette méthode peut être appelée chaque fois que la page de l’Assistant s’affiche et reçoit un message WM_NOTIFY d’un enfant (généralement, les contrôles courants).

Pour cette méthode, écrivez du code qui gère WM_NOTIFY en fonction du message de notification. Par exemple, vous souhaiterez peut-être répondre à des événements à partir d’un contrôle commun, comme répondre à des événements de clic ou de double-clic pour un contrôle TreeView .
OnUnhandledEvent Cette méthode est appelée chaque fois qu’un message de fenêtre non gérée se produit pour votre page de l’Assistant. Cette méthode permet d’intercepter et de gérer ces messages de fenêtre autrement non gérés.

Pour cette méthode, écrivez du code qui gère les messages de fenêtre pertinents pour votre page de l’Assistant. En règle générale, vous n’avez pas besoin de remplacer cette méthode.
OnNextClicked Cette méthode est appelée lorsque vous cliquez sur Suivant dans l’Assistant.

Pour cette méthode, écrivez du code qui effectue les actions nécessaires avant de passer à la page suivante de l’Assistant, par exemple en effectuant une validation qui peut prendre beaucoup de temps. Si la validation échoue, vous pouvez annuler la requête Next et afficher un message.
OnWindowHidden Cette méthode est appelée chaque fois que la page est masquée lorsque la page précédente ou suivante de l’Assistant est affichée.

Pour cette méthode, écrivez du code qui effectue des actions avant que la page ne soit masquée, avant l’affichage d’une autre page. En règle générale, vous n’avez pas besoin de remplacer cette méthode.

Passer en revue l’exemple SamplePage

Passez en revue l’exemple SamplePage à l’aide de la liste suivante, qui représente la séquence d’événements pendant le cycle de vie de la page de l’Assistant de l’exemple SamplePage :

  1. L’Assistant UDI, OSDSetupWizard.exe, lit les informations de configuration du fichier de configuration de l’Assistant UDI dans l’exemple (fichier Config.xml) comme décrit dans Étape 1 : L’Assistant UDI (OSDSetupWizard.exe) lit le fichier Config.xml.

  2. L’Assistant UDI charge les DLL requises pour chaque page de l’Assistant répertoriée dans le fichier de configuration de l’Assistant UDI, comme décrit dans Étape 2 : L’Assistant UDI charge la DLL pour la page De l’Assistant personnalisé.

  3. L’Assistant UDI affiche la page de l’Assistant personnalisé et autorise l’interaction de contrôle souhaitée, comme décrit dans Étape 3 : L’Assistant UDI affiche la page De l’Assistant personnalisé.

  4. Une fois que la page de l’Assistant personnalisée a collecté les informations, effectuez les tâches nécessaires avant de cliquer sur Suivant pour passer à l’Assistant suivant, comme décrit dans Étape 4 : Le bouton Suivant est cliqué dans la page De l’Assistant personnalisé.

Étape 1 : L’Assistant UDI (OSDSetupWizard.exe) lit le fichier Config.xml

Lorsque l’Assistant UDI (OSDSetupWizard.exe) démarre, il lit par défaut le fichier de configuration de l’Assistant UDI, qui est le fichier UDIWizard_Config.xml, le fichier de configuration principal de l’Assistant UDI.

Remarque

L’exemple utilise le fichier Config.xml comme fichier de configuration. Dans MDT, le fichier de configuration par défaut est le fichier UDIWizard_Config.xml, qui se trouve dans le dossier Scripts du package MDT Files pour la configuration.

Vous pouvez remplacer le fichier de configuration par défaut utilisé par l’Assistant UDI en modifiant l’étape de séquence de tâches de l’Assistant UDI pour utiliser le paramètre /definition . Pour plus d’informations sur le remplacement du fichier de configuration par défaut utilisé par l’Assistant UDI, consultez « Remplacer le fichier de configuration utilisé par l’Assistant UDI ».

Les éléments de niveau supérieur dans le fichier Config.xml sont les éléments suivants :

  • Élément DLLs

  • Élément Style

  • Élément Pages

  • Élément StageGroups

    Pour plus d’informations sur le schéma du fichier de configuration de l’Assistant UDI et sur chacun de ces éléments, consultez Informations de référence sur le schéma du fichier de configuration de l’Assistant UDI.

    L’Assistant UDI analyse l’élément DLLs à la recherche des fichiers .dll à charger. Dans l’exemple, deux fichiers .dll sont répertoriés : SamplePage.dll et SharedPages.dll. Ces fichiers .dll doivent résider dans le même dossier que OSDSetupWizard.exe, le dossier Tools\platform (où platform est x86 pour la version 32 bits ou x64 pour la version 64 bits).

    L’Assistant UDI analyse l’élément Pages à la recherche des pages définies. Dans l’exemple, deux pages sont définies : Custom et SummaryPage. L’attribut Type de l’élément Page est défini dans le fichier PageClassIDs.h et définit de manière unique le type de votre page personnalisée.

    Dans l’exemple, le type défini est Microsoft. SamplePage.LocationPage. Pour votre page personnalisée, remplacez ce qui suit pour éviter tout conflit potentiel avec d’autres pages que vous pourriez créer à l’avenir :

  • Nom de votre organisation à la place de Microsoft.

  • Nom de votre projet à la place de SamplePage.

  • Nom de la page de l’Assistant personnalisé à la place de LocationPage.

Étape 2 : L’Assistant UDI charge la DLL pour la page De l’Assistant personnalisé

Lorsque l’Assistant UDI charge votre DLL, il appelle la fonction RegisterFactories , qui doit être implémentée dans votre fichier .dll. Dans l’exemple, cette fonction est implémentée dans le fichier dllmain.ccp. Chaque page de l’Assistant que vous créez doit implémenter la fonction RegisterFactories .

La fonction RegisterFactories est utilisée pour inscrire la classe de fabrique de votre page d’Assistant auprès du registre de fabrique de classes de l’Assistant UDI. Les fabriques de classes sont des classes qui peuvent créer une instance d’une autre classe. La fonction RegisterFactories crée une nouvelle instance d’une classe de fabrique et transmet cette classe au registre de fabrique de classes pour l’Assistant UDI, ce qui rend cette classe de fabrique disponible pour l’Assistant. L’Assistant UDI recherche une classe de fabrique inscrite avec un ID qui correspond à l’attribut Type de l’élément Page de la page de l’Assistant personnalisé.

Dans l’exemple, l’ID est défini comme ID_Location dans le fichier PageClassIds.h en tant que Microsoft. SamplePage.LocationPage, qui correspond à l’attribut Type de l’élément Page dans le fichier Config.xml. ID_Location est passé en tant que paramètre dans la fonction RegisterFactories implémentée dans le fichier dllmain.ccp.

Vous pouvez créer une fonction à l’aide du modèle de fonction Register_name pour simplifier la création d’une nouvelle instance de fabrique et inscrire l’instance nouvellement créée. La valeur de nom fournie à l’aide du modèle de fonction Register doit implémenter l’interface iClassFactory . La classe ClassFactoryImpl gère la plupart des détails de l’implémentation d’une fabrique de classes.

Vous pouvez également utiliser la fonction RegisterFactories pour inscrire les types de tâches et les types de validateurs. Pour plus d'informations, consultez les articles suivants :

Remarque

L’exemple contient et n’inscrit qu’une seule page de l’Assistant personnalisé. L’exemple n’inclut pas de tâches ou de validateurs personnalisés et n’inscrit donc pas de tâches ou de validateurs personnalisés.

Étape 3 : L’Assistant UDI affiche la page De l’Assistant personnalisé

La page de l’Assistant personnalisé dans l’exemple est définie dans le fichier LocationPage.cpp. Les pages de l’Assistant sont dérivées de classes de modèle qui fournissent une grande partie des fonctionnalités d’une page. Toutes les pages de l’Assistant doivent dériver de la classe de modèle WizardPageImpl, qui implémente l’interface IWizardPage. Chaque page de l’Assistant peut implémenter d’autres classes de modèle facultatives et interfaces correspondantes en fonction des besoins de la page.

La classe de modèle WizardPageImpl possède plusieurs interfaces utiles qui peuvent vous aider à écrire des pages d’Assistant personnalisées. Implémentez la classe de modèle WizardPageImpl comme classe de base pour votre page d’Assistant personnalisée.

Pour obtenir la liste des disponibles :

  • Classes de modèle pour les pages de l’Assistant, consultez Classes d’assistance de page de l’Assistant

  • Interfaces pour les classes de modèle de page de l’Assistant, consultez Interfaces de page de l’Assistant

    La page de l’Assistant personnalisé dans l’exemple est dérivée de la classe de modèle WizardPageImpl et implémente l’interface IWizardPage. En outre, la page de l’Assistant personnalisé implémente l’interface IFieldCallback . Ces deux éléments sont implémentés dans le fichier LocationPage.cpp.

    L’exemple de page de l’Assistant personnalisé remplace les méthodes suivantes :

  • OnWindowCreated. La méthode OnWindowCreated dans l’exemple de page de l’Assistant appelle les méthodes suivantes :

    • AddField. Cette méthode lie le contrôle de zone de IDC_COMBO_LOCATION dans la ressource IDD_LOCATION_PAGE à l’élément Data nommé Location dans le fichier Config.xml.

      En plus de la méthode AddField , vous pouvez utiliser les méthodes AddRadioGroup et AddToGroup pour prendre en charge d’autres contrôles et comportements.

      Remarque

      Veillez à appeler la méthode AddField, AddRadioGroup ou AddToGroup avant d’appeler la méthode InitFields .

    • InitFields. Utilisez cette méthode pour initialiser les champs (contrôles) que vous avez ajoutés au formulaire. Le pointeur de la page est un paramètre. Dans l’exemple , ce pointeur est passé, qui fait référence à la page active.

      Remarque

      Pour prendre en charge l’utilisation de ce pointeur, vous devez implémenter l’interface IFieldCallback en plus des interfaces prises en charge par la classe de modèle WizardPageImpl .

      L’interface IFieldCallback appelle la méthode SetFieldDefault , qui est utilisée pour définir les valeurs par défaut pour les contrôles autres que les contrôles de zone de texte et de case à cocher. Dans l’exemple, la méthode SetFieldDefault définit l’index initial du contrôle de zone de liste déroulante en fonction de la valeur par défaut spécifiée dans l’élément Default pour l’élément Field dans le fichier Config.xml.

      La méthode OnWindowCreated configure le contrôleur de formulaire à l’aide de l’interface IFormController. Pour plus d’informations sur la configuration du contrôleur de formulaire, consultez Configuration du formulaire.

  • InitLocations. Cette méthode remplit la zone de liste déroulante à partir de la liste des emplacements dans le fichier Config.xml. L’élément Data et les éléments DataItem enfants du fichier Confg.xml fournissent la liste des valeurs possibles.

  • OnNextClicked. Cette méthode effectue les tâches suivantes :

    • Mises à jour la variable de séquence de tâches TSLocation avec la valeur sélectionnée dans la zone de liste déroulante à l’aide de la méthode SaveFields

    • Ajoute des informations qui seront affichées dans la page Résumé à l’aide de la méthode SaveFields

Étape 4 : Cliquez sur le bouton Suivant dans la page de l’Assistant personnalisé

Lorsque l’utilisateur termine les champs de la page de l’Assistant personnalisé, il clique sur Suivant, ce qui appelle la méthode OnNextClicked . La méthode OnNextClicked effectue toutes les tâches nécessaires avant de passer à la page suivante de l’Assistant, telles que l’enregistrement des modifications de configuration apportées sur la page de l’Assistant personnalisé.

Pour l’exemple de page d’Assistant personnalisé, le remplacement de la méthode OnNextClicked est implémenté dans le fichier LocationPage.ccp. Dans la méthode OnNextClicked de l’exemple de page d’Assistant personnalisé, les méthodes suivantes sont appelées :

  1. InitSection. Cette méthode initialise l’en-tête (légende d’étiquette) pour les données récapitulatives affichées dans la page Résumé . En règle générale, vous pouvez définir cette valeur à l’aide de la fonction DisplayName(). Les données associées à cette légende sont enregistrées à l’aide de la méthode SaveFields .

  2. SaveFields. Cette méthode enregistre les valeurs de champ dans les variables de séquence de tâches et dans les données affichées dans la page Résumé .

Passer en revue la solution Visual Studio SampleEditor

Avant de commencer à créer vos propres pages d’Assistant personnalisées et éditeurs de pages d’Assistant, procédez comme suit pour préparer l’environnement de développement UDI :

Passer en revue l’architecture du concepteur de l’Assistant UDI

Le concepteur d’assistant UDI a été développé à l’aide de WPF, Prism et Unity. Le concepteur UDI est utilisé pour modifier le fichier de configuration de l’Assistant UDI (UDIWizard_Config.xml), que l’Assistant UDI (OSDSetupWizard.exe) lit au moment de l’exécution. L’élément Pages dans le fichier de configuration de l’Assistant UDI contient une liste de pages qui a un élément Page distinct pour chaque page de l’Assistant.

Lorsque vous modifiez les paramètres de configuration d’une page d’Assistant, le concepteur de l’Assistant UDI charge l’éditeur de page personnalisé qui correspond au type de page de l’Assistant. Les éditeurs de page personnalisés de l’Assistant sont développés en tant que contrôles utilisateur WPF. Les pages d’éditeur de page de l’Assistant personnalisées utilisent le modèle de conception Model–View–ViewModel (MVVM) pour WPF.

Le modèle de conception MVVM permet de séparer l’interface utilisateur (interface utilisateur; présentation) des données présentées. Les données sont une façade sur l’élément Page dans le fichier de configuration de l’Assistant UDI (fichier Config.xml dans l’exemple), accessible à l’aide de la propriété CurrentPage de l’interface IDataService .

Le concepteur de l’Assistant UDI utilise DependencyAttribute pour obtenir l’accès à la classe DataService en fonction de l’infrastructure d’injection de dépendances dans Unity. Pour plus d’informations sur l’infrastructure d’interjection des dépendances dans Unity, consultez Inject Some Life in Your Applications - Getting to Know the Unity Application Block.

Examiner les composants configurables d’une page de l’Assistant UDI

Lorsque vous créez votre page d’Assistant personnalisée, certains paramètres de configuration peuvent être définis dans le code et ne peuvent pas être modifiés une fois que vous avez compilé la page. Toutefois, pour les autres paramètres de configuration, vous devez autoriser la modification de ces paramètres de configuration à l’aide du concepteur de l’Assistant UDI.

En règle générale, les paramètres de configuration que vous souhaitez configurer à l’aide du concepteur d’Assistant UDI sont enregistrés dans le fichier de configuration de l’Assistant UDI (le fichier Config.xml dans l’exemple). Toutefois, vous pouvez également créer votre propre fichier de configuration distinct, si nécessaire. Un exemple d’utilisation d’un fichier de configuration distinct est le fichier UDIWizard_Config.xml.app, que la tâche de découverte d’applications et le type de page de l’Assistant ApplicationPage utilisent.

Voici une liste des paramètres de configuration classiques que vous pouvez gérer à l’aide du concepteur de l’Assistant UDI :

  • Champ. Les champs d’utilisation permettent aux utilisateurs de fournir une entrée. Les champs apparaissent sous forme d’éléments Field dans le fichier de configuration de l’Assistant UDI (UDIWizard_Config.xml), qui contient les paramètres de configuration de chaque champ. L’éditeur de page de l’Assistant correspondant doit fournir une méthode pour modifier les paramètres de configuration du champ à l’aide de FieldElementControl.

  • Propriétés : Les setters aident à créer des propriétés pour les entités de la page, telles que les pages de l’élément Page , les champs de l’élément Field ou les données dans les éléments Data ou DataItem . Vous configurez les propriétés dans les éléments Setter . Ajoutez un élément Setter distinct pour chaque propriété que vous souhaitez définir. Vous modifiez les propriétés à l’aide de SetterControl et configurez d’autres éléments Setter à l’aide d’autres contrôles.

  • Données. Les données sont utilisées pour stocker des informations destinées à être utilisées par la page de l’Assistant et d’autres composants. Vous pouvez définir des données pour des pages ou des champs à l’aide des éléments Data ou DataItem . Les données peuvent être définies dans une structure plate ou hiérarchique par le biais de l’utilisation appropriée des éléments Data ou DataItem . L'Config.xml dans l’exemple du Kit de développement logiciel (SDK) montre comment créer des structures de données plates.

    L’éditeur de page de l’Assistant personnalisé que vous créez doit être en mesure de gérer ces paramètres de configuration.

Examiner l’exemple EditorPage

L’exemple EditorPage permet de configurer les paramètres de configuration de la page de l’Assistant SamplePage dans le fichier de configuration de l’Assistant UDI. L’exemple EditorPage contient les principaux composants suivants :

  • Interface utilisateur pour configurer les paramètres de zone de liste déroulante Emplacement

  • Interface utilisateur permettant d’ajouter ou de modifier un emplacement dans la liste des emplacements possibles, qui sont affichés dans la zone de liste déroulante Emplacement

  • Les paramètres de configuration sont lus et enregistrés dans le fichier de configuration de l’Assistant UDI

  • Code de prise en charge pour les autres composants

    Passez en revue l’exemple EditorPage dans Visual Studio en effectuant les étapes suivantes :

  1. Passez en revue la façon dont l’éditeur de page de l’Assistant SampleEditor est chargé et initialisé dans le concepteur de l’Assistant UDI, comme décrit dans Vérification du chargement et de l’initialisation de l’éditeur de page de l’Assistant Révision.

  2. Passez en revue l’interface utilisateur utilisée pour modifier la zone de liste déroulante Emplacement dans les fichiers LocationPageEditor.xaml et LocationPageEditor.xaml.cs, comme décrit dans Examiner l’interface utilisateur utilisée pour configurer la zone de liste déroulante Emplacement.

  3. Passez en revue l’interface utilisateur utilisée pour ajouter ou modifier des emplacements à la liste dans les fichiers AddEditLocationView.xaml et AddEditLocationView.xaml.cs, comme décrit dans Examiner l’interface utilisateur utilisée pour modifier la liste des emplacements possibles.

  4. Passez en revue le code utilisé pour gérer les informations de configuration enregistrées dans le fichier de configuration de l’Assistant UDI, comme décrit dans Vérifier le code utilisé pour gérer les informations de configuration.

Vérification du chargement et de l’initialisation de l’éditeur de page de l’Assistant

Les éditeurs de page personnalisés de l’Assistant sont chargés selon les besoins du concepteur de l’Assistant UDI. Les fichiers de configuration UDI Wizard Designer sont chargés au démarrage de l’UDI Wizard Designer. Le concepteur de l’Assistant UDI analyse le dossier install_folder\Bin\Config (où install_folder est le nom du dossier où MDT est installé) à la recherche des fichiers qui ont une extension de fichier .config.

Pendant la configuration de l’environnement de développement UDI, vous avez copié le fichier SamplePage.dll.confg dans le dossier install_folder\Bin\Config. Lorsque vous démarrez le concepteur de l’Assistant UDI, le fichier SamplePage.dll.confg est trouvé et chargé.

Le concepteur de l’Assistant UDI utilise les attributs suivants de l’élément Page dans le fichier SamplePage.dll.confg pour charger et initialiser l’exemple EditorPage :

  • DesignerAssembly. Cet attribut détermine le nom de la DLL à charger. Cette DLL doit être placée dans le même dossier que le fichier UDIDesigner.exe, qui est le dossier install_folder\Bin (où install_folder est le nom du dossier dans lequel MDT est installé).

  • DesignerType. Cet attribut est le Microsoft nom de type .NET de la classe qui contient le contrôle utilisateur WPF.

  • Tapez. Utilisez cet attribut pour configurer le type de page de la page de l’Assistant personnalisé, que l’Assistant UDI charge. Le concepteur de l’Assistant UDI utilise cet attribut pour localiser l’élément Page approprié dans le fichier de configuration de l’Assistant UDI.

  • Dll. Utilisez cet attribut pour configurer l’élément DLL dans le fichier de configuration de l’Assistant UDI, créé par le Concepteur de l’Assistant UDI.

  • Description. Utilisez cet attribut pour fournir des informations sur l’éditeur de page de l’Assistant. La valeur de cet attribut est affichée dans la boîte de dialogue Ajouter une nouvelle page du concepteur de l’Assistant UDI, qui est utilisée pour ajouter la page de l’Assistant à la « Bibliothèque de pages ».

  • DisplayName. Utilisez cet attribut pour fournir le nom de la page de l’Assistant personnalisé qui s’affiche dans le concepteur de l’Assistant UDI. La valeur de cet attribut est affichée dans la boîte de dialogue Ajouter une nouvelle page du concepteur de l’Assistant UDI, qui est utilisée pour ajouter la page de l’Assistant à la « Bibliothèque de pages ».

    Dans l’exemple, le type de la page de l’Assistant personnalisé SamplePage est Microsoft. SamplePage.LocationPage, qui est enregistré dans le fichier Config.xml. Le fichier Config.xml se trouve dans le dossier local_folder\SDK\SamplePage\SamplePage vers (où local_folder est le dossier que vous avez créé sur l’ordinateur de développement précédemment dans le processus de configuration).

Passez en revue l’interface utilisateur utilisée pour configurer la zone de liste déroulante Emplacement

Lorsque l’éditeur de page de l’Assistant est chargé et initialisé, l’éditeur de page de l’Assistant SampleEditor est chargé lorsqu’une page de type Microsoft. SamplePage.LocationPage est modifié. L’interface utilisateur de l’éditeur de page est stockée dans le fichier LocationPageEditor.xaml.

Si vous examinez l’interface utilisateur sous l’onglet Création et le code sous l’onglet XAML , vous pouvez voir la relation entre l’interface utilisateur graphique et les éléments et attributs dans le langage XAML (Extensible Application Markup Language).

Par exemple, si vous passez en revue l’élément Controls:FieldElementControl dans le code XAML, vous pouvez voir comment cela est lié à la disposition de l’interface utilisateur correspondante. Utilisez l’élément Controls:FieldElementControl pour définir le contrôle FieldElementControl .

Les paramètres de liaison dans le fichier XAML lient les champs de l’éditeur d’exemple de page avec les informations contenues dans le fichier de configuration de l’Assistant UDI. Par exemple, le code suivant lie la zone de texte Valeur par défaut à l’élément Default dans le fichier de configuration de l’Assistant UDI (Config.xml dans l’exemple) :

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

Pour plus d’informations, consultez Guide pratique pour rendre des données disponibles pour la liaison en XAML.

Utilisez l’élément Views:CollectionTControl.ColumnCollectionView dans le code XAML pour modifier la liste des emplacements disponibles en mode Grille. Vous utilisez le contrôle CollectionTControl pour afficher l’affichage grille et lier l’affichage grille à l’élément Data portant le nom Location dans le fichier de configuration UDI.

Passer en revue l’interface utilisateur utilisée pour modifier la liste des emplacements possibles

L’interface utilisateur permettant de modifier la liste des emplacements possibles se compose des éléments suivants :

Passer en revue le menu contextuel et les boutons du ruban pour modifier la liste des emplacements

Lorsque vous cliquez avec le bouton droit dans la zone de liste qui contient la liste des emplacements, un menu contextuel s’affiche. Le ruban comporte des boutons correspondants qui vous permettent d’effectuer les mêmes tâches. L’élément de contrôle Views:CollectionsTControl dans le fichier LocationPageEditor.xaml définit les méthodes appelées en fonction de l’action effectuée et des propriétés que vous définissez comme suit :

  • SelectedItem. Cette propriété liée aux données est activée lorsque l’utilisateur sélectionne un élément dans la liste. Cette propriété est liée à la propriété CurrentLocation dans le modèle d’affichage, qui se trouve dans le fichier LocationPageEditorViewModel.cs et utilisée par le contrôle CollectionTControl pour transmettre l’élément sélectionné lorsque vous modifiez ou supprimez un élément existant.

  • AddItemAction. Cette action est effectuée lorsque l’utilisateur clique sur l’option Ajouter un élément dans le menu contextuel ou sur les boutons correspondants du ruban. Il existe une liaison de données à une propriété dans le modèle de vue qui retourne l’objet AddLocationAction . Cet objet est la méthode AddLocationCallback , située dans le fichier LocationPageEditorViewModel.cs, et affiche la boîte de dialogue dans le fichier AddEditLocationView.xaml.

  • EditItemAction. Cette action est effectuée lorsque l’utilisateur clique sur l’option Modifier l’élément dans le menu contextuel. Il existe une liaison de données à une propriété dans le modèle de vue qui retourne l’objet EditLocationAction . Cet objet est la méthode EditLocationCallback , située dans le fichier LocationPageEditorViewModel.cs, et affiche la boîte de dialogue dans le fichier AddEditLocationView.xaml.

  • RemoveAction. Cette action est effectuée lorsque l’utilisateur clique sur l’option Supprimer l’élément dans le menu contextuel. Il existe une liaison de données à une propriété dans le modèle de vue qui retourne l’objet RemoveAction . Cet objet est la méthode EditLocationCallback , située dans le fichier LocationPageEditorViewModel.cs, et affiche un message confirmant la suppression de l’emplacement.

Passer en revue la boîte de dialogue Pour ajouter ou modifier des emplacements

Si vous ajoutez un nouvel emplacement à la liste des emplacements ou modifiez un emplacement existant, un message qui se trouve dans le fichier AddEditLocationView.xaml s’affiche. Le message s’affiche à l’aide de la méthode de fenêtre ShowDialogWindow dans le fichier LocationPageEditorViewModel.cs.

L’interface utilisateur dans le fichier AddEditLocationView.xaml se compose des éléments suivants :

  • Une trame de boîte de dialogue nommée DialogFrame, qui inclut les éléments suivants :

    • Titre que vous configurez à l’aide de l’attribut DialogTitle du cadre de dialogue

    • Un bouton OK , qui définit l’état de retour comme pour la propriété Approved sur True (L’état de retour est vérifié dans la méthode AddLocationCallback dans le fichier LocationPageEditorViewModel.cs pour déterminer si l’utilisateur a cliqué sur OK.)

    • Un bouton Annuler , qui définit l’état de retour comme pour la propriété Approved sur False (L’état de retour est vérifié dans la méthode AddLocationCallback dans le fichier LocationPageEditorViewModel.cs pour déterminer si l’utilisateur a cliqué sur Annuler.)

  • Élément WPF qui contient :

    • Une étiquette, que vous configurez à l’aide de l’attribut Content

    • Zone de texte liée à l’élément Data portant le nom Location dans le fichier de configuration UDI (fichier Config.xml dans l’exemple)

Passer en revue le code utilisé pour gérer les informations de configuration

Les informations de configuration de votre page d’Assistant personnalisée sont stockées dans le fichier de configuration de l’Assistant UDI, qui est le :

  • Config.xml fichier dans l’exemple fourni avec le SDK UDI (ce fichier contient uniquement les paramètres de configuration de l’exemple.)

  • UDIWizard_Config.xml fichier fourni avec MDT, stocké dans le dossier installation_folder\Templates\Distribution\Scripts (où installation_folder est le dossier dans lequel vous avez installé MDT) ; ce fichier contient les paramètres de configuration de toutes les pages et étapes de l’Assistant intégré

    Dans l’exemple SampleEditor, la routine Locations permet de gérer les informations de configuration et se trouve dans le fichier LocationPageEditorViewModel.cs. La routine Emplacements renvoie une liste des emplacements à partir du fichier de configuration de l’Assistant UDI. Plus précisément, la liste retournée contient un élément pour chaque élément DataItem dans le fichier de configuration de l’Assistant UDI.

Création de pages de l’Assistant UDI personnalisées

Le processus général de création de pages d’Assistant UDI personnalisées est le suivant :

  1. Créez une copie de la solution SamplePage comme point de départ.

  2. Placez les contrôles (champs) souhaités sur le formulaire.

  3. Écrivez du code pour effectuer les tâches appropriées lors du chargement de la page de l’Assistant (remplacements pour la méthode OnWindowCreated ), notamment les étapes suivantes :

    1. Initialisez le formulaire.

    2. Lire les variables de mémoire, les variables de séquence de tâches, les variables d’environnement ou les informations de fichier XML (telles que les propriétés Setter ).

  4. Écrivez n’importe quel code pour effectuer les tâches appropriées lorsque la page est affichée (remplacements pour la méthode OnWindowShown ), y compris les étapes suivantes :

    1. Activez ou désactivez les contrôles basés sur les informations lues lors du chargement de la page à l’étape 3.

    2. Mettez à jour les contrôles en fonction des informations lues lors du chargement de la page à l’étape 3, par exemple la population des contrôles en fonction des informations lues.

  5. Écrivez n’importe quel code pour effectuer les tâches appropriées pendant que l’utilisateur interagit avec la page de l’Assistant.

  6. Écrivez du code pour effectuer les tâches appropriées lorsque l’utilisateur clique sur Suivant dans l’Assistant UDI (remplacements pour la méthode OnNextClicked ), y compris les étapes suivantes :

    1. Mettez à jour les variables de mémoire, les variables de séquence de tâches, les variables d’environnement ou les informations de fichier XML.

    2. Mettez à jour les informations de la page de résumé (si elles ne sont pas effectuées par les champs de la page).

  7. Générez la solution.

    Vérifiez que la version de la DLL que vous créez est la même plateforme de processeur que l’installation de MDT, en particulier la plateforme de processeur pour l’environnement de préinstallation Windows (Windows PE). L’Assistant UDI peut s’exécuter dans :

    • Système d’exploitation existant sur l’ordinateur cible. Vous pouvez exécuter des versions 32 bits de votre page d’Assistant sur des systèmes d’exploitation Windows 32 bits ou 64 bits. Toutefois, vous pouvez uniquement exécuter des versions 64 bits de votre page d’Assistant sur les systèmes d’exploitation Windows 64 bits.

    • Windows PE sur l’ordinateur cible. Windows PE ne prend pas en charge l’exécution d’applications 32 bits sur une version 64 bits de Windows PE. Par conséquent, vous devez avoir créé une version pour votre page d’Assistant pour chaque architecture de processeur de Windows PE que vous envisagez d’utiliser.

  8. Copiez la DLL de la page de votre Assistant personnalisé dans installation_folder\Templates\Distribution\Tools\ platform dossier (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateformeest x86 pour la version 32 bits ou x64 pour la version 64 bits).

  9. Suivez les étapes de création d’un éditeur de page personnalisé.

Création d’éditeurs de page de l’Assistant personnalisé

Le processus général de création d’éditeurs de pages de l’Assistant UDI personnalisé est le suivant :

  1. Créez une copie de la solution SampleEditor comme point de départ.

  2. Créez l’interface utilisateur de l’éditeur de page principale dans un fichier .xaml.

  3. Ajoutez des instances du contrôle FieldElementControl comme requis par la page de l’Assistant à configurer (si nécessaire).

  4. Ajoutez des instances du contrôle SetterControl comme requis par la page de l’Assistant à configurer (si nécessaire).

  5. Ajoutez des instances du contrôle CollectionTControl comme requis par la page de l’Assistant à configurer (si nécessaire).

  6. Ajoutez l’interface IDataService .

  7. Écrivez le code approprié pour mettre à jour le fichier de configuration de l’Assistant UDI en fonction des paramètres de configuration à configurer à l’aide de votre éditeur de page d’Assistant personnalisé.

  8. Créez des boîtes de dialogue enfants dans un fichier .xaml et appelez-les à partir de l’éditeur de page principal à l’aide de l’interface IMessageBoxService comme requis par la page de l’Assistant à configurer.

  9. Ajoutez les interfaces appropriées au ruban du concepteur de l’Assistant UDI en fonction des exigences de la page de l’Assistant à configurer.

  10. Générez la solution.

    Remarque

    Vérifiez que la version de la DLL que vous créez est la même plateforme de processeur que l’installation de MDT. Par exemple, si vous installez la version 64 bits de MDT, générez une version 64 bits de votre éditeur de page personnalisé.

  11. Créez un fichier de configuration UDI Wizard Designer pour charger les DLL nécessaires et mapper l’éditeur de page de l’Assistant avec la page de l’Assistant correspondante (le fichier SamplePage.dll.config dans l’exemple).

    Pour plus d’informations sur les éléments requis pour effectuer le mappage entre la page de l’Assistant et l’éditeur de page de l’Assistant, consultez l’élément DesignerMappings, les éléments enfants et les attributs correspondants.

  12. Copiez le fichier de configuration UDI Wizard Designer que vous avez créé à l’étape précédente dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé la version MDT).

  13. Copiez la DLL de votre éditeur de page d’Assistant personnalisé dans le dossier installation_folder\Bin (où installation_folder est le dossier dans lequel vous avez installé MDT).

Création de tâches UDI personnalisées

Les tâches UDI sont des DLL écrites en C++ qui implémentent l’interface ITask. Vous inscrivez la DLL auprès de la bibliothèque de tâches UDI Wizard Designer en créant un fichier de configuration UDI Wizard Designer (fichier .config) et en le plaçant dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé MDT).

Remarque

Vous pouvez créer une DLL qui contient les pages, les tâches et les validateurs de l’Assistant dans le même fichier .dll. Vous pouvez également créer un seul fichier de configuration UDI Wizard Designer (.config) qui contient les paramètres de configuration des pages, tâches et validateurs de l’Assistant dans la DLL.

Pour créer des tâches UDI personnalisées

  1. Écrivez du code qui implémente l’interface ITask et les méthodes suivantes :

    • Init. Cette méthode est appelée pour initialiser votre tâche.

    • Exécutez. Cette méthode est appelée pour exécuter votre tâche.

  2. Écrivez du code qui inscrit la fabrique de classes de tâches personnalisée auprès du registre de fabrique.

  3. Créez la solution pour votre tâche personnalisée.

    Remarque

    Vérifiez que la version de la DLL que vous créez est la même plateforme de processeur que l’installation de MDT. Par exemple, si vous installez la version 64 bits de MDT, générez une version 64 bits de votre tâche UDI personnalisée.

  4. Créez un élément Task sous l’élément TaskLibrary dans le fichier de configuration UDI Wizard Designer, comme dans l’extrait suivant :

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

    Remarque

    Tous les éléments Task doivent inclure le paramètre BitmapFilename . Spécifiez tous les autres paramètres requis par la tâche. Par exemple, dans l’extrait précédent, le paramètre log est utilisé pour spécifier un paramètre pour l’emplacement d’un fichier journal.

  5. Copiez le fichier de configuration UDI Wizard Designer créé à l’étape précédente dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé MDT).

  6. Copiez la DLL de votre tâche personnalisée dans le dossier installation_folder\Templates\Distribution\Tools\ platform (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateformeest x86 pour la version 32 bits ou x64 pour la version 64 bits).

Création de validateurs UDI personnalisés

Les validateurs UDI sont des DLL écrites en C++ qui implémentent l’interface IValidator . Vous inscrivez la DLL auprès de la bibliothèque de validateur UDI Wizard Designer en créant un fichier de configuration UDI Wizard Designer (fichier .config) et en le plaçant dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé MDT).

Pour créer des validateurs UDI personnalisés

  1. Écrivez du code qui crée une sous-classe de la classe BaseValidator et implémente les méthodes suivantes :

    • Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Le contrôleur de formulaire appelle le membre Init pour initialiser le validateur. Cette méthode doit appeler la méthode Init pour la classe BaseValidator . Il lit généralement toutes les propriétés définies pour le validateur à partir du fichier de configuration de l’Assistant UDI. Par exemple, le validateur InvalidCharactersValidator récupère la valeur de la propriété InvalidChars à l’aide de cette méthode.

    • IsValid. Le contrôleur de formulaire appelle cette méthode pour voir si le contrôle contient du texte valide. Voici un exemple de méthode IsValid pour un validateur qui vérifie que le champ n’est pas vide :

      BOOL IsValid(LPBSTR pMessage)  
      {  
          __super::IsValid(pMessage);  
      
          _bstr_t text;  
          m_pText->GetText(text.GetAddress());  
          return (text.length() > 0);  
      }  
      
    • Init(IControl *pControl, message LPCTSTR). Le contrôleur de formulaire appelle ce membre pour chaque séquence de touches et d’autres événements afin que le validateur puisse valider le contenu du contrôle et les messages mis à jour en bas de la page de l’Assistant (ou les effacer).

      En règle générale, il s’agit des seules méthodes que vous devez remplacer. Toutefois, selon le validateur, vous devrez peut-être remplacer d’autres méthodes dans la sous-classe de la classe BaseValidator que vous créez. Pour plus d’informations sur ces autres méthodes, consultez la classe BaseValidator .

  2. Écrivez du code qui inscrit la classe de tâche personnalisée auprès de la fabrique de Registre.

  3. Créez la solution pour votre tâche personnalisée.

    Remarque

    Vérifiez que la version de la DLL que vous créez est la même plateforme de processeur que l’installation de MDT. Par exemple, si vous installez la version 64 bits de MDT, générez une version 64 bits de votre tâche UDI personnalisée.

  4. Créez un élément Validator sous l’élément ValidatorLibrary dans le fichier de configuration UDI Wizard Designer, comme dans l’extrait suivant :

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

    Avertissement

    Tous les éléments Validator doivent inclure le paramètre Message . Spécifiez tous les autres paramètres requis par le validateur. Par exemple, dans l’extrait précédent, le paramètre NamedPattern est utilisé pour spécifier un paramètre pour le nom d’un modèle d’expression régulière prédéfini.

  5. Copiez le fichier de configuration UDI Wizard Designer créé à l’étape précédente dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé MDT).

  6. Copiez la DLL de votre tâche personnalisée dans le dossier installation_folder\Templates\Distribution\Tools\ platform (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateformeest x86 pour la version 32 bits ou x64 pour la version 64 bits).

Informations de référence sur l’Assistant UDI

Composants de page de l’Assistant

Vous pouvez utiliser plusieurs composants prédéfinis pour créer vos pages personnalisées.

Création d’instances de composants

L’Assistant UDI utilise des fabriques de classes pour créer de nouvelles instances d’objets pour vous. Ces fabriques sont inscrites auprès d’un registre de fabrique, à l’aide d’une chaîne comme clé de la fabrique. Par exemple, le composant WmiRepository est identifié par la chaîne « Microsoft. Wizard.WmiRepository », disponible dans le fichier d’en-tête IWmiRepository en tant que ID_WmiRepository.

En supposant que vous avez écrit votre page en tant que sous-classe de WizardPageImpl, vous pouvez créer une instance d’un WmiRepoistory comme suit :

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

La fonction CreateInstance est une fonction de modèle de type sécurisé permettant de créer de nouvelles instances de composants. PWmiRepository étant un pointeur intelligent, il gère le comptage des références pour vous.

Composants pouvant être créés

Il existe un ensemble de composants que vous pouvez inscrire auprès du registre. Le premier ensemble de composants est toujours inscrit, car le fichier exécutable principal de l’Assistant UDI le fournit. Les deux autres ensembles de composants sont fournis dans des DLL « facultatives ». Pour que ces composants soient disponibles, la DLL doit être répertoriée dans la section DLL du fichier XML .config. Votre code n’a pas besoin de savoir quel exécutable contient un composant spécifique.

La liste des ID de composant pour les composants (le nom du composant est identique à l’ID, mais sans la ID_ initiale) inscrits auprès du registre de fabrique (défini dans OSDSetupWizard) est indiquée dans le tableau 3.

Tableau 3. ID de composant

ID Description
ID_ACPowerTask (ITask, IWizardComponent) Une tâche préliminaire qui garantit que votre ordinateur ne fonctionne pas uniquement sur batterie
ID_AppDiscoveryTask (ITask, IWizardComponent) Une tâche spécialisée pour découvrir les éléments logiciels que vous avez installés sur votre ordinateur
ID_BackgroundTask (IBackgroundTask, IWizardComponent) Peut être utilisé pour exécuter une tâche sur un autre thread
ID_CopyFilesTask (ITask, IWizardComponent) Tâche de copie d’un ou plusieurs fichiers
ID_FormController (IFormController) Vous n’aurez pas besoin de créer une instance vous-même, car votre page reçoit sa propre instance
ID_InvalidCharactersValidator (IValidator) Garantit qu’aucun champ de texte ne contient les caractères d’une liste fournie au validateur
ID_Logger (ILogger) Vous n’aurez pas besoin de créer une instance vous-même, car votre page reçoit un pointeur vers l’instance partagée
ID_NonEmptyValidator (IValidator) Validateur qui garantit qu’aucun champ n’est vide
ID_PasswordValidator (IValidator) Validateur qui garantit que deux champs de texte n’ont pas le même contenu
ID_Regex (IRegEx) Évalue les expressions régulières, en recherchant des correspondances
ID_RegExValidator (IValidator) Validateur qui valide par rapport à une expression régulière ou à un modèle connu
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) Fournit un moyen simple d’envoyer des propriétés à des tâches sans utiliser xml
ID_ShellExecuteTask (ITask, IWizardComponent) Exécuter un programme externe
ID_SummaryBag (ISummaryBag) Disponible indirectement à partir de votre page via la méthode Form
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) Gère l’exécution d’un ensemble de tâches et de l’interface utilisateur
ID_WmiRepository (IWmiRepository, IWizardComponent) Vous permet d’exécuter des requêtes WMI (Windows Management Instrumentation)
ID_IXmlDocument (IXmlDocument) Fournit une façade pour la lecture et l’écriture de documents XML

Les OSDRefreshWizard.dll, pages partagées et autres composants de contrôle définis sont indiqués dans les tableaux 4 et 5.

Tableau 4. Contrôles d’annuaire

ID Description
ID_Directory (IDirectory) Façade pour obtenir des informations de répertoire à partir du système de fichiers

Tableau 5. SharedPages.dll défini

ID Description
ID_ADHelper (IADHelper) Fournit une façade pour un ensemble limité de fonctionnalités dans Active Directory® Domain Services (AD DS)
ID_CpuInfo (ICpuInfo) Détermine si votre processeur est 32 ou 64 bits
ID_DomainJoinValidator (IDomainJoinValidator) Possède certaines méthodes pour vérifier si un ensemble d’informations d’identification est autorisé à joindre un domaine
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Utilise WMI pour obtenir une liste de lecteurs sur votre ordinateur
ID_WiredNetworkTask (ITask) Tâches qui vérifient si vous êtes connecté au réseau à l’aide d’une carte réseau câblée (au lieu d’une carte réseau sans fil)

Composants de contrôle

Vous interagissez avec les contrôles de votre page via la fonction de modèle GetControlWrapper , qui fournit l’accès à l’un des types de composants répertoriés dans le tableau 6.

Tableau 6. Composants

Types de contrôle de boîte de dialogue Description
CONTROL_CHECK_BOX (ICheckBox) Une façade pour l’utilisation des contrôles de case à cocher
CONTROL_COMBO_BOX (IComboBox) Façade pour les contrôles de zone de liste déroulante
CONTROL_GENERIC (IControl) Vous permet d’utiliser la plupart des types de contrôles pour contrôler l’activation et l’état visible
CONTROL_LIST_VIEW (IListView) Façade permettant d’accéder aux fonctionnalités d’un contrôle d’affichage de liste
CONTROL_PROGRESS_BAR (IProgressBar) Une façade pour travailler avec la position d’un contrôle de barre de progression
CONTROL_RADIO_BUTTON (IRadioButton) Une façade pour l’utilisation des contrôles de case d’option
CONTROL_STATIC_TEXT (IStaticText) Façade qui fournit l’autorisation de lecture/écriture sur le texte d’un contrôle, comme une étiquette ou une zone de texte
CONTROL_TREE_VIEW (ItreeView) Une façade pour l’utilisation d’un contrôle arborescence

Composant Liste d’images

Ce composant est une façade pour un contrôle ImageList sur votre page. Vous créez une liste d’images via l’interface IListView ou ITreeView .

Composant FormController

L’Assistant crée ce composant pour vous et le transmet à votre page. Vous y accédez à partir de votre page à l’aide de la méthode Form , que la classe de base WizardPageImpl implémente.

Composant InvalidCharacterValidator

Il s’agit d’un type de validateur que vous pouvez inclure sur une page. L’ID est ID_InvalidCharactersValidator (défini dans IValidator.h), dont la valeur de texte est « Microsoft. Wizard.Validation.InvalidChars. »

Ce validateur recherche une seule propriété (un élément Setter dans le fichier .config) appelée InvalidChars, qui est une liste de caractères qui ne sont pas autorisés. Il vérifie les caractères d’une zone de texte ; si le texte contient des caractères de cette liste, le composant signale un échec.

Composant NonEmptyValidator

Il s’agit d’un type de validateur que vous pouvez inclure sur une page. L’ID est ID_NonEmptyValidator (défini dans IValidator.h), dont la valeur de texte est « Microsoft. Wizard.Validation.NonEmpty. »

Ce validateur signale un échec si la zone de texte (ou tout autre contrôle qui prend en charge IStaticText) a une valeur de chaîne vide.

Composant PasswordValidator

Il s’agit d’un type de validateur que vous pouvez inclure sur une page. L’ID est ID_PasswordValidator (défini dans IValidator.h), dont la valeur de texte est « Microsoft. Wizard.Validation.Password. »

Ce validateur fonctionne avec deux contrôles de texte différents (contrôles qui prennent en charge IStaticText) et signale l’échec s’ils ne contiennent pas les mêmes valeurs. En d’autres termes, elle échoue si les zones de texte Mot de passe et Confirmer le mot de passe ne correspondent pas.

Étant donné que ce validateur nécessite deux contrôles, il a besoin de plus de configuration que les autres validateurs. La configuration peut ressembler à ceci :

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

Tout d’abord, vous définissez le contrôle Confirmer le mot de passe en tant que « enfant » du contrôle Mot de passe . De cette façon, si le contrôleur de formulaire désactive le contrôle Mot de passe , il désactive également le contrôle Confirmer le mot de passe . Ensuite, ajoutez un validateur de mot de passe au formulaire. Enfin, fournissez l’interface du validateur de mot de passe au contrôle Confirmer le mot de passe .

En raison de l’exigence de deux contrôles, vous devez utiliser du code pour configurer ce validateur plutôt que le fichier XML .config.

Composant RegExValidator

Il s’agit d’un type de validateur que vous pouvez inclure sur une page. L’ID est ID_RegExValidator (défini dans IValidator.h), dont la valeur de texte est « Microsoft. Wizard.Validation.RegEx. »

Ce validateur compare le contenu d’un contrôle de texte (qui prend en charge IStaticText) à une expression régulière et échoue si le texte ne correspond pas à l’expression régulière.

Vous pouvez également utiliser ce validateur avec un modèle nommé prédéfini. Pour utiliser une expression régulière, le code XML doit contenir une propriété setter appelée Pattern. Si vous souhaitez utiliser un modèle nommé à la place, utilisez un setter appelé NamedPattern défini sur l’une des valeurs du tableau 7.

Tableau 7. Setters de modèles nommés

Pattern Description
Nom d’utilisateur Vérifie que le texte est du formulaire domaine\utilisateur ou user@domain
Computername Le nom doit comporter entre 1 et 15 caractères et ne peut pas inclure un ensemble de caractères (tels que : et ?)
Workgroup Le nom doit comporter entre 1 et 15 caractères et ne peut pas contenir un ensemble de caractères (par exemple, =, +et ?)

Composant FactoryRegistry

Ce composant effectue le suivi de toutes les fabriques et services de classe. Il implémente l’interface IFactoryRegistry et est disponible indirectement via la méthode Container de votre page. En outre, le Registre charge les DLL d’extension. Après avoir chargé une DLL, le Registre recherche une fonction exportée appelée RegisterFactories. Vous devez implémenter cette fonction et y inscrire les fabriques de classes pour vos pages, tâches et validateurs (et toutes les autres fabriques de classes que vous souhaitez inscrire). Voici un exemple de l’exemple de projet :

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

Composant Enregistreur d’événements

Ce composant est disponible pour votre page via la méthode Logger (implémentée par WizardPageImpl). Vous utilisez cette méthode pour écrire des entrées dans le fichier journal. Le contenu du fichier journal est utile pour diagnostiquer les problèmes que les utilisateurs peuvent rencontrer en exécutant l’Assistant UDI.

PropertyBag, composant

Le conteneur de propriétés est un conteneur pour les variables de mémoire. Il est disponible à partir de votre page à l’aide de Container()->Properties().. Les variables de mémoire sont utiles pour transmettre des données temporaires entre différentes pages.

Composants TSVariableBag et TSRepository

Le composant TSVariableBag vous permet de lire et d’écrire des variables de séquence de tâches. Il conserve les valeurs en mémoire jusqu’à ce que l’utilisateur clique sur Terminer (par défaut). Vous pouvez accéder au sac TSVariable via la méthode TSVariables de la page (implémentée par la classe de base WizardPageImpl ). Ces composants journalisent toutes les lectures et écritures de variables de séquence de tâches.

Composant WmiRepository

Ce composant fournit une façade pour l’utilisation des requêtes WMI. Vous pouvez appeler la fonction d’assistance CreateInstance avec ID_WmiRepository pour obtenir une instance de ce composant, qui prend en charge l’interface IWmiRepository . Ce composant retourne les enregistrements de résultats via l’interface IWmiIterator .

Classes d’assistance de page de l’Assistant

Vous pouvez créer des pages d’Assistant UDI personnalisées à l’aide de classes d’assistance intégrées fournies avec le SDK UDI. Le tableau 8 répertorie les classes d’assistance que vous pouvez utiliser pour créer des pages d’Assistant personnalisées.

Tableau 8. Classes d’assistance

Classe d’assistance Description
ClassFactoryImpl, classe Il s’agit d’une classe de base utile pour créer une fabrique de classes que vous pouvez ensuite inscrire auprès du registre de fabrique.
Classe de modèle d’interface Utilisez cette classe de modèle lorsque vous souhaitez générer un composant qui implémente plusieurs interfaces.
Path Helper, classe Cette classe fournit des opérations de fichier/répertoire courantes.
Pointer, classe de modèle Cette classe fournit le comptage des références pour la gestion de la durée de vie dans les composants COM. Il est important de publier des interfaces lorsque vous en avez terminé. Cette classe de modèle gère automatiquement la durée de vie.
PUnknown, classe Cette classe est un pointeur intelligent spécifiquement pour l’interface IUnknown. Pour toutes les autres interfaces, utilisez la classe de modèle Pointeur.
StringUtil Helper, classe Cette classe fournit des méthodes d’assistance qui facilitent l’utilisation des chaînes.
Classe de modèle SubInterface Cette classe de base facilite l’implémentation d’un composant qui prend en charge une interface qui hérite elle-même d’une autre interface.
UnknownImpl, classe de modèle Cette classe gère la plupart des détails de la création d’un composant COM.
WizardComponent, classe de modèle Cette classe de base est utilisée pour créer des composants qui ont besoin d’accéder aux services de l’Assistant, tels que la création et la journalisation des composants.
WizardPageImpl, classe de modèle Cette classe de base doit être utilisée comme classe de base pour toutes les pages personnalisées de l’Assistant

ClassFactoryImpl, classe

Il s’agit d’une classe de base utile pour créer une fabrique de classes que vous pouvez ensuite inscrire auprès du registre de fabrique.

Voici un extrait du fichier LocationPage.h dans l’exemple de projet pour définir la classe ClassFactoryImpl .

#pragma once  

#include "ClassFactoryImpl.h"  

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

Voici un extrait du fichier LocationPage.cpp de l’exemple de page de l’Assistant utilisé pour définir la fabrique de classes pour la page.

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

Classe de modèle d’interface

Utilisez cette classe de modèle lorsque vous souhaitez créer un composant qui implémente plusieurs interfaces, par exemple :

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

Ce code crée une chaîne de classes de base qui prend en charge IFieldCalback et les interfaces prises en charge par WizardPageImpl (qui se trouve être IWizardPage).

Path Helper, classe

Cette classe fournit des opérations de fichier/répertoire courantes :

static inline std::wstring GetModulePath(HINSTANCE hModule)  

Elle retourne également le chemin d’accès complet au fichier .exe ou .dll avec le handle d’instance que vous fournissez à cette méthode :

static inline std::wstring GetModuleFilename(HINSTANCE hModule)  

La classe retourne le chemin d’accès complet et le nom de fichier du .exe et .dll fichier avec le handle d’instance que vous fournissez à cette méthode :

static inline std::wstring GetDirectoryName(LPCWSTR fullName)  

. . . ou simplement le chemin d’accès lors de la suppression du nom de fichier :

static inline std::wstring GetFileName(LPCWSTR fullName)  

Avec un chemin d’accès avec un nom de fichier, la classe d’assistance de chemin d’accès retourne uniquement le nom de fichier :

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

Enfin, la classe retourne une nouvelle chaîne qui est le chemin combiné et le nom de fichier (ou un autre chemin d’accès).

Pointer, classe de modèle

Cette classe est définie dans Pointer.h. Étant donné que les composants COM utilisent le comptage des références pour la gestion de la durée de vie, il est important de toujours publier les interfaces lorsque vous en avez terminé. Microsoft fournit une classe de modèle qui gère automatiquement la durée de vie. Par exemple, si vous souhaitez un pointeur intelligent pour une interface XML, vous pouvez écrire quelque chose comme suit :

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

La première ligne définit le pointeur intelligent. La deuxième ligne montre la récupération d’un pointeur intelligent via un autre appel. L’opérateur & libère toujours une interface existante si elle en contient une et retourne l’adresse du pointeur interne. Une fois que vous avez récupéré un pointeur comme celui-ci, l’instance de pointeur appelle Release pour vous lorsque la variable sort de l’étendue. Microsoft recommande d’utiliser des pointeurs intelligents au lieu d’appeler Manuellement AddRef et Release.

En outre, la classe pointeur intelligent Pointer appelle QueryInterface pour récupérer d’autres interfaces pour vous. Par exemple, lorsque le registre de fabrique crée une nouvelle instance d’un composant, il contient le code suivant :

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

La première ligne appelle QueryInterface en arrière-plan pour demander l’interface IWizardComponent . Le pointeur intelligent résultant est égal à nullptr si le composant ne prend pas en charge cette interface.

PUnknown, classe

Cette classe est un pointeur intelligent spécifiquement pour l’interface IUnknown . Pour toutes les autres interfaces, utilisez la classe de modèle Pointeur .

StringUtil Helper, classe

Cette classe est définie dans Utilities.h et fournit des méthodes d’assistance qui facilitent l’utilisation des chaînes :

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)  

Cette méthode compare deux chaînes tout en ignorant la casse (voir le tableau 9).

Tableau 9. StringUtil Helper, classe

Renvoie Description
0 Les chaînes correspondent, en ignorant la casse
<0 Première < seconde
>0 Première > seconde

Voici un exemple :

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

Ces méthodes sont un peu comme les méthodes Microsoft .NET Format dans le sens où les paramètres sont sous la forme de {0}. Toutefois, ils n’effectuent aucune mise en forme de l’entrée, juste une substitution :

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)  

Il s’agit de wrappers autour de StringCchPrintf qui retournent un wstring afin que vous n’ayez pas à allouer de mémoire pour les chaînes ou les mémoires tampons vous-même.

Classe de modèle SubInterface

Cette classe de base facilite l’implémentation d’un composant qui prend en charge une interface qui hérite elle-même d’une autre interface. Par exemple, l’interface ICheckBox hérite d’IControl. Voici comment cette classe est utilisée pour définir checkBoxWrapper :

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

L’interface de base est le premier paramètre, tandis que l’interface dérivée est le deuxième paramètre.

UnknownImpl, classe de modèle

Cette classe est définie dans UnknownImpl.h et gère la plupart des détails de la création d’un composant COM. Voici un exemple d’utilisation de cette classe de base :

classDirectory :public UnknownImpl<IDirectory>  

Ce code définit une classe qui prend en charge l’interface IDirectory .

WizardComponent, classe de modèle

Cette classe est définie dans IWizardComponent.h et est une classe de base utile pour créer des composants qui ont besoin d’accéder aux services de l’Assistant, tels que la création et la journalisation des composants.

À titre d’exemple, voici comment le composant CopyFilesTask est défini :

classCopyFilesTask :public WizardComponent<ITask>  
{  
    ...  

Le paramètre de cette classe de modèle est l’interface « principale » que vous souhaitez utiliser pour votre composant, qui, dans le cas des tâches, est ITask. L’utilisation de WizardComponent signifie que votre composant prend en charge l’interface que vous fournissez (ITask dans cet exemple) et IWizardComponent.

Chaque fois que vous utilisez le registre de fabrique de classes pour créer un composant, le registre appelle la méthode IWizardComponent-SetContainer> du composant pour fournir à votre composant l’accès aux services de l’Assistant.

WizardPageImpl, classe de modèle

Utilisez cette classe comme classe de base pour vos pages personnalisées, par exemple :

class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>  

Le paramètre est l’ID de ressource de votre modèle de boîte de dialogue.

Interfaces de page de l’Assistant

L’Assistant UDI utilise des interfaces pour accéder aux différents contrôles de votre page. Dans votre page, vous utilisez la fonction GetControlWrapper pour récupérer un wrapper de contrôle. Voici un exemple :

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

Ici, PStaticText est un pointeur intelligent vers l’interface IStaticText . Les pointeurs intelligents appellent automatiquement la méthode COM Release() lorsqu’ils sortent de l’étendue ou que vous passez l’adresse d’une variable (comme &pFormat) à une méthode.

IADHelper, interface

__interfaceIADHelper : IUnknown  
{  
    HRESULT Init(ILogger *pLogger);  
    HRESULT ValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain);  
    HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain);  
};  

HRESULT Init(ILogger *pLogger)

Initialisez ce composant en le transmettant à l’enregistreur d’événements afin qu’il puisse journaliser les informations.

HRESULTValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain)

Cette méthode vérifie si un ensemble d’informations d’identification est valide, comme indiqué dans le tableau 10.

Tableau 10. HResultValidLogon

HResult Description
S_OK Les informations d’identification sont valides
S_FALSE Les informations d’identification ne sont pas valides
E_FAIL Impossible de localiser le contrôleur de domaine ; vérifier les journaux pour plus d’informations
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain)

Cette méthode vérifie si un ensemble d’informations d’identification dispose d’un accès en lecture/écriture à l’objet ordinateur dans AD DS, comme indiqué dans le tableau 11.

Tableau 11. HResult HasAccess

[HRESULT] Description
S_OK L’utilisateur a accès
E_FAIL L’utilisateur n’a pas accès. Pour plus d’informations, consultez le fichier journal.

IBackgroundTask, interface

__interface IBackgroundTask : IUnknown  
{  
    HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback);  
    void Start(void);  
    BOOL Running(void);  
    HRESULT Wait(DWORD waitMilliseconds);  
    HRESULT Terminate(DWORD exitCode);  
    HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult);  
    HRESULT Close(void);  
};  
Présentation

La page Progression utilise cette classe pour exécuter des tâches sur un thread distinct. Vous pouvez également utiliser cette classe chaque fois que vous souhaitez effectuer des opérations sur un thread distinct. Les tâches sont toutes les classes qui prennent en charge l’interface ITask .

Cette interface est implémentée par le ID_BackgroundTask (« Microsoft. Composant Wizard.BackgroundTask ») défini dans l’interface IBackgroundTask.h.

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

Cette interface initialise le composant, comme indiqué dans le tableau 12.

Tableau 12. HRESULT Init

Paramètre Description
pTask Pointeur vers la classe qui contient le code que vous souhaitez exécuter sur un autre thread
Id Nombre que vous pouvez utiliser dans la méthode Finished du rappel pour indiquer quelle tâche a terminé l’exécution ; utile si vous démarrez plusieurs tâches avec la même méthode de rappel
pCallback Classe qui implémente la méthode Finished , qui est appelée à la fin de l’exécution d’une tâche ; l’appel à la méthode Finished se fera sur le thread d’arrière-plan, et non sur le thread d’interface utilisateur
void Start(void)

Cette méthode démarre la tâche sur un thread d’arrière-plan et retourne les éléments indiqués dans le tableau 13.

Tableau 13. Retour du thread d’arrière-plan

Renvoie Description
E_INVALIDARG La tâche étant déjà en cours d’exécution, vous ne pouvez pas la démarrer pour l’instant.
E_FAIL Un problème s’est produit au démarrage du thread.
S_OK Le thread a été démarré.
BOOL Running()

Cette méthode retourne TRUE si la tâche en arrière-plan est en cours d’exécution et FALSE si elle n’est pas en cours d’exécution.

HRESULT Wait(DWORD waitMilliseconds)

Cette méthode attend que le thread cesse de s’exécuter ou que le nombre de millisecondes s’est écoulé.

HRESULT Terminate(DWORD exitCode)

Cette méthode tue le thread en cours d’exécution (voir tableau 14 et tableau 15). Ce processus peut prendre peu de temps après le retour de cette méthode.

Tableau 14. HRESULT Terminate Exit Code

Paramètre Description
exitCode Code de sortie qui sera envoyé à la méthode de rappel Finished, qui sera également disponible à partir de la méthode GetExitCode .

Tableau 15. Codes d’arrêt

Renvoie Description
E_FAIL Échec de l’appel à la fin.
S_OK La demande d’arrêt du thread a réussi.
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)

Utilisez cette méthode pour obtenir les résultats de l’exécution de la tâche sur le thread d’arrière-plan (voir tableau 16).

Tableau 16. Codes de résultat

Paramètre Description
pCode Pointeur vers un DWORD qui sera défini sur return ou nullptr si vous n’avez pas besoin de la valeur de retour. À la sortie, ce paramètre est défini sur STILL_ACTIVE si le thread est en cours d’exécution, le code retourné par la méthode Execute de la tâche ou la valeur transmise à la méthode Terminate si vous avez appelé cette méthode.
pHresult Pointeur vers un HRESULT qui sera défini sur return ou nullptr si vous n’avez pas besoin de la valeur HRESULT .
HRESULT Close(void)

Cette méthode libère le thread d’arrière-plan. Elle retourne E_INVALIDARG si le thread est en cours d’exécution et S_OK autrement.

ICheckBox, interface

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

Définissez l’état activé de la case à cocher. Lorsque la méthode a la valeur TRUE, la case à cocher est cochée ; lorsque la méthode a la valeur FALSE, la case à cocher est désactivée.

BOOL IsButtonChecked()

Cette méthode indique l’état de vérification actuel d’une case à cocher.

IComboBox, interface

__interface IComboBox : IControl  
{  
    HRESULT Bind([in] IBindableList *pList);  
    HRESULT Select(int index);  
    int Selected(void);  
    void Add([in] LPCTSTR caption);  
    HRESULT GetText([out, retval] LPBSTR pText);  
    void Clear();  
};  
Présentation

Cette interface est implémentée par le composant CheckBoxWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_COMBO_BOX.

HRESULT Bind([in] IBindableList *pList)

Utilisez cette méthode lorsque vous avez une source de données qui implémente l’interface IBindableList . La zone de liste initialise le contenu avec les légendes de cette liste.

HRESULT Select(int index)

Sélectionnez l’élément dans la zone de liste déroulante au niveau de l’index.

int Selected(void)

Cette méthode retourne l’index de l’élément sélectionné ou -1 si rien n’est sélectionné.

void Add([in] LPCTSTR caption)

Ajoutez manuellement un élément à la zone de liste déroulante.

HRESULT GetText([out, retval] LPBSTR pText)

Récupérez la chaîne de l’élément actuellement sélectionné dans la zone de liste déroulante.

void Clear()

Supprimez tous les éléments de la zone de liste déroulante.

IControl, interface

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

Cette interface est implémentée par le composant ControlWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_GENERIC.

HRESULT SetEnable(BOOL enable)

Activez ou désactivez le contrôle.

BOOL IsEnabled(void)

Retourne TRUE si le contrôle est activé, FALSE si ce n’est pas le cas.

HRESULT SetVisible(BOOL visible)

Afficher ou masquer le contrôle.

ICpuInfo, interface

__interface ICpuInfo : IUnknown  
{  
    BOOL Is64Bit(void);  
};  
Présentation

Vous obtenez cette interface en créant un composant ID_CpuInfo . La méthode unique indique si le processeur est 32 ou 64 bits. Notez que si vous avez un système d’exploitation 32 bits sur un ordinateur 64 bits, cette méthode retourne TRUE, car elle signale uniquement la largeur du processeur (pas le système d’exploitation).

IDirectory, interface
__interface IDirectory : IUnknown  
{  
    BOOL FileExists(LPCWSTR name);  
    BOOL FindFirst([in] LPCWSTR name);  
    HRESULT FoundName([out, retval] LPBSTR name);  
    DWORD FoundAttributes(void);  
    BOOL FindNext(void);  
    void FinishFind(void);  
};  
Présentation

Le composant Répertoire , que vous créez à l’aide de ID_Directory, fournit une façade permettant d’utiliser des répertoires dans le système de fichiers.

BOOL FileExists(LPCWSTR name)

Cette méthode retourne TRUE si un fichier portant le nom que vous fournissez existe.

BOOL FindFirst([in] nom LPCWSTR)

Cette méthode recherche une première correspondance pour le nom que vous fournissez. Il prend en charge les caractères génériques et retourne les noms de fichiers et de répertoires. La méthode retourne TRUE si une correspondance a été trouvée, false dans le cas contraire.

HRESULT FoundName([out, retval] LPBSTR name)

Cette méthode récupère le nom du fichier trouvé avec un appel à FindFirst ou FindNext.

DWORD FoundAttributes(void)

Cette méthode retourne l’attribut du dernier fichier ou répertoire trouvé. Vous pouvez utiliser le code comme suit pour tester s’il s’agit d’un répertoire :

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

Recherchez le suivant. Cette méthode retourne TRUE si une autre correspondance a été trouvée, false dans le cas contraire.

void FinishFind(void)

Cette méthode libère les ressources utilisées pour l’opération Find.

IDomainJoinValidator, interface

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

Vous obtenez une instance de cette interface à l’aide de la valeur ID_DomainJoinValidator à la fonction de modèle CreateInstance .

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

Initialisez l’instance, comme indiqué dans le tableau 17.

Tableau 17. HRESULT Init - Initialisation d’instance

Paramètre Description
pLogger L’instance d’enregistreur d’événements, qui est disponible pour votre page via la méthode Logger de la page
pContainer Transmet les résultats de la méthode Container de votre page
pUsername Zone de texte qui contient le nom d’utilisateur à valider
pPassword Zone de texte qui contient le mot de passe à valider
PComputerName Zone de texte qui contient le nom de l’ordinateur qui sera finalement joint au domaine
HRESULT IsUsernameValid(LPCWSTR domainName)

Cette méthode utilise la méthode IADHelper-ValidLogon> pour effectuer le travail. Pour plus d’informations, consultez cette méthode.

BOOL CanModifyComputerAdEntry(LPCWSTR domainName)

Vérifiez si l’utilisateur dispose des droits pour modifier l’entrée de l’ordinateur. La majeure partie du travail est effectuée par IADHelper-HasAccess>. Si cette méthode retourne FALSE, consultez le fichier journal pour plus d’informations.

IDriveList, interface

__interface IDriveList : IUnknown  
{  
    HRESULT Init(IWmiRepository *pWmi);  
    HRESULT SetWhereClause(LPCTSTR whereClause);  
    HRESULT SetMinimumDriveSize(__int64 size);  
    HRESULT Update(void);  
    HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned);  

    size_t Count(void);  
    HRESULT GetProperty(size_t index, LPCTSTR propName,  LPVARIANT value);  
    HRESULT GetCaption(size_t index,  LPBSTR pCaption);  
}  
HRESULT Init(IWmiRepository *pWmi)

Appelez cette méthode avant d’appeler d’autres composants. Vous devez créer un WmiRepository avant d’appeler cette méthode.

HRESULT SetWhereClause(LPCTSTR whereClause)

Cette méthode vous permet d’ajouter du texte qui apparaîtra sous la forme d’une clause « where » dans la requête. Par exemple, la ligne suivante retourne uniquement les lecteurs USB :

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

Définissez la taille de lecteur réduite, en octets, pour les lecteurs qui seront retournés à partir de la requête.

HRESULT Update(void)

il exécute la requête. La liste des lecteurs disponibles après l’appel de cette méthode est triée par lettre de lecteur.

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

Cette méthode ajoute les noms des propriétés supplémentaires que vous souhaitez rendre disponibles dans les résultats de la requête. Appelez cette méthode avant d’appeler Update. Le tableau 18 présente trois des propriétés utiles.

Tableau 18. HRESULT AddProperty : Propriétés utiles

Section Propriété Description
DISKQUERY_LOGICALDISK Size Taille, en octets, représentée sous forme de chaîne
DISKQUERY_DISKPARTITION DiskIndex Numéro de disque sous forme d’entier, commençant par 0
DISKQUERY_LOGICALDISK VolumeName L’étiquette du volume
size_t Count(void)

Nombre d’enregistrements retournés par la requête. Appelez Update avant d’appeler cette méthode.

HRESULT GetProperty(size_t index, LPCTSTR propName, valeur LPVARIANT)

Cette méthode récupère la valeur d’une propriété à partir des résultats de la requête, comme indiqué dans le tableau 19.

Tableau 19. HRESULT GetProperty

Paramètre Description
Index Index de base zéro pour l’enregistrement de résultat
Propname Nom de la propriété, par exemple « Size »
Valeur Au retour, ce paramètre contient une valeur de variante de la propriété
HRESULT GetCaption(size_t index, LPBSTR pCaption)

Cette méthode récupère la légende d’un enregistrement qui est identique à la propriété Caption .

IImageList, interface

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

Cette interface est implémentée par le composant ImageList . Vous récupérez une instance de ce composant à partir de l’interface IListView .

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

Créez une liste d’images, que ce composant gère. Appelez cette méthode une seule fois.

HImageList GetImageList(void)

Cette méthode retourne le handle de la liste d’images au cas où vous deviez effectuer d’autres opérations sur la liste d’images.

int AddImage(HInstance hInstance, int resourceId)

Ajoutez une nouvelle image à la liste d’images à partir d’une ressource, comme indiqué dans le tableau 20.

Tableau 20. HRESULT IImageList, interface

Paramètre Description
hInstance Handle d’instance du module qui contient la ressource bitmap
resourceId ID de la ressource à charger dans la liste d’images

IListView, interface

__interface IListView : IControl  
{  
    int AddItem([in] LPCTSTR text);  
    int AddColumn(int width, [in] LPCTSTR text);  
    HRESULT SetSubItem(int index, int column, [in] LPCTSTR text);  
    int GetWidth(void);  
    void SetExtendedStyle(DWORD style);  
    int GetSelectedItem(void);  
    HRESULT SelectItem(int index);  
    BOOL IsItemChecked(int index);  
    int GetItemCount(void);  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    int AddImage(HINSTANCE hInstance, int resourceId);  
    HRESULT SetImage(int index, int imageIndex);  
    HRESULT Clear(void);  
};  
Présentation

Cette interface est implémentée par le composant ControlWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_LIST_VIEW.

int AddItem([in] LPCTSTR text)

Ajoutez une nouvelle ligne à la zone de liste. La méthode retourne l’index de l’élément qui vient d’être ajouté.

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

Ajoutez une nouvelle colonne à l’affichage liste.

HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)

Définissez le texte dans une colonne autre que la première colonne de la zone de liste, comme indiqué dans le tableau 21.

Tableau 21. HRESULT SetSubItem

Paramètre Description
index Index de l’élément de liste que vous souhaitez modifier
Colonne Index de la colonne que vous souhaitez mettre à jour ; la première colonne est définie avec AddItem, les colonnes deux et suivantes sont définies avec cette méthode
text Chaîne à afficher dans la colonne
int GetWidth(void)

Cette méthode retourne la largeur de la zone de texte entière.

void SetExtendedStyle(style DWORD)

Cette méthode vous permet de définir des styles étendus dans la zone de liste, par exemple :

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

Cette méthode retourne l’index de l’élément d’affichage liste actuellement sélectionné.

HRESULT SelectItem(int index)

Définissez l’élément sélectionné dans la liste sur cet index.

BOOL IsItemChecked(int index)

Cette méthode retourne TRUE si un élément de la liste est sélectionné. Cette méthode nécessite que vous appeliez SetExtendedStyle pour définir le style de case à cocher.

int GetItemCount(void)

Cette méthode retourne le nombre d’éléments dans l’affichage liste.

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

Créez une liste d’images et attachez-la à l’affichage de liste.

int AddImage(HINSTANCE hInstance, int resourceId)

Ajoutez une image à la liste d’images de l’affichage de liste. Vous devez d’abord appeler CreateImageList.

HRESULT SetImage(int index, int imageIndex)

Définissez l’image qui sera affichée sur le côté gauche d’un élément d’affichage de liste spécifique.

HRESULT Clear(void)

Supprimez tous les éléments de l’affichage liste.

IProgressBar, interface

__interface IProgressBar : IControl  
{  
    HRESULT SetPercentage(int position);  
    int GetPercentage(void);  
};  
Présentation

Cette interface est implémentée par le composant ProgressBarWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_PROGRESS_BAR.

HRESULT SetPercentage(int position)

Définissez la position de la barre de progression à l’aide d’un nombre compris entre 0 et 100. Par défaut, les nouvelles barres de progression Win32® ont une plage maximale de 100.

int GetPercentage(void)

Cette méthode retourne la position actuelle de la barre de progression.

IRadioButton, interface

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

Cette interface est implémentée par le composant RadioButtonWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_RADIO_BUTTON.

void SetGroup(int firstId, int lastId)

Fournissez au wrapper la plage de cases d’option qui doivent être traitées comme un groupe. Appelez cette méthode avant d’appeler CheckRadio.

void CheckRadio(int id)

Définissez la case d’option spécifique sur le bouton unique dans le groupe de cases d’option sélectionné. Appelez SetGroup avant d’appeler cette méthode.

BOOL IsButtonChecked(int id)

Cette méthode retourne TRUE si la case d’option est actuellement sélectionnée, false dans le cas contraire.

void EnableRadio(int id, BOOL enable)

Cette méthode active ou désactive une case d’option.

IStaticText, interface

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

Cette interface est implémentée par le composant StaticTextWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_STATIC_TEXT.

HRESULT SetText([in] LPCTSTR pText)

Définissez le texte du contrôle.

HRESULT GetText([out, retval] LPBSTR pText)

Cette méthode retourne la valeur actuelle du texte pour le contrôle .

ITask, interface

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

Implémentez cette interface si vous souhaitez que votre composant soit disponible en tant que tâche dans la page préliminaire ou si vous souhaitez utiliser le composant BackgroundTask pour effectuer un travail sur un thread d’arrière-plan.

Voici les composants qui implémentent l’interface ITask :

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

Si vous écrivez une tâche pour la page préliminaire, appelez cette méthode pour initialiser votre tâche. Le fichier .config contient du code XML qui peut ressembler à ceci :

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

Le paramètre pProperties permet d’accéder aux trois valeurs setter, tandis que le paramètre pTaskSettings donne accès à l’élément Task et aux enfants. La plupart des tâches doivent uniquement lire les données du paramètre pProperties .

Exécuter
HRESULT Execute(LPDWORD pReturnCode)  

C’est ici que vous écrivez le code qui effectue la tâche. Cette méthode doit retourner S_OK s’il n’y a pas eu d’erreur, et elle peut retourner un autre HRESULT si une erreur s’est produite pendant l’exécution de la tâche. Les valeurs autres que S_OK retournées par cette méthode sont mises en correspondance avec <les éléments Error> dans la <section ExitCodes> si vous utilisez la page préliminaire.

Le paramètre pReturnCode doit être mis à jour avec un nombre qui indique l’état de la tâche. Ces valeurs sont mises en correspondance par la page preflights aux <éléments ExitCode> .

ITreeView, interface

__interface ITreeView : IControl  
{  
    void EnableCheckboxes(void);  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    int AddImage(HINSTANCE hInstance, int resourceId);  

    HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL);  
    void SetImage(HTREEITEM item, int image, int expandImage);  

    void Clear(void);  
    BOOL SetFirstVisible(HTREEITEM item);  
    BOOL SelectItem(HTREEITEM item);  
    void CheckItem(HTREEITEM item, UINT checkState);  
    HTREEITEM SelectedItem(void);  
    int SetItemHeight(SHORT height);  
    HRESULT EnableItem(HTREEITEM item, BOOL enable);  
    void Expand(HTREEITEM hItem, BOOL expand);  

    HTREEITEM GetChild(HTREEITEM hParent);  
    HTREEITEM GetParent(HTREEITEM hNode);  
    HTREEITEM GetNextItem(HTREEITEM hPrevious);  

    UINT IsChecked(HTREEITEM item);  
    BOOL IsEnabled(HTREEITEM item);  

    INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel);  
    HRESULT SetEventHandler(ITreeViewEvent *pEventHandler);  

    void SetSelectedBackColor(COLORREF color);  
};  
Présentation

Cette interface est implémentée par le composant TreeViewWrapper . Vous récupérez une instance de ce composant à l’aide de la fonction d’assistance GetControlWrapper avec le type CONTROL_TREE_VIEW.

void EnableCheckboxes(void)

Cette méthode active les cases à cocher dans le contrôle d’arborescence en définissant le style TVS_CHECKBOXES .

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

Ajoutez une nouvelle liste d’images au contrôle d’arborescence. Le paramètre flags est passé dans l’appel à la fonction win32 ImageList_Create .

int AddImage(HINSTANCE hInstance, int resourceId)

Ajoutez une image à la liste d’images à partir d’une ressource (resourceId) dans le module avec le handle d’instance hInstance.

HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)

Ajoutez un nœud à l’arborescence. Le nouveau nœud est ajouté au niveau supérieur si hParent a la valeur NULL. Sinon, fournissez le handle à l’élément parent dans lequel vous souhaitez ajouter le nouvel élément. Cette méthode retourne le handle au nouvel élément.

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

Définissez l’image à utiliser pour un élément d’arborescence. Vous pouvez définir l’image normale et l’image développée.

void Clear(void)

Supprimez tous les éléments de l’arborescence.

BOOL SetFirstVisible(élément HTREEITEM)

Vérifiez que l’élément d’arborescence est visible. L’arborescence défile si nécessaire pour rendre cet élément visible.

BOOL SelectItem(HTREEITEM item)

Définissez l’élément actuellement sélectionné sur l’élément que vous fournissez. Vous pouvez appeler SetFirstVisible après cela pour vous assurer que l’élément nouvellement sélectionné est visible.

void CheckItem(HTREEITEM item, UINT checkState)

La méthode définit essentiellement l’image qui sera affichée pour la case à cocher dans l’arborescence. Ces images se trouvent dans un contrôle ImageList distinct que l’arborescence gère. Par défaut, cette liste d’images contient trois images, indiquées dans le tableau 22.

Table 22.void CheckItem Image List Default

checkState Description
0 Vide
1 Effacé
2 Sélectionné
HTREEITEM SelectedItem(void)

Cette méthode retourne le handle de l’élément d’arborescence actuellement sélectionné.

int SetItemHeight(SHORT height)

Cette méthode définit la hauteur de tous les éléments du contrôle d’arborescence en pixels. Elle retourne la hauteur précédente en pixels.

HRESULT EnableItem(élément HTREEITEM, BOOL enable)

Cette méthode active ou désactive un seul élément dans l’arborescence. La désactivation d’un élément avec des enfants ne désactive pas les enfants.

void Expand(HTREEITEM hItem, BOOL expand)

Cette méthode développe ou réduit un nœud dans l’arborescence.

HTREEITEM GetChild(HTREEITEM hParent)

Cette méthode retourne le premier enfant d’un élément d’arborescence ou NULL s’il n’y a pas d’enfants.

HTREEITEM GetParent(HTREEITEM hNode)

Cette méthode retourne le handle du parent pour un nœud dans l’arborescence ou NULL si le nœud se trouve au niveau supérieur.

HTREEITEM GetNextItem(HTREEITEM hPrevious)

Vous pouvez appeler cette méthode avec un handle que GetChild retourne pour itérer tous les enfants d’un nœud. Cette méthode retourne le frère suivant dans l’arborescence qui partage le même parent.

UINT IsChecked(HTREEITEM item)

Cette méthode retourne 0 si le nœud d’arborescence n’est pas sélectionné et 1 s’il l’est.

BOOL IsEnabled(HTREEITEM item)

Cette méthode retourne TRUE si le nœud d’arborescence est activé, false dans le cas contraire.

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

Cette méthode est destinée à un usage interne uniquement.

HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)

Appelez cette méthode si vous souhaitez recevoir une notification lorsque l’élément sélectionné change ou que l’utilisateur modifie l’état de vérification d’un élément d’arborescence. Vous devez implémenter ITreeViewEvent dans votre composant pour recevoir ces rappels.

void SetSelectedBackColor(COLORREF color)

Définissez la couleur d’arrière-plan utilisée pour l’élément sélectionné.

IWmiIteration, interface

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

Vous utilisez généralement cette interface, ainsi que IWmiRepository, lorsque vous utilisez des appels WMI. L’interface IWmiIteration vous permet d’itérer au sein des valeurs retournées par une requête.

HRESULT Next(void)

Passez à l’élément suivant dans les résultats de la requête, comme indiqué dans le tableau 23.

Tableau 23. HRESULT Next(void) Query Returns

HRRESULT Description
S_OK Déplacé vers le résultat suivant ; Vous pouvez utiliser GetProperty pour récupérer les propriétés de ce résultat.
S_FALSE Il n’y a plus d’éléments dans la liste.
E_NOT_SET Il n’y a pas de résultats de requête
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)

Cette méthode récupère la valeur d’une propriété à partir de l’enregistrement de résultat actuel, comme indiqué dans les tableau 24 et 25.

Tableau 24. HRESULT GetProperty

Paramètre Description
propertyName Nom de la propriété que vous souhaitez récupérer
pValue Pointe vers une structure VARIANT qui, au retour, contient la valeur de la propriété

Tableau 25. HRESULT GetProperty Result

[HRESULT] Description
S_OK La valeur de la propriété a été récupérée.
WBEM_E_NOT_FOUND Aucune propriété n’a le nom.
E_NOT_VALID_STATE Il n’existe aucun enregistrement actif.

Remarque

La méthode GetProperty peut retourner d’autres codes d’erreur WMI que ceux répertoriés dans le tableau 25. Les valeurs répertoriées sont les résultats courants retournés.

IWmiRepository, interface

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

Cette interface est implémentée par le composant WmiRepository (ID_WmiRepository).

HRESULT SetNamespace(LPCWSTR namespaceName)

Cette méthode définit l’espace de noms WMI qui sera utilisé pour la requête. Appelez cette méthode avant d’appeler ExecQuery. Si vous n’appelez pas cette méthode, l’espace de noms sera root\cimv2. Cette méthode retourne toujours S_OK.

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

Exécutez une requête sur le jeu d’espaces de noms WMI avec un appel à SetNamespace, comme indiqué dans les tableau 26 et 27.

Tableau 26. HRESULT ExecQuery

Paramètre Description
Query Chaîne de la requête WMI que vous souhaitez exécuter
ppIterator Passez un pointeur vers un pointeur d’interface, qui au retour sera rempli avec une interface, ce qui vous donne accès aux résultats de la requête

Tableau 27. Résultat de la requête HRESULT

[HRESULT] Description
S_OK Requête réussie
Other Si la requête n’a pas réussi, retourne un HRESULT WMI

IFormController, interface

__interface IFormController : IUnknown  
{  
    Init(IWizardPageView *pView, IWizardPageContainer *pContainer);  
    SetPageInfo(ISettingsProperties *pPageInfo);  

    Validate(void);  

    AddToGroup(int groupControlId, int controlId);  
    UpdateCheckGroup(int groupControlId);  
    AddValidator(int controlId, IValidator *pValidator, IControl *pCOntrol = 0);  

    AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr);  
    DisableValidation(int controlId, BOOL disable);  

    AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type);  
    AddRadioGroup(LPCWSTR groupName, int radioControlId);  
    EnableRadioGroup(LPCWSTR groupName, BOOL enable);  
    InitFields(IFieldCallback *pFieldCallback = nullptr);  
    SaveFields(IFieldCallback *pFieldCallback = nullptr);  
    BOOL IsFieldDisabled(int controlId);  

    InitSection(LPCWSTR key, LPCWSTR sectionCaption);  
    AddSummaryItem(LPCWSTR first, LPCWSTR second);  
    SuppressLogValue(LPCWSTR tsVariableName);  
    SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption);  
    LoadText(int controlId, LPCWSTR tsVariableName);  

    void ControlEvent(WORD eventId, WORD controlId);  
    BOOL IsValid(void);  
 };  
Présentation

Chaque page de l’Assistant UDI a son propre contrôleur de formulaire qui implémente cette interface. Vous utilisez ce contrôleur pour connecter les données de champ dans le fichier XML .config aux contrôles de votre page. Le contrôleur de formulaire gère ensuite la plupart des détails pour vous.

Configuration du formulaire

En règle générale, configurez le contrôleur de formulaire dans la méthode OnWindowCreated de votre page. Cela implique généralement d’appeler les méthodes indiquées dans le tableau 28.

Tableau 28. OnWindowCreated, méthode

Méthode Description
Init Initialise le contrôleur de formulaire
AddField Fournit une connexion entre un champ dans le fichier XML .config qui est un nom de chaîne et un contrôle dans la boîte de dialogue de votre page qui est un ID
AddRadioGroup Permet de connecter une case d’option à un groupe et à un contrôle dans votre boîte de dialogue
AddToGroup Vous autorise les contrôles « enfants » activés ou désactivés avec leur parent ou en fonction de la case d’option sélectionnée
InitFields Appelez après avoir appelé toutes les méthodes Add pour configurer le formulaire
Validate Effectue la validation initiale
Traitement des événements de formulaire

Ajoutez l’appel suivant à votre méthode OnControlEvent :

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

Cet appel transmet les événements au contrôleur de formulaire afin qu’il puisse traiter les événements liés au formulaire.

Enregistrer les données de formulaire

Dans la méthode OnNextClicked , appelez les méthodes de formulaire indiquées dans le tableau 29.

Tableau 29. OnNextClicked, méthode

Méthode Description
InitSection Fournit le nom de la section qui s’affichera sur la page Résumé de cette page
SaveFields Enregistrer les valeurs des champs dans les variables de séquence de tâches et dans la page Résumé
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)  

Vous appelez généralement cette méthode près du début de la méthode OnWindowCreated de votre page. La commande doit ressembler à ceci :

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

Cette méthode est appelée en interne et vous ne devez pas l’appeler vous-même. Il fournit le code XML de la page au contrôleur de formulaire.

Valider
HRESULT Validate(void)  

Cette méthode exécute tous les validateurs attachés aux contrôles. Si un validateur ne passe pas, le contrôleur de formulaire affiche un message d’avertissement et désactive le bouton Suivant , puis arrête le traitement des validateurs. En règle générale, vous devez uniquement appeler cette méthode à la fin de votre méthode OnWindowCreated . elle retourne toujours S_OK.

AddToGroup
AddToGroup(int groupControlId, int controlId)  

Cette méthode ajoute un contrôle en tant que « enfant » d’une case à cocher ou d’une case d’option, comme indiqué dans le tableau 30. Tous ces contrôles enfants sont désactivés lorsque le contrôle parent n’est pas sélectionné. La méthode retourne toujours S_OK.

Tableau 30. AddToGroup

Paramètre Description
groupControlId ID de la case à cocher ou de la case d’option qui contrôle l’état d’activation du contrôle enfant
Contrôle ID du contrôle que vous souhaitez ajouter en tant qu’enfant
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)  

Cette méthode met à jour l’état d’activation ou de désactivation des contrôles enfants d’un groupe en fonction de l’état du contrôle parent. En règle générale, vous n’avez pas besoin d’appeler cette méthode vous-même, car le contrôleur de formulaire l’appelle pour vous.

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

Appelez cette méthode uniquement si vous avez un validateur que vous souhaitez créer dans le code au lieu d’utiliser le code XML. Cette méthode retourne toujours S_OK.

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

Appelez cette méthode uniquement si vous avez un validateur que vous souhaitez créer dans le code au lieu d’utiliser le code XML.

DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)  

Appelez cette méthode pour désactiver explicitement le validateur pour un contrôle ou restaurer la validation normale, comme indiqué dans le tableau 31. Cette méthode est utile, par exemple, lorsque vous avez des règles d’activation/désactivation pour les contrôles qui ne sont pas couverts par la validation de formulaire et que vous devez désactiver la validation pour un contrôle. En d’autres termes, vous n’appelez normalement pas cette méthode. Cette méthode retourne toujours S_OK.

Tableau 31. HRESULT DisableValidation

Paramètre Description
controlId Contrôle pour lequel vous souhaitez activer ou désactiver la validation
Disable Définissez sur TRUE pour désactiver la validation et sur FALSE pour restaurer la validation normale
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)  

Ajoutez un mappage de contrôle entre le nom dans un élément Field du fichier XML .config et l’ID de contrôle dans la boîte de dialogue de votre page, comme indiqué dans le tableau 32. Vous devez appeler cette méthode avant l’appel à InitFields, car InitFields utilise ces informations. Cette méthode retourne toujours S_OK.

Tableau 32. HRESULT AddField

Paramètre Description
Fieldname Nom du champ tel qu’il apparaît dans le code XML de votre page
controlId ID du contrôle dans le modèle de boîte de dialogue de votre page
suppressLog Affectez la valeur TRUE si vous ne souhaitez pas que les valeurs de ce champ soient écrites dans le fichier journal ; définissez toujours ce paramètre sur TRUE pour les champs de mot de passe ou de code confidentiel
Type Le type de contrôle, qui est l’un des suivants :

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

Cette méthode ajoute un contrôle à un groupe de cases d’option nommé, comme indiqué dans le tableau 33. Vous devez appeler cela avant la méthode InitFields , car cette méthode utilise des attributs sur l’élément RadioGroup pour contrôler les paramètres de tous les contrôles de case d’option dans le groupe. Les groupes d’option peuvent être verrouillés, par exemple, afin que toutes les cases d’option soient désactivées, mais que les contrôles enfants soient activés ou désactivés uniquement en fonction de la case d’option sélectionnée. Cette méthode retourne toujours S_OK.

Tableau 33. HRESULT AddRadioGroup

Paramètre Description
Groupname Chaîne qui définit un groupe de cases d’option sur cette page
radioControlId ID d’une case d’option unique à ajouter à ce groupe
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)  

Cette méthode vous permet d’activer ou de désactiver un groupe de cases d’option entier. La désactivation d’un groupe d’options désactive tous les contrôles de case d’option du groupe, ainsi que tous les enfants de ces cases d’option qui ont été ajoutés avec AddToGroup. Voir les tableaux 34 et 35.

Tableau 34. EnableRadioGroup

Paramètre Description
Groupname Nom d’un groupe de cases d’option que vous avez déjà défini avec un appel à AddRadioGroup
Enable Définissez sur TRUE pour activer le groupe de cases d’option et SUR FALSE pour désactiver le groupe

Tableau 35. HRESULT EnableRadioGroup

[HRESULT] Description
S_OK Groupe activé ou désactivé
E_INVALIDARG Il n’existe aucun groupe de cases d’option avec le nom que vous avez fourni
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)  

Avant d’appeler cette méthode, appelez AddField pour chaque champ que le xml peut contrôler. Cette méthode retourne toujours S_OK.

Le paramètre pFieldCallback est facultatif. Si vous le fournissez, le contrôleur de formulaire appelle SetFieldDefault pour les contrôles qui ne sont pas CONTROL_STATIC_TEXT ou CONTROL_CHECK_BOX. Ce comportement vous permet de récupérer une valeur par défaut à partir du xml et de la définir vous-même dans le contrôle.

SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)  

Cette méthode enregistre les valeurs de champ dans les variables de séquence de tâches et dans les données récapitulatives qui seront affichées dans la page Résumé . La fourniture d’un pointeur dans pFieldCallback vous permet de gérer les valeurs d’enregistrement pour les contrôles qui ne prennent pas en charge CONTROL_STATIC_TEXT.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)  

Cette méthode vous permet de déterminer si un champ a été désactivé dans le code XML.

InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)  

Cette méthode initialise les données récapitulatives qui seront affichées dans la page Résumé , comme indiqué dans le tableau 36. Appelez cette méthode dans votre méthode OnNextClicked avant d’appeler SaveFields. Cette méthode retourne toujours S_OK.

Tableau 36. HRESULT InitSection

Paramètre Description
Clé Ce paramètre doit être propre à votre page. Il permet de s’assurer que chaque page possède ses propres informations récapitulatives.
sectionCaption En-tête qui s’affiche dans la page Résumé pour les informations de résumé de cette page. En règle générale, vous utilisez DisplayName() comme valeur pour ce paramètre.
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)  

Cette méthode vous permet d’ajouter des éléments récapitulatives à la page Résumé au-dessus et au-delà de ces éléments définis avec le xml. Voir le tableau 37.

Tableau 37. HRESULT AddSummaryItem

Paramètre Description
First Légende de l’élément de résumé, qui est affichée sur le côté gauche
Second Valeur qui sera affichée sur le côté droit
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)  

Appelez cette méthode pour les variables de séquence de tâches pour lesquelles vous ne souhaitez pas que les valeurs soient écrites dans le fichier journal. Appelez cette méthode pour les variables de séquence de tâches qui stockent des mots de passe, des codes confidentiels ou d’autres valeurs sensibles qu’un utilisateur peut entrer.

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

Cette méthode enregistre la valeur d’un contrôle de texte dans une variable de séquence de tâches et dans la section résumé. En règle générale, vous n’aurez pas besoin d’appeler cette méthode vous-même, car le contrôleur de formulaire effectue cette opération pour tous les champs. Voir le tableau 38.

Tableau 38. HRESULT SaveText

Paramètre Description
controlId ID de la zone de texte qui contient la valeur que vous souhaitez enregistrer (ou tout autre contrôle pouvant renvoyer du texte)
tsVariableName Nom de la variable de séquence de tâches que vous souhaitez modifier
summaryCaption Légende de la page Résumé pour cette valeur
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)  

Cette méthode lit la valeur d’une variable de séquence de tâches et définit la zone de texte sur cette valeur.

ControlEvent
void ControlEvent(WORD eventId, WORD controlId)  

Appelez cette méthode sur votre méthode OnControlEvent pour vous assurer que le contrôleur de formulaire peut traiter les événements de contrôle, ce qu’il doit faire pour fonctionner correctement. Les valeurs que vous passez à cette méthode sont les mêmes que celles transmises à la méthode OnControlEvent .

IsValid
BOOL IsValid(void)  

Cette méthode retourne l’état de la validation la plus récente du formulaire. Si l’un des validateurs de contrôle a signalé une erreur, cette méthode retourne FALSE. En d’autres termes, elle retourne TRUE uniquement si tous les contrôles de la page sont valides.

IValidator, interface

__interface IValidator : IUnknown  
{  
    HRESULT Init(IControl *pControl, LPCTSTR message);  
    HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties);  
    BOOL, IsValid(LPBSTR pMessage);  
    HRESULT SetProperty(int propertyId, LPVARIANT pValue);  
    HRESULT SetProperty(int propertyId, IUnknown *pUnknown);  
    HRESULT SetProperty)(int propertyId, LPCTSTR pValue);  
};  
Présentation

Les validateurs sont des composants qui peuvent valider un seul contrôle sur votre page. Le moyen le plus simple d’implémenter un validateur consiste à en faire une sous-classe de la classe BaseValidator , qui est définie dans le fichier d’en-tête BaseValidator.h.

HRESULT Init(IControl *pControl, message LPCTSTR)

Si vous créez un validateur dans le code, vous pouvez appeler cette méthode pour initialiser le validateur. Voir le tableau 39.

Tableau 39. HRESULT Init

Paramètre Description
pControl Contrôle que votre validateur doit valider
Message Message à afficher sur la page si le contrôle n’est pas valide
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)

Le contrôleur de formulaire appelle cette méthode pour initialiser les validateurs qu’il crée en fonction du code XML de la page. Voir le tableau 40.

Tableau 40. HRESULT Init, méthode

Paramètre Description
pControl Contrôle que votre validateur doit valider
pContainer Si votre validateur a besoin d’accéder à l’enregistreur d’événements ou doit créer d’autres composants
pProperties Fournit l’accès aux propriétés (éléments setter) de votre validateur
BOOL, IsValid(LPBSTR pMessage)

Cette méthode retourne TRUE si le contrôle est valide ou FALSE si le contrôle n’est pas valide. Au retour, pMessage doit être renseigné avec un nouveau BSTR qui contient le message à afficher lorsque le contrôle n’est pas valide.

HRESULT SetProperty(int propertyId, LPVARIANT pValue)

Vous pouvez implémenter cette méthode si vous avez besoin de valeurs supplémentaires qui ne sont pas fournies dans le code XML.

HRESULT SetProperty(int propertyId, IUnknown *pUnknown)

Vous pouvez implémenter cette méthode si vous avez besoin de valeurs supplémentaires qui ne sont pas fournies dans le code XML.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

Vous pouvez implémenter cette méthode si vous avez besoin de valeurs supplémentaires qui ne sont pas fournies dans le code XML.

IRegEx, interface

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

Cette méthode est implémentée par le composant ID_Regex (IRegex.h) et prend en charge le traitement des expressions régulières.

BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)

Cette méthode exécute l’expression régulière sur le texte d’entrée. Il utilise la fonction regex_match de la bibliothèque standard C++ pour effectuer le travail réel. La méthode retourne TRUE s’il y avait des correspondances; sinon, FALSE.

HRESULT GetMatch(size_t index, LPBSTR pValue)

Cette méthode vous permet de récupérer les correspondances à partir de l’appel MatchesRegex le plus récent. Notez qu’il n’y a pas de traitement d’erreur dans cette méthode et qu’elle retourne S_OK ou lève une exception.

ISummaryInfo, interface

__interface ISummaryInfo : IUnknown  
{  
    size_t Count(void);  
    HRESULT Clear(void);  
    HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);  
    HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);  
    HRESULT GetCaption(LPBSTR pCaption);  
    HRESULT SetCaption(LPCTSTR caption);  
};  

Vous n’avez pas besoin d’utiliser cette interface directement. Utilisez plutôt IFormController.

ISummaryBag

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

Vous n’avez pas besoin d’utiliser cette interface directement. Utilisez plutôt IFormController.

ITSVariableBag, interface

__interface ITSVariableBag : IUnknown  
{  
    void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue);  
    void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue);  
    void Clear(void);  
    HRESULT Remove([in] LPCTSTR variableName);  
    HRESULT SuppressLogValue([in] LPCTSTR variableName);  
    void Save(void);  
};  

Cette interface permet d’accéder aux variables de séquence de tâches. Vous pouvez accéder à cette interface à l’aide de la méthode TSVariables() de votre page.

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

Cette méthode lit la valeur d’une variable de séquence de tâches.

Remarque

Les valeurs sont mises en cache après la première lecture.

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

Cette méthode définit la valeur d’une variable de séquence de tâches. Cette valeur est enregistrée en mémoire. Les valeurs de séquence de tâches sont écrites une fois que vous cliquez sur Terminer dans l’Assistant UDI.

void Clear(void)

Cette méthode supprime toutes les valeurs de séquence de tâches qui ont été enregistrées en mémoire.

HRESULT Remove([in] LPCTSTR variableName)

Cette méthode supprime une valeur de séquence de tâches spécifique de la mémoire. La prochaine fois que vous appelez GetValue avec le même nom de séquence de tâches, la méthode tente de la récupérer à partir de la séquence de tâches.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Chaque fois que des variables de séquence de tâches sont écrites, par exemple lorsque vous cliquez sur Terminer dans l’Assistant UDI, les noms et les valeurs sont écrits dans le fichier journal. Appelez cette méthode pour supprimer la journalisation des valeurs sensibles, telles que les mots de passe ou les codes confidentiels, pour une variable de séquence de tâches spécifique.

void Save(void)

Cette méthode enregistre toutes les valeurs de séquence de tâches qui ont été définies avec des appels à SetValue.

ITSVariableRepository, interface

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

Cette interface est destinée à une utilisation interne par TSVariableBag pour lire et écrire des variables de séquence de tâches.

IWizardFinish, interface

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

Cette interface est utile dans les scénarios avancés où vous souhaitez effectuer un traitement supplémentaire lorsque vous cliquez sur Terminer ou Annuler dans l’Assistant UDI. L’Assistant UDI contient une tâche Terminer qui enregistre les variables de séquence de tâches lorsque vous cliquez sur Terminer. Si vous annulez l’Assistant, la tâche définit uniquement la variable de séquence de tâches OSDSetupWizCancelled sur TRUE et n’enregistre pas les modifications apportées aux autres variables de séquence de tâches.

Si vous créez votre propre composant de fin, vous devez l’inscrire avec du code comme suit :

Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);  

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

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

pService->Register(pFinish);  

IBindableList, interface

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

Implémentez cette interface si vous avez un composant de source de données que vous souhaitez lier à une zone de liste déroulante en appelant sa méthode Bind .

size_t Count(void)

Cette méthode retourne le nombre d’éléments dans la liste.

HRESULT GetCaption(size_t index, LPBSTR pCaption)

Cette méthode retourne la légende de l’élément à un index spécifique.

IDataNodes, interface

__interface IDataNodes : IUnknown  
{  
    size_t Count();  
    HRESULT SetCaptionProperty(LPCTSTR captionProperty);  
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue);  
    HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode);  
};  

Cette interface permet d’accéder aux données hiérarchiques qui peuvent être enregistrées dans une page. Vous obtenez cette interface via les méthodes de l’interface ISettingsProperties , qui est disponible pour votre page via la méthode Settings .

Les données du code XML d’une page peuvent ressembler à ceci

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

L’appel de Settings()->GetDataNode(L"Network », &pData) vous donne une instance IDataNodes avec deux éléments de données (chacun ayant deux propriétés).

size_t Count()

Cette méthode retourne le nombre d’éléments DataItem .

HRESULT SetCaptionProperty(LPCTSTR captionProperty)

Le composant qui prend en charge cette interface prend également en charge IBindableList, ce qui facilite le remplissage d’une zone de liste déroulante avec les données du code XML de la page. Cette méthode contrôle la propriété (setter) de chaque élément DataItem qui sera utilisée pour cette liaison. Par exemple, vous pouvez appeler cette méthode avec DisplayName et utiliser cette propriété setter pour la liaison de données. La zone de liste déroulante contiendrait ensuite Public et Dev Team en tant qu’éléments.

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

Cette méthode obtient une propriété de l’un des éléments DataItem . Voir les tableaux 41 et 42.

Tableau 41. DataItem GetProperty

Paramètre Description
Index Valeur d’index (à partir de 0) de l’objet DataItem pour lequel vous souhaitez récupérer une valeur de propriété
propertyName Nom de la propriété setter pour laquelle vous souhaitez récupérer une valeur
Propertyvalue Au retour, contient la valeur de chaîne d’une propriété

Tableau 42. HRESULT GetProperty

[HRESULT] Description
S_OK La propriété a été récupérée.
E_INVALIDARG L’index est passé la fin du tableau.
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)

Cette méthode est similaire à GetProperty, mais au lieu de retourner une valeur à partir d’un Objet DataItem, elle renvoie l’intégralité de l’objet DataItem encapsulé dans une interface ISettingsProperties . Voir les tableaux 43 et 44.

Tableau 43. HRESULT GetNode

Paramètre Description
Index Valeur d’index (à partir de 0) de l’objet DataItem pour lequel vous souhaitez récupérer une valeur de propriété
ppNode À la sortie, l’interface ISettingsProperties qui encapsule le nœud DataItem

Tableau 44. HRESULT GetNode Results

[HRESULT] Description
S_OK Le nœud a été récupéré.
E_INVALIDARG L’index est passé la fin du tableau.

IFactoryRegistry, interface

__interface IFactoryRegistry : IUnknown  
{  
    void Register(LPCTSTR type,  IClassFactory *pFactory);  
    HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);  
    BOOL Contains(LPCTSTR type);  
    HRESULT GetFactory(LPCTSTR type,  IClassFactory **ppFactory);  
    HRESULT CreateInstance(LPCTSTR type,  IUnknown **ppInstance);  
    HRESULT SetContainer(IWizardPageContainer *pContainer);  
    HRESULT RegisterService(REFGUID iid, IUnknown *pService);  
    HRESULT GetService(REFGUID iid,  IUnknown **ppService);  
};  
Présentation

Lorsque vous créez une page personnalisée, vous devez au minimum créer une fabrique de pages, une classe qui implémente IClassFactory. (Vous pouvez utiliser ClassFactoryImpl comme classe de base pour votre fabrique.)

void Register(LPCTSTR type, IClassFactory *pFactory)

Cette méthode inscrit une fabrique de classes auprès du registre. Voir le tableau 45.

Tableau 45. IClassFactory void Register

Paramètre Description
Type Chaîne qui identifie la fabrique que vous inscrivez ; En règle générale, ce paramètre doit avoir le nom de votre société dans la chaîne pour s’assurer qu’il est unique
pFactory Pointeur vers votre instance de fabrique de classes
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)

Cette méthode est destinée à un usage interne uniquement.

BOOL Contains(type LPCTSTR)

Cette méthode est généralement destinée à un usage interne. Il vérifie si une fabrique de classes a été inscrite pour un type.

HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory)

Cette méthode vous permet de récupérer la fabrique de classe. En règle générale, vous appelez CreateInstance. Toutefois, si vous envisagez de créer un grand nombre du même composant, il est plus efficace de récupérer la fabrique, puis de lui demander de créer les instances pour vous.

HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance)

Cette méthode crée une instance d’un composant, en fonction de son type. Utilisez plutôt la méthode de modèle CreateInstance , qui permet la création d’objets de type sécurisé.

HRESULT SetContainer(IWizardPageContainer *pContainer)

Cette méthode est destinée à un usage interne uniquement.

HRESULT RegisterService(REFGUID iid, IUnknown *pService)

Les services sont des instances uniques d’un composant qui peuvent être utilisées à plusieurs endroits. Vous pouvez utiliser cette méthode pour inscrire un service sur une page, puis récupérer cette même instance à partir d’une autre page.

HRESULT GetService(REFGUID iid, IUnknown **ppService)

Cette méthode récupère un service précédemment inscrit avec un appel à RegisterService.

HRESULT SetLanguage(LANGID languageId)

Cette méthode définit la langue de l’Assistant UDI sur l’identificateur de langue que vous avez fourni dans le paramètre languageId .

LANGID GetLanguage()

Cette méthode retourne la valeur de l’identificateur de langue que vous avez fourni avec le paramètre de ligne de commande /locale pour l’Assistant UDI. La méthode retourne l’une des valeurs suivantes :

  • Valeur de l’identificateur de langue fourni avec le paramètre de ligne de commande /locale

  • 0, si vous n’avez pas fourni le paramètre de ligne de commande /locale

ILogger, interface

__interface ILogger : IUnknown  
{  
    HRESULT Init(LPCWSTR logFilename);  
    HRESULT MoveLog(LPCWSTR logFilename);  
    HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message);  
    HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message);  
    HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message);  
    HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Normal(LPCTSTR component, LPCTSTR message);      
    HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Verbose(LPCTSTR component, LPCTSTR message);  
    HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2);  
    HRESULT Debug(LPCWSTR component, LPCWSTR message);  
    HRESULT EnableDebug(BOOL debug);  
    HRESULT Close(void);  
    HRESULT GetLogFilename(LPBSTR pFilename);  
};  
Présentation

L’Assistant UDI enregistre des informations dans un fichier journal, ce qui permet de résoudre les problèmes détectés dans le champ. C’est une bonne idée pour vos pages de journaliser les informations. Vous pouvez obtenir un pointeur vers cette interface à partir de votre page à l’aide de la méthode Logger() de la page. Les lignes du fichier journal contiennent un nombre de « niveau » qui représente des messages d’erreur, normaux, détaillés ou de débogage.

Remarque

Les messages de débogage ne sont pas enregistrés dans le fichier journal, sauf si la prise en charge du débogage est activée. Vous pouvez activer la prise en charge du débogage en ajoutant la ligne suivante à l’élément Style dans le fichier .config :

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

Cette méthode est destinée à un usage interne uniquement.

MoveLog
HRESULT MoveLog(LPCWSTR logFilename)  

Cette méthode est destinée à un usage interne uniquement.

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

Cette méthode est destinée à un usage interne uniquement.

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

Cette méthode est destinée à un usage interne uniquement.

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

Appelez cette méthode pour journaliser les informations relatives à une erreur. Voir le tableau 46.

Tableau 46. Erreur HRESULT

Paramètre Description
Erreur Code d’erreur retourné par un appel (ce code s’affiche dans l’entrée de journal sous la forme d’un nombre.)
Composant Chaîne qui identifie la source de l’erreur, qui est généralement votre page ou le composant que vous avez écrit
Message Message qui explique la cause de l’erreur
Erreur2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

Cette méthode est similaire à la méthode Error , mais vous permet de fournir un message en deux parties. Le dernier message contient « message », puis « message2 » dans le fichier de sortie. Il s’agit simplement d’une méthode pratique.

Normal
HRESULT Normal(LPCTSTR component, LPCTSTR message)  

Cette méthode enregistre un message normal. Consultez la description de la méthode Error pour connaître les paramètres.

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

Cette méthode enregistre un message normal. Consultez la description de la méthode Error2 pour connaître les paramètres.

Détaillé
HRESULT Verbose(LPCTSTR component, LPCTSTR message)  

Cette méthode journalise un message détaillé. Consultez la description de la méthode Error pour connaître les paramètres.

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

Cette méthode journalise un message détaillé. Consultez la description de la méthode Error2 pour connaître les paramètres.

Débogage
HRESULT Debug(LPCWSTR component, LPCWSTR message)  

Cette méthode enregistre un message de débogage. Consultez la description de la méthode Error pour connaître les paramètres. Les messages de débogage ne sont pas enregistrés dans le fichier, sauf s’ils sont activés. Pour plus d’informations, consultez la section Vue d’ensemble.

EnableDebug
HRESULT EnableDebug(BOOL debug)  

Cette méthode est destinée à un usage interne uniquement.

Fermer
HRESULT Close(void)  

Cette méthode est destinée à un usage interne uniquement.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)  

Cette méthode récupère le nom du fichier journal.

IOrientation Interface

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

Cette interface est destinée à un usage interne uniquement.

ISettings, interface

__interface ISettings : IUnknown  
{  
    int NumDlls();  
    int NumPages();  

    HRESULT SetStage(LPCWSTR stageName);  
    HRESULT GetDllName(long index, __out LPBSTR pDllName);  
    HRESULT GetPageInfo(long index, __out ISettingsProperties **ppPageInfo);  
    HRESULT GetStyle(__out ISettingsProperties **ppStyleInfo);  
};  

Cette interface est destinée à un usage interne uniquement.

ISettingsProperties, interface

__interface ISettingsProperties : IUnknown  
{  
    HRESULT GetAttribute(LPCTSTR attributeName, __out LPBSTR attributeValue);  
    IStringProperties * Properties();  
    HRESULT SelectNodes(LPCTSTR xPath, __out IXMLDOMNodeList **ppList);  
    HRESULT SelectSingleNode(LPCTSTR xPath, __out IXMLDOMNode **ppNode);  
    HRESULT GetDataNode(LPCTSTR name, __out ISettingsProperties **ppNode);  
    HRESULT GetDataNodes(__out IDataNodes **ppNodes);  
    HRESULT GetChildDataNodes(LPCTSTR childeName, __out IDataNodes **ppNodes);  
};  
Présentation

Cette interface permet d’accéder aux données de page. Pour accéder au niveau supérieur des données de page, utilisez la méthode Settings() de la page.

HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)

Cette méthode vous permet de récupérer les valeurs des attributs sur le nœud principal, qui est le nœud Page lorsque vous utilisez la méthode Settings() de la page.

IStringProperties * Properties()

Cette méthode permet d’accéder aux valeurs de propriété setter sous le nœud principal. Pour une page, il s’agit des propriétés de niveau supérieur.

HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)

Appelez cette méthode si vous souhaitez obtenir directement une liste de nœuds XML à l’aide d’une expression XPath. Il est préférable d’utiliser l’une des autres méthodes si vous le pouvez. Utilisez cette méthode uniquement si vous ne pouvez pas accéder aux nœuds autrement.

HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)

Appelez cette méthode si vous souhaitez obtenir directement un nœud XML unique à l’aide d’une expression XPath. Il est préférable d’utiliser l’une des autres méthodes si vous le pouvez. Utilisez cette méthode uniquement si vous ne pouvez pas accéder à un nœud autrement.

HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)

Récupérez un élément Data en fonction de l’attribut Name de cet élément.

HRESULT GetDataNodes(IDataNodes **ppNodes)

Cette méthode récupère une liste d’éléments DataItem sous le nœud actuel. Au niveau de la page, appelez GetDataNode pour récupérer une interface ISettingsProperty pour les données. Ensuite, sur cette instance, appelez GetDataNodes pour récupérer la liste des enregistrements. Par exemple, compte tenu de ce code XML :

    <Page ...>  
      <Data Name="Network">  
        <DataItem>  
          <Setter Property="DisplayName">Public</Setter>  
          <Setter Property="Share">\\servername\Share</Setter>  
        </DataItem>  
        <DataItem>  
          <Setter Property="DisplayName">Dev Team</Setter>  
          <Setter Property="Share">\\servername\DevShare</Setter>  
        </DataItem>  
      </Data>  
PSettingsProperties pData;  
Settings()->GetDataNode(L"Network", &pData);  
PDataNodes pNodes;  
pData->GetDataNodes(&pNodes);  
HRESULT GetChildDataNodes(LPCTSTR childeName, IDataNodes **ppNodes)

Cette méthode fournit un moyen rapide d’accéder à l’ensemble de nœuds DataItem sous un nœud Data spécifique. À l’aide du code XML de l’exemple GetDataNodes , le code suivant effectue exactement la même chose que les quatre lignes de code de l’exemple sous GetDataNodes , mais avec vérification des erreurs :

ISimpleStringProperties Interface  

ISimpleStringProperties, interface

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

En soi, cette interface peut ne pas être utile. Toutefois, il est implémenté par le composant ID_SimpleStringProperties , qui implémente également l’interface IStringProperties . Vous pouvez utiliser ce composant dans les cas où vous devez transmettre un ensemble de propriétés à un autre composant, par exemple une tâche, mais où vous souhaitez ajouter des valeurs par programmation au lieu d’utiliser des valeurs à partir de XML. Voici un exemple d’utilisation de cette interface :

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

Cette interface fournit un accès simple à un ensemble d’éléments setter provenant de XML. Cette interface est disponible pour les propriétés d’une page à l’aide de Paramètres()->Propriétés().

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

Cette méthode récupère une valeur de propriété unique. Voir les tableaux 47 et 48.

Tableau 47. IHRESULT Get Property Value

Paramètre Description
propertyName Nom de la propriété que vous souhaitez lire
pPropValue Lors de la sortie, contient la valeur de la propriété sous forme de chaîne (cette valeur sera nullptr s’il n’existe aucune propriété de ce type.)

Tableau 48. IHRESULT Get Property Value Results

[HRESULT] Description
S_OK La valeur de la propriété est récupérée.
E_INVALIDARG Il n’existe aucune propriété avec le nom que vous avez fourni.

ITaskManager, interface

__interface ITaskManager : IUnknown  
{  
    HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback);  
    HRESULT SetFailMessage(LPCWSTR message);  

    HRESULT Start(void);  

    HRESULT GetTaskMessage(size_t index, LPBSTR message);  
    HRESULT GetResultType)(size_t index, LPBSTR type);  
    HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value);  
    int GetSelectedIndex(void);  
    HRESULT Wait(DWORD waitMilliseconds);  
    size_t FailedCount(void);  
    size_t WarningCount(void);  
    size_t SucceedCount(void);  
    size_t RunningCount(void);  

    void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo);  
    void OnControlEvent(WORD eventId, WORD controlId);  
    void EnableButtons(BOOL enable);  
}  

Cette interface est implémentée par le composant TaskManager (ID_TaskManager dans ITaskManager.h), qui est le composant qui exécute les tâches sur la page préliminaire. Vous pouvez utiliser directement la page préliminaire, ce que vous faites la plupart du temps, ou créer votre propre page, ce qui permet à ce composant d’effectuer la majeure partie du travail.

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

Vous devez appeler cette méthode avant d’appeler une autre méthode. Il initialise le composant TaskManager . Voir le tableau 49.

Tableau 49. HRESULT Init

Paramètre Description
pPageView Fournit l’accès à la page qui exécutera des tâches (cette page doit avoir un ensemble spécifique de contrôles, qui sont décrits dans les paramètres suivants.)
idListView ID de contrôle d’un contrôle ListView qui affiche la liste des tâches et l’état de ces tâches
idMessage ID de contrôle d’une zone de texte qui sera utilisée pour afficher un message pour la tâche que vous sélectionnez
idRetryButton ID de contrôle d’un bouton sur lequel vous pouvez cliquer pour réexécuter les tâches
pPageInfo Un wrapper autour du code XML de la page (TaskManager charge l’ensemble de tâches à exécuter à partir de ce code XML.)
pCallback Peut avoir la valeur Null (Si ce paramètre n’est pas null, TaskManager appelle la méthode Started lorsqu’il démarre une tâche et la méthode Finished pour chaque tâche qui se termine.)
HRESULT SetFailMessage(message LPCWSTR)

Cette méthode définit le message qui s’affiche en cas d’échec d’une ou de plusieurs tâches.

HRESULT Start(void)

Cette méthode démarre toutes les tâches. Chaque tâche est démarrée sur un thread distinct.

HRESULT GetTaskMessage(index size_t, message LPBSTR)

Cette méthode est destinée à un usage interne uniquement. Il récupère le message actuel d’une tâche en fonction de son index dans la liste des tâches.

HRESULT GetResultType)(index size_t, type LPBSTR)

Cette méthode récupère le « type » actuel pour une tâche. Le tableau 50 présente les types disponibles.

Tableau 50. HRESULT GetResultType

Type Description
0 Représente une tâche qui a réussi
1 Représente une tâche qui a retourné un avertissement
-1 Représente une tâche ayant échoué

Le type est récupéré en examinant le code de sortie ou d’erreur de la tâche et en recherchant une correspondance dans l’élément XML ExitCodes> de <la tâche.

HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value)

Cette méthode est utilisée par les pages progress et preflight pour récupérer la propriété bitmapFilename setter afin qu’elle puisse afficher une image en regard du message de la tâche que vous mettez en surbrillance. En d’autres termes, vous pouvez ajouter un setter personnalisé au xml de la tâche, puis le récupérer avec cette méthode.

int GetSelectedIndex(void)

Cette méthode récupère l’index de la tâche actuellement sélectionnée, ce qui est utile si vous souhaitez récupérer des informations supplémentaires sur la tâche (voir méthode GetProperty ) à afficher pour la tâche sélectionnée. Les pages de progression et de préversion utilisent cette méthode pour afficher une image pour la tâche sélectionnée.

HRESULT Wait(DWORD waitMilliseconds)

Cette méthode aide principalement avec les tests unitaires afin que le test puisse s’assurer que les tâches se terminent avant la fin du test unitaire. Normalement, vous n’appelez pas cette méthode. Elle retourne une fois que toutes les tâches se terminent ou que le temps d’attente s’est écoulé.

size_t FailedCount(void)

Cette méthode retourne le nombre de tâches actuellement marquées comme ayant échoué.

size_t WarningCount(void)

Cette méthode retourne le nombre de tâches actuellement marquées comme avertissement.

size_t SucceedCount(void)

Cette méthode retourne le nombre de tâches actuellement marquées comme ayant réussi.

size_t RunningCount(void)

Cette méthode retourne le nombre de tâches en cours d’exécution.

void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)

Appelez cette méthode à partir de l’onCommonControlEvent de votre page afin que taskManager puisse traiter les événements dont il a besoin.

void OnControlEvent(WORD eventId, WORD controlId)

Appelez cette méthode à partir de l’onControlEvent de votre page afin que le TaskManager puisse traiter les événements dont il a besoin.

void EnableButtons(BOOL enable)

Cette méthode est destinée à un usage interne uniquement.

IWizardComponent, interface

__interface IWizardComponent : IUnknown  
{  
    HRESULT SetContainer(IWizardPageContainer *pContainer);  
};  
Présentation

En règle générale, vous n’implémentez pas cette interface directement, mais plutôt via la classe de modèle WizardComponent . Si votre composant implémente cette interface et que vous avez inscrit une fabrique de classes auprès du registre, votre composant reçoit un pointeur vers l’instance IWizardPageContainer lors de sa création. Cela vous permet, par exemple, d’accéder à l’enregistreur d’événements ou au Registre pour créer d’autres composants dont votre composant peut avoir besoin.

IWizardDialogController, interface

__interface IWizardDialogController : IUnknown  
{  
    void Initialize(ISettings *pSettings);  
    void InitPages(void);  
    void Start();  
    void Next();  
    void Finish();  
    void Previous();  
    int NumPages();  
    void Cancel();  

    HRESULT Focus(WizardButtons button);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage();  

    void ChangePage(size_t newIndex);  
    IUnknown *CurrentPage(void);  
    HRESULT GetCurrentTitle([out, retval] LPBSTR pDisplayName);  
};  

Cette interface est destinée à un usage interne uniquement.

IWizardDialogView, interface

__interface IWizardDialogView : IUnknown  
{  
    HRESULT LoadBannerImage(LPCTSTR bannerFilename);  
    HRESULT LoadPage(LPCTSTR pageType, ISettingsProperties *pPageSettings, IWizardPageView **view);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    HRESULT Focus(WizardButtons button);  
    void EnableFinish(BOOL isFinish);  
    void Exit(int exitCode);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage(void);  
    void SetTitle(LPCTSTR title);  
    void SetPageTitle(LPCTSTR title);  
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);  
    HWND GetHwnd(void);  
    void UpdateFocus(void);  
};  

Cette interface est destinée à un usage interne uniquement.

IWizardPage, interface

__interface IWizardPage : IUnknown  
{  
    HRESULT SetPageSettings(ISettingsProperties *pPageSettings);  
    HINSTANCE GetInstanceHandle(void);  
    int GetDialogResourceId(void);  
    void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);  
    void WindowShown(void);  
    void WindowHidden(void);  

    HRESULT 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);  
};  
Présentation

Cette interface étant implémentée par WizardPageImpl, vous n’aurez généralement pas à l’implémenter vous-même. L’Assistant appelle toutes ces méthodes pour vous lorsqu’il interagit avec vos pages personnalisées.

IWizardPageContainer, interface

__interface IWizardPageContainer : IUnknown  
{  
    ILogger * Logger(void);  
    IPropertyBag * Properties(void);  
    HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance);  
    HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance);  
    HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest);  
    HRESULT GotoPage(LPCTSTR pageName);  
    int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);  
    BOOL InPreview(void);  
    HWND GetHwnd(void);  
};  
Présentation

Cette interface est disponible pour votre page via la méthode Container (implémentée par WizardPageImpl) et vous donne accès à différents services de l’Assistant.

ILogger * Logger(void)

Utilisez cette méthode pour écrire des messages dans le fichier journal, par exemple :

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

Cette méthode permet d’accéder aux variables « mémoire », qui sont des propriétés qui sont en mémoire uniquement pendant l’exécution de l’Assistant UDI. Ces propriétés sont disponibles pour d’autres pages dans le code ou dans le code XML à l’aide de la syntaxe $memoryVarName$ .

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

Cette méthode vous permet de créer une instance de n’importe quel composant qui a été inscrit. Toutefois, il est préférable d’utiliser la fonction de modèle CreateInstance, car elle est fortement typée.

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

Cette méthode vous permet de récupérer un service qui a été inscrit. Toutefois, il est préférable d’appeler la fonction de modèle GetService , qui est fortement typée (au lieu d’utiliser IUnknown).

HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)

Cette méthode gère l’utilisation de variables à l’intérieur de valeurs de chaîne. Il prend en charge les formats indiqués dans les tableaux 51 et 52.

Tableau 51. HRESULT ReplaceVariables

Format Description
$Name$ Remplace la valeur d’une variable mémoire par ce nom (s’il n’existe aucune variable mémoire avec le nom, le « jeton » est supprimé.)
%Name% Variable de séquence de tâches ou variable d’environnement. L’ordre est le suivant :

1. Utilisez la valeur d’une variable de séquence de tâches, le cas échéant.
2. Utilisez la valeur d’une variable d’environnement, le cas échéant.
3. Sinon, supprimez ce texte de la chaîne.

Tableau 52. HRESULT, paramètre

Paramètre Description
Source Chaîne d’entrée, qui peut contenir n’importe quelle combinaison de $ variables et % ou aucune du tout
pDest Au retour, contient une nouvelle chaîne dont tous les jetons sont remplacés conformément au tableau 51
HRESULT GotoPage(LPCTSTR pageName)

Cette méthode n’a pas été entièrement testée. L’idée est que vous pouvez basculer directement vers une page spécifique en fonction du nom de la page tel que défini dans le fichier XML .config. L’appel de cette méthode contourne onNextClicked sur votre page. En outre, le comportement de cette méthode est susceptible de changer. Utilisez-la donc à vos propres risques.

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

Cette méthode affiche une zone de message avec le texte et la légende que vous fournissez. Le paramètre uType est toute valeur que vous pouvez fournir à la fonction MessageBox Win32.

BOOL InPreview(void)

Cette méthode retourne TRUE si vous avez lancé l’Assistant en mode « préversion » en fournissant le commutateur /preview . En mode aperçu, le bouton Suivant n’est jamais désactivé. Cette méthode vous permet de contourner le code en mode aperçu, par exemple, qui peut entraîner des problèmes lorsque vous n’avez pas de données valides sur la page.

HWND GetHwnd(void)

Cette méthode retourne le HWND pour la boîte de dialogue principale. Utilisez cette méthode avec précaution. En règle générale, l’interface de programmation d’application de l’Assistant UDI est conçue pour ne jamais travailler directement avec les poignées de fenêtre.

IWizardPageView, interface

__interface IWizardPageView : IUnknown  
{  
    HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown **ppControl);  
    HWND GetHwnd(void);  
    HWND GetControl(int itemId);  
    HRESULT Show (void);  
    HRESULT Hide(void);  
    HRESULT Focus(int itemId);  
    IWizardPage * Page(void);  
    IFormController * Form(void);  

    HRESULT FocusWizardButton(WizardButtons button);  
    HRESULT SetEnable(WizardButtons button, BOOL enable);  
    void ShowWarningMessage(LPCTSTR message);  
    void HideWarningMessage(void);  
};  

Cette interface est disponible pour le code de votre page via la méthode View (implémentée par WizardPageImpl).

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

L’Assistant UDI utilise des wrappers, qui sont vraiment des façades pour interagir avec les contrôles de votre page. L’utilisation de ces façades au lieu des contrôles réels facilite considérablement l’écriture de tests pour votre page, car vous pouvez fournir des façades fictives à partir de vos tests.

Au lieu d’utiliser cette méthode directement, il est préférable d’utiliser la méthode de modèle GetControlWrapper , qui est fortement typée, par exemple :

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

Cette méthode retourne le handle de fenêtre de votre page. En règle générale, vous n’avez pas besoin d’accéder à ce handle de fenêtre.

HWND GetControl(int itemId)

Si vous le souhaitez, vous pouvez appeler cette méthode pour obtenir le handle de fenêtre d’un contrôle sur votre page. (Il est préférable d’appeler la fonction de modèle GetControlWrapper ).

HrESULT Show (void)

Cette méthode est destinée à un usage interne uniquement.

HRESULT Hide(void)

Cette méthode est destinée à un usage interne uniquement.

HRESULT Focus(int itemId)

Définissez le focus d’entrée sur un contrôle spécifique.

IWizardPage * Page(void)

Cette méthode est destinée à un usage interne uniquement.

IFormController * Form(void)

Cette méthode est destinée à un usage interne uniquement.

HRESULT FocusWizardButton(WizardButtons button)

Définit le focus sur l’un des boutons de l’Assistant. WizardButtons a deux valeurs : BackButton et NextButton.

HRESULT SetEnable(WizardButtons button, BOOL enable)

Demandez que l’un des boutons de l’Assistant soit activé ou désactivé. Le bouton peut ne pas correspondre à l’état que vous demandez. Par exemple, si vous exécutez l’Assistant UDI avec le commutateur /preview , les boutons sont toujours activés. WizardButtons a deux valeurs : BackButton et NextButton.

void ShowWarningMessage(message LPCTSTR)

Cette méthode affiche un message d’avertissement en bas de la zone de contenu de la page. Ce message peut être n’importe quel texte de votre choix.

void HideWarningMessage(void)

Masquez un message d’avertissement que vous avez affiché avec un appel à ShowWarningMessage.

IXmlDocument, interface

__interface IXmlDocument : IUnknown  
    HRESULT Load(LPCTSTR filename);  
    HRESULT LoadXml(LPCTSTR xml);  
    HRESULT Save(LPCWSTR filename);  
    HRESULT GetParseErrorMessage(LPBSTR pMessage);  
    HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes);  
    HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode);  
    HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns);  
    HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value);  
    HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode);  
};  
Présentation

Cette interface est implémentée par le composant ID_IXmlDocument , qui est une façade conçue pour faciliter l’utilisation de documents XML en C++.

HRESULT Load(LPCTSTR filename)

Cette méthode charge un document XML à partir d’un fichier externe. Elle retourne S_OK si le fichier a été chargé sans erreur ou S_FALSE si une erreur s’est produite. En cas d’erreur, vous pouvez obtenir le message d’erreur en appelant GetParseErrorMessage.

HRESULT LoadXml(LPCTSTR xml)

Cette méthode charge un document XML à partir d’une chaîne au lieu d’un fichier externe. En dehors de la source pour la lecture du code XML, le comportement est le même que celui de la méthode Load .

HRESULT Save(LPCWSTR filename)

Cette méthode enregistre le document XML qui est en mémoire dans un fichier externe.

HRESULT GetParseErrorMessage(LPBSTR pMessage)

Cette méthode retourne une nouvelle chaîne avec le message d’erreur du chargement du document XML, le cas échéant. Elle retourne toujours S_OK.

HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)

Cette méthode vous permet d’utiliser une expression XPath pour récupérer une collection de nœuds du document. Elle retourne toujours S_OK.

HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)

Cette méthode vous permet d’utiliser une expression XPath pour récupérer un nœud du document. Elle retourne toujours S_OK.

HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns)

Cette méthode ajoute le nom d’un fichier de schéma externe qui sera utilisé pour valider le schéma de votre document XML lors de son chargement. L’espace de noms que vous fournissez est la chaîne que vous pouvez utiliser dans les requêtes XPath, bien que cela n’ait pas été testé.

HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value)

Cette méthode ajoute un nouvel attribut à un nœud existant dans le document XML. Voir le tableau 53.

Tableau 53. HRESULT AddAttribute

Paramètre Description
pNode Nœud auquel vous souhaitez ajouter un attribut
Name Nom du nouvel attribut
Valeur Valeur du nouvel attribut
HRESULT CreateNode(TYPE DOMNodeType, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode)

Appelez cette méthode pour créer un nœud :

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

Une fois que vous avez créé un nœud, vous pouvez l’ajouter en tant qu’enfant à un autre nœud en appelant la méthode appendChild du parent.

Fonctions d’assistance

CreateInstance, fonction de modèle

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

Cette fonction est définie dans IWizardPageContainer.h et fournit un wrapper de type sécurisé sur la méthode IWizardPageContainer-CreateInstance>, par exemple :

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

Ce code crée un composant ID_Directory pour récupérer l’interface IDirectory de ce composant.

GetService Template Function

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

Cette fonction est définie dans IWizardPageContainer.h et fournit un wrapper de type sécurisé sur la méthode IWizardPageContainer-GetService>, par exemple :

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

Cette fonction récupère le composant de séquence de tâches, qui prend en charge l’interface ITSVariableBag . (Pour ITSVariableBag, vous pouvez utiliser la méthode TSVariables de la classe WizardPageImpl à la place.)

Informations de référence sur le schéma du fichier de configuration de l’Assistant UDI

Ce fichier est utilisé par le concepteur de l’Assistant UDI. Un fichier distinct est créé pour chaque fichier de .dll personnalisé, qui peut contenir des éditeurs de page d’Assistant personnalisés, des tâches personnalisées ou des validateurs personnalisés. Le fichier doit se terminer par .config et résider dans le dossier installation_folder\Bin\Config (où installation_folder est le dossier dans lequel vous avez installé MDT).

Le tableau 54 répertorie les éléments du fichier de configuration UDI Wizard Designer et leurs descriptions. L’élément DesignerConfig est le nœud racine de cette référence.

Tableau 54. Éléments dans le fichier de configuration du concepteur de l’Assistant UDI et leurs descriptions

Nom de l’élément Description
DesignerConfig Spécifie la racine de tous les autres éléments
DesignerMappings Regroupe un ensemble d’éléments Page
Page Spécifie un éditeur de page de l’Assistant à charger dans le concepteur de l’Assistant UDI, qui est utilisé pour modifier les paramètres de configuration d’une page d’Assistant
Param Spécifie un paramètre qui est passé à l’élément Parent Task ou Validator et qui correspond à un élément Setter dans le fichier de configuration de l’Assistant UDI Remarque : Les attributs de cet élément sont différents si le parent est l’élément Task ou Validator .
Tâche Spécifie une tâche dans la bibliothèque de tâches
TaskItem Spécifie un groupe de paramètres qui sont passés à la tâche
TaskLibrary Regroupe un ensemble d’éléments Task
Validateur Spécifie un validateur dans la bibliothèque du validateur
ValidatorLibrary Regroupe un ensemble d’éléments validator

DesignerConfig

Cet élément spécifie la racine de tous les autres éléments.

Informations sur l’élément

Le tableau 55 fournit des informations sur l’élément DesignerConfig .

Tableau 55. Informations sur l’élément DesignerConfig

Attribut Valeur
Nombre d’occurrences Un : cet élément est obligatoire.
Éléments parents Aucun
Sommaire DesignerMappings, TaskLibrary, ValidatorLibrary
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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

DesignerMappings

Cet élément regroupe un ensemble d’éléments Page .

Informations sur l’élément

Le tableau 56 fournit des informations sur l’élément DesignerMappings .

Tableau 56. Informations sur l’élément DesignerMappings

Attribut Valeur
Nombre d’occurrences Zéro ou un dans l’élément DesignerConfig (cet élément est facultatif s’il n’existe aucune page d’Assistant personnalisée dans la DLL qui correspond à ce fichier de configuration UDI Wizard Designer.)
Éléments parents DesignerConfig
Sommaire Page
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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

Page

Cet élément spécifie un éditeur de page de l’Assistant à charger dans le concepteur de l’Assistant UDI, qui est à son tour utilisé pour modifier les paramètres de configuration d’une page d’Assistant.

Informations sur l’élément

Le tableau 57 fournit des informations sur l’élément Page .

Tableau 57. Informations sur les éléments de page

Attribut Valeur
Nombre d’occurrences Un ou plusieurs pour chaque page d’Assistant définie dans l’élément DesignerMappings
Éléments parents DesignerMappings
Sommaire Tout contenu XML bien formé
Attributs d’élément

Le tableau 58 répertorie les attributs de l’élément Page et une description pour chacun d’eux.

Tableau 58. Attributs et valeurs correspondantes pour l’élément Page

Attribut Description
Description Spécifie le texte qui fournit des informations sur le paramètre, qui est affiché dans le concepteur de l’Assistant UDI
DesignerAssembly Spécifie le nom du fichier .dll associé à l’éditeur de page de l’Assistant (le fichier .dll doit exister dans le dossier installation_folder\Bin (où installation_folder est le dossier dans lequel vous avez installé MDT.)
DesignerType Spécifie le nom de l’éditeur de page de l’Assistant dans le fichier .dll spécifié dans l’attribut DesignerAssembly (il s’agit du type .NET Microsoft pour l’éditeur de page de l’Assistant, avec l’espace de noms complet Microsoft .NET.)
DisplayName Spécifie le nom convivial de l’éditeur de page, qui est affiché dans le concepteur de l’Assistant UDI
DLL Spécifie le nom du fichier .dll associé à la page de l’Assistant (le fichier .dll doit exister dans le dossier installation_folder\Templates\Distribution\Tools\platform (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateformeest x86 pour la version 32 bits ou x64 pour la version 64 bits.) Note: Vérifiez que l’architecture du processeur DLL correspond à l’architecture du processeur MDT installée. Par exemple, si vous avez installé une version 32 bits de MDT, veillez à utiliser une DLL 32 bits pour la page de l’Assistant.
Image Spécifie le nom d’une image de la page au format PNG (Portable Network Graphics) (le fichier .png doit exister dans le dossier installation_folder\Bin\Images (où installation_folder est le dossier dans lequel vous avez installé MDT.)
Type Spécifie l’éditeur de page de l’Assistant et doit correspondre au nommé utilisé lors de l’inscription de la page personnalisée
Remarques

Le concepteur de l’Assistant UDI utilise l’élément Page comme un modèle pour créer le code XML initial d’un nouvel Assistant. Le concepteur de l’Assistant UDI effectue la validation du schéma pour s’assurer que les éléments Page et enfants ont un format valide. Cet élément fournit un mappage entre le type de page de l’Assistant UDI et les informations dont le Concepteur de l’Assistant UDI a besoin pour modifier et créer des pages de ce type à l’aide d’un éditeur de page personnalisé.

Exemple

Aucun.

Param

Cet élément spécifie un paramètre qui est passé à l’élément Task ou Validator parent et correspond à un élément Setter dans le fichier de configuration de l’Assistant UDI.

Remarque

Les attributs de cet élément sont différents si le parent est l’élément Task ou Validator .

Informations sur l’élément

Le tableau 59 fournit des informations sur l’élément Param .

Tableau 59. Informations sur l’élément Param

Attribut Valeur
Nombre d’occurrences Un ou plusieurs pour chaque élément parent TaskItem ou Validator
Éléments parents TaskItem, Validateator
Sommaire Tout contenu XML bien formé
Attributs d’élément

Le tableau 60 répertorie les attributs de l’élément Param et fournit une description de chacun d’eux.

Tableau 60. Attributs et valeurs correspondantes pour l’élément Param

Attribut Description
Description Spécifie le texte qui fournit des informations sur le paramètre, qui est affiché dans le concepteur de l’Assistant UDI Remarque : cet attribut est valide uniquement pour l’élément Validator .
DisplayName Spécifie le nom convivial du paramètre de validateur, qui est affiché pour la page de l’Assistant UDI appropriée dans le concepteur de l’Assistant UDI (ce nom est généralement plus descriptif que l’attribut Name .) Note: Cet attribut est valide uniquement pour l’élément Validator .
Name Spécifie le nom du paramètre qui est passé à la tâche ou au validateur, en fonction de l’élément parent (cet attribut deviendra l’attribut Property dans un élément Setter dans le fichier de configuration de l’Assistant UDI.) Note: Ce paramètre est utilisé pour les éléments parent TaskItem et Validator .
Remarques

Aucun.

Exemple

Aucun.

Tâche

Cet élément spécifie une tâche dans la bibliothèque de tâches.

Informations sur l’élément

Le tableau 61 fournit des informations sur l’élément Task .

Tableau 61. Informations sur l’élément Task

Attribut Valeur
Nombre d’occurrences Un ou plusieurs éléments dans l’élément TaskLibrary (cet élément n’est pas facultatif si l’élément TaskLibrary est spécifié.)
Éléments parents TaskLibrary
Sommaire TaskItem
Attributs d’élément

Le tableau 62 répertorie les attributs de l’élément Task et fournit une description de chacun d’eux.

Tableau 62. Attributs et valeurs correspondantes pour l’élément Task

Attribut Description
Description Spécifie le texte qui fournit des informations sur la tâche, qui est affiché dans le concepteur de l’Assistant UDI
DLL Spécifie le nom du fichier .dll associé à la tâche (le fichier .dll doit exister dans le dossier installation_folder\Templates\Distribution\Tools\platform (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateforme est x86 pour la version 32 bits ou x64 pour la version 64 bits.)
Name Spécifie le nom de la tâche, qui est affiché dans la page de l’Assistant UDI appropriée et dans le concepteur de l’Assistant UDI
Type Spécifie le type de tâche, qui est inscrit auprès du registre de fabrique et utilisé pour appeler une tâche spécifique dans un fichier .dll
Remarques

Aucun.

Exemple

Aucun.

TaskItem

Cet élément spécifie un groupe de paramètres qui sont passés à la tâche.

Informations sur l’élément

Le tableau 63 fournit des informations sur l’élément TaskItem .

Tableau 63. Informations sur l’élément TaskItem

Attribut Valeur
Nombre d’occurrences Un ou plusieurs pour chaque élément Task
Éléments parents Tâche
Sommaire Param
Attributs d’élément

Le tableau 64 répertorie les attributs de l’élément TaskItem et fournit une description de chacun d’eux.

Tableau 64. Attribut et valeurs correspondantes pour l’élément TaskItem

Attribut Description
Type Spécifie le type d’élément qui sera créé dans le fichier de configuration de l’Assistant UDI. Un élément XML qui correspond à la valeur de cet attribut sera créé. Par exemple, si la valeur de cet attribut est File, un élément File est créé dans le fichier de configuration de l’Assistant UDI.

Actuellement, les seules valeurs prises en charge sont les suivantes :

- File, qui nécessite deux éléments enfants Param (un élément enfant Param avec l’attribut Name défini sur Source et un autre élément enfant Param avec l’attribut Name défini sur Dest)
- Setter, qui nécessite un élément enfant Param
Remarques

Aucun.

Exemple

Aucun.

TaskLibrary

Cet élément regroupe un ensemble d’éléments Task .

Informations sur l’élément

Le tableau 65 fournit des informations sur l’élément TaskLibrary .

Tableau 65. Informations sur l’élément TaskLibrary

Attribut Valeur
Nombre d’occurrences Zéro ou un dans l’élément DesignerConfig (cet élément est facultatif s’il n’existe aucune tâche personnalisée dans la DLL qui correspond à ce fichier de configuration UDI Wizard Designer.)
Éléments parents DesignerConfig
Sommaire Tâche
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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

Validateur

Cet élément spécifie un validateur dans la bibliothèque du validateur.

Informations sur l’élément

Le tableau 66 fournit des informations sur l’élément Validator .

Tableau 66. Informations sur l’élément Validator

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans l’élément ValidatorLibrary (cet élément est facultatif.)
Éléments parents ValidatorLibrary
Sommaire Param
Attributs d’élément

Le tableau 67 répertorie les attributs de l’élément Validator et fournit une description de chacun d’eux.

Tableau 67. Attributs et valeurs correspondantes pour l’élément Validator

Attribut Description
Description Spécifie le texte qui fournit des informations sur le validateur, qui est affiché dans le concepteur de l’Assistant UDI
DisplayName Spécifie le nom convivial du validateur affiché dans le concepteur de l’Assistant UDI (ce nom est généralement plus descriptif que l’attribut Name .)
DLL Spécifie le nom du fichier .dll associé au validateur (le fichier .dll doit exister dans le dossier installation_folder\Templates\Distribution\Tools\platform (où installation_folder est le dossier dans lequel vous avez installé MDT et la plateformeest x86 pour la version 32 bits ou x64 pour la version 64 bits.)
Name Spécifie le nom du validateur, qui est affiché dans la page de l’Assistant UDI appropriée et dans le concepteur de l’Assistant UDI
Type Spécifie le type de validateur, qui est inscrit avec le facteur de Registre et utilisé pour appeler un validateur spécifique dans un fichier .dll
Remarques

Aucun.

Exemple

Aucun.

ValidatorLibrary

Cet élément regroupe un ensemble d’éléments Validator .

Informations sur l’élément

Le tableau 68 fournit des informations sur l’élément ValidatorLibrary .

Tableau 68. Informations sur l’élément ValidatorLibrary

Attribut Valeur
Nombre d’occurrences Zéro ou un dans l’élément DesignerConfig (cet élément est facultatif s’il n’existe aucun validateur personnalisé dans la DLL qui correspond à ce fichier de configuration UDI Wizard Designer.)
Éléments parents DesignerConfig
Sommaire Validateur
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL=" » Description="Nécessite du texte dans un champ » Type="Microsoft. Wizard.Validation.NonEmpty » Name="NonEmpty »> +<Validator DLL=" » Description="Ne permet pas que certains caractères se trouvent dans un champ » Type="Microsoft. Wizard.Validation.InvalidChars » Name="InvalidChars »> +<Validator DLL=" » Description="Doit suivre un modèle prédéfini » Type="Microsoft. Wizard.Validation.RegEx » Name="NamedPattern »> +<Validator DLL=" » Description="Exiger que le contenu corresponde à une expression régulière » Type="Microsoft. Wizard.Validation.RegEx » Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>

Informations de référence sur le concepteur de l’Assistant UDI

Contrôles

Les contrôles utilisés pour créer des éditeurs de pages d’Assistant personnalisés à utiliser dans le concepteur d’assistant UDI sont des instances UserControl WPF. Le tableau 69 répertorie les contrôles que vous pouvez utiliser pour créer des éditeurs de page d’Assistant personnalisés.

Tableau 69. Contrôles qui peuvent être utilisés pour créer des éditeurs de page de l’Assistant personnalisé

Contrôle Description
CollectionTControl Ce contrôle est utilisé pour modifier les données stockées dans l’élément Data au sein d’un élément Page .
FieldElementControl Ce contrôle est utilisé pour modifier un champ, qui est généralement lié à un contrôle TextBox sur la page .xaml.
SetterControl Ce contrôle est utilisé pour modifier la valeur d’un élément setter dans le fichier de configuration de l’Assistant UDI.

CollectionTControl

Ce contrôle fournit de nombreuses fonctionnalités pour la modification des données. La meilleure façon d’apprendre à utiliser ce contrôle consiste à examiner l’exemple, qui montre comment modifier des données sous l’élément Data d’une page. En particulier, l’exemple montre comment ajouter, supprimer et modifier des éléments dans ce contrôle.

FieldElementControl

Utilisez ce contrôle pour modifier un champ, qui est généralement lié à un contrôle TextBox sur la page .xaml.

Exemple

L’extrait suivant d’un fichier .xaml illustre l’utilisation de FieldElementControl pour configurer la valeur par défaut d’un champ sur une page d’Assistant à l’aide d’un contrôle TextBox enfant :

<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>  
Propriétés
FieldData

Cette propriété de chaîne contient des informations pour connecter fieldElementControl au code XML sous-jacent du champ. La connexion est établie à une propriété de l’interface de l’éditeur de page. L’extrait suivant d’un fichier .xaml illustre l’utilisation de la propriété FieldData :

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

Dans cet extrait, l’interface de l’éditeur de page est appelée ControlRoot et est spécifiée dans le paramètre ElementName . La liaison est effectuée à la propriété DataContext.Location de l’interface de l’éditeur de page ControlRoot . DataContext est un modèle de vue qui pointe vers l’élément Page dans le fichier de configuration de l’Assistant UDI. Location est une propriété de la vue qui retourne une liste des emplacements possibles et est définie par un élément Data dans le fichier de configuration de l’Assistant UDI. Chaque emplacement est défini par un élément DataItem dans le fichier de configuration de l’Assistant UDI.

HeaderText

Cette propriété de chaîne vous permet de spécifier un en-tête pour le contrôle FieldElementControl . L’en-tête agit comme un titre pour le contrôle et est mis en gras, texte orange affiché immédiatement au-dessus du contrôle.

InstructionText

Cette propriété de chaîne vous permet de spécifier du texte d’information pour le contrôle FieldElementControl . En règle générale, le texte est utilisé pour fournir une brève description du champ et expliquer comment la configuration du champ affecte la page de l’Assistant correspondante.

HideEnableButton

Cette propriété booléenne vous permet de contrôler la visibilité du bouton qui change d’état entre Déverrouillé et Verrouillé (activé ou désactivé). Si la valeur est définie sur :

  • True, le bouton n’est pas visible

  • False, le bouton est visible (il s’agit de la valeur par défaut.)

HideDefaultTab

Cette propriété booléenne vous permet de contrôler la visibilité de la section qui contient le contrôle utilisé pour définir la valeur par défaut. Bien que la propriété fasse référence à un onglet, il n’y a pas d’onglet dans FieldElementControl , mais plutôt une section qui peut être masquée. Si la valeur est définie sur :

  • True, la section n’est pas visible

  • False, la section est visible (il s’agit de la valeur par défaut.)

HideBorder

Cette propriété booléenne vous permet de contrôler la visibilité de la bordure autour du contrôle de champ. Si la valeur est définie sur :

  • True, la bordure n’est pas visible

  • False, la bordure est visible (il s’agit de la valeur par défaut.)

HideImage

Cette propriété booléenne vous permet de contrôler la visibilité de l’image configurée par la propriété FieldImageSource . Si la valeur est définie sur :

  • True, l’image n’est pas visible

  • False, l’image est visible (il s’agit de la valeur par défaut.)

HideValidationTab

Cette propriété booléenne vous permet de contrôler la visibilité de la section dans laquelle la liste des validateurs est gérée. Bien que la propriété fasse référence à un onglet, il n’y a pas d’onglet dans FieldElementControl , mais plutôt une section qui peut être masquée. Si la valeur est définie sur :

  • True, la section n’est pas visible

  • False, la section est visible (il s’agit de la valeur par défaut.)

HideSummaryTab

Cette propriété booléenne vous permet de contrôler la visibilité de la section dans laquelle vous configurez la légende du résumé du champ. La légende et la valeur correspondante du champ s’affichent dans un type de page de l’Assistant SummaryPage dans un flux de phase. Bien que la propriété fasse référence à un onglet, il n’y a pas d’onglet dans FieldElementControl , mais plutôt une section qui peut être masquée. Si la valeur est définie sur :

  • True, la section n’est pas visible

  • False, la section est visible (il s’agit de la valeur par défaut.)

HideTaskSequenceTab

Cette propriété booléenne vous permet de contrôler la visibilité de la section dans laquelle vous configurez la variable de séquence de tâches qui correspond au champ. Bien que la propriété fasse référence à un onglet, il n’y a pas d’onglet dans FieldElementControl , mais plutôt une section qui peut être masquée. Si la valeur est définie sur :

  • True, la section n’est pas visible

  • False, la section est visible (il s’agit de la valeur par défaut.)

SetterControl

Utilisez ce contrôle pour modifier la valeur d’un élément Setter dans le fichier de configuration de l’Assistant UDI. Ce contrôle contient un contrôle enfant utilisé pour modifier la valeur de l’élément setter .

Exemple

L’extrait suivant d’un fichier .xaml illustre l’utilisation de SetterControl pour modifier un élément Setter nommé KeyLocationSetter à l’aide d’un contrôle TextBox enfant.

<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>  
Propriétés
SetterData

Vous devez lier cette propriété à une propriété de votre vue ou modèle de vue qui se connecte à l’élément setter. Cela est similaire à la façon dont vous lieriez à un champ, comme décrit pour FieldElementControl.

HeaderText

Cette propriété vous permet de définir le texte qui apparaîtra dans l’en-tête du contrôle. Considérez cette propriété comme un titre pour le contrôle ; par défaut, il apparaît en gras, en orange.

InstructionText

Définissez cette propriété sur le texte que vous souhaitez afficher sous l’en-tête, généralement un texte d’instruction qui indique à l’utilisateur de votre éditeur personnalisé quand et pourquoi il souhaite modifier le comportement du champ.

Interfaces

Le tableau 70 répertorie les interfaces que vous pouvez utiliser pour créer des éditeurs de page d’Assistant personnalisés.

Tableau 70. Interfaces qui peuvent être utilisées pour créer des éditeurs de page de l’Assistant personnalisé

Interface Description
IDataService Utilisez cette interface pour connecter des champs aux éléments Data dans le fichier de configuration de l’Assistant UDI.
IMessageBoxService Cette interface permet d’accéder aux méthodes que vous pouvez utiliser pour afficher des boîtes de message.

IDataService

Cette interface contient plusieurs propriétés et méthodes, mais il n’y a qu’une seule propriété dont vous aurez besoin. Cette propriété est la seule décrite ici.

Vous pouvez utiliser l’injection de dépendances pour obtenir un pointeur vers cette interface à l’aide de code comme celui-ci dans votre classe :

[Dependency]  
public IDataService DataService { get; set; }  
Propriétés

Le tableau 71 répertorie les propriétés de l’interface IDataService .

Tableau 71. Propriétés de l’interface IDataService

Interface Description
CurrentPage Cette propriété permet d’accéder aux éléments, attributs et valeurs XML sous le contexte de la page active en cours de modification dans le fichier de configuration de l’Assistant UDI
CurrentPage
XElement CurrentPage { get; set; }  

Cette propriété permet d’accéder au code XML de la page active. Vous ne devez jamais définir cette propriété, mais vous êtes libre de modifier le code XML de votre page. L’exemple d’éditeur de page montre des exemples de modification du code XML. Vous utilisez cette propriété principalement lorsque vous avez des données personnalisées. Pour les champs et les propriétés (setters), vous pouvez utiliser des contrôles prédéfinis qui prennent en charge tous les détails.

IMessageBoxService

Cette interface permet d’accéder aux méthodes que vous pouvez utiliser pour afficher des boîtes de message. Vous vous demandez peut-être pourquoi vous avez besoin d’une interface pour afficher une boîte de message. La réalité est que ce n’est pas le cas : Microsoft utilise cette interface avec dans le code, car elle facilite l’écriture de tests automatisés pour les pages du concepteur.

Toutefois, l’utilisation de ces méthodes offre un avantage utile : les boîtes de dialogue ont toujours le « propriétaire » défini sur l’Assistant UDI, ce qui garantit que la boîte de dialogue est correctement regroupée avec la fenêtre principale.

Vous pouvez utiliser l’injection de dépendances pour obtenir un pointeur vers cette interface à l’aide de code comme celui-ci dans votre classe :

[Dependency]  
public IMessageBoxService MessageBoxes { get; set; }  
Méthodes

Le tableau 72 répertorie les méthodes de l’interface IMessageBoxService .

Tableau 72. Méthodes de l’interface IMessageBoxService

Méthode Description
ShowMessageBox Cette méthode surchargée est utilisée pour afficher une boîte de message avec les membres suivants :

- ShowMessageBox(String message, String caption, MessageBoxImage icon)
- ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon)
- ShowMessageBox(Exception)
ShowDialogWindow Utilisez cette méthode pour créer une boîte de dialogue.
ShowWizardWindow Utilisez cette méthode pour afficher un éditeur personnalisé dans une boîte de dialogue qui inclut les boutons Suivant et Précédent pour la navigation.
ShowMessageBox

Cette méthode affiche une boîte de message qui est un enfant de l’éditeur de page de l’Assistant personnalisé. Ce membre est surchargé : le tableau 73 contient une liste des membres et une brève description de chacun d’eux. Pour obtenir des informations complètes sur chaque membre (notamment la syntaxe, l’utilisation et les exemples), consultez la section qui correspond à chaque membre.

Tableau 73. Membres surchargés pour la méthode ShowMessagBox

Member Description
ShowMessageBox(String message, String caption, MessageBoxImage icon) Affiche une boîte de message avec une icône et un bouton OK
ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon) Affiche une boîte de message avec une icône et différentes combinaisons possibles de boutons
ShowMessageBox(Exception) Affiche une boîte de message qui fournit des informations sur une exception et comporte un bouton OK
ShowMessageBox(String message, String caption, MessageBoxImage icon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);  

Cette méthode affiche une boîte de message avec un bouton OK . Voir le tableau 74.

Tableau 74. Paramètres de la méthode ShowMessageBox(String message, String caption, MessageBoxImage icon)

Paramètre Description
message Message à afficher dans la zone de contenu de la boîte de message
caption Texte à afficher dans la barre de titre de la boîte de dialogue
icon Type d’icône à afficher dans la boîte de message
ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);  

Cette méthode affiche une boîte de message avec l’ensemble des boutons que vous souhaitez afficher et indique le bouton sur lequel vous avez cliqué. Voir le tableau 75.

Tableau 75. Paramètres de la méthode ShowMessageBox(chaîne message, légende de chaîne, bouton MessageBoxButton, icône MessageBoxImage)

Paramètre Description
message Message à afficher dans la zone de contenu de la boîte de message
caption Texte à afficher dans la barre de titre de la boîte de dialogue
Bouton Boutons à afficher
icon Type d’icône à afficher dans la boîte de message
ShowMessageBox(Exception)
void ShowMessageBox(Exception exception);  

Cette méthode affiche une boîte de message qui signale des informations sur une exception. Cette boîte de message comporte un seul bouton OK . Voir le tableau 76.

Tableau 76. Paramètres de la méthode ShowMessageBox(exception d’exception)

Paramètre Description
Exception Exception que vous souhaitez signaler (la boîte de dialogue utilise l’exception. Message comme contenu.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);  

Cette méthode crée une boîte de dialogue, dont le contenu est le texte que vous fournissez dans le paramètre viewType . Le concepteur UDI crée une instance de ce type et l’encapsule dans une boîte de dialogue avec les boutons OK et Annuler .

Vous transmettez des données à votre contrôle à l’aide du paramètre dialogPayload. La solution SampleEditor dans le répertoire du Kit de développement logiciel (SDK) contient un exemple d’utilisation de cette fonctionnalité.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);  

Cette méthode vous permet d’afficher un éditeur personnalisé dans une boîte de dialogue qui inclut les boutons Suivant et Précédent pour la navigation. Microsoft n’a pas fourni d’exemple sur l’utilisation de cette méthode.

Informations de référence sur le schéma du fichier de configuration de l’Assistant UDI

Ce fichier est consommé par l’Assistant UDI et configuré par le concepteur de l’Assistant UDI. Ce fichier est utilisé pour configurer les éléments suivants :

  • Pages de l’Assistant affichées dans l’Assistant UDI

  • Séquence des pages de l’Assistant dans l’Assistant UDI

  • Paramètres des champs de chaque page de l’Assistant

  • Groupes de phases disponibles dans le concepteur de l’Assistant UDI

  • Phases disponibles dans chaque Assistant déploiement dans le concepteur de l’Assistant UDI

    77 répertorie les éléments du fichier de configuration de l’Assistant UDI et leurs descriptions. L’élément Wizard est le nœud racine de cette référence.

Tableau 77. Éléments dans le fichier de configuration de l’Assistant UDI et leurs descriptions

Nom de l'élément Description
Données Regroupe les éléments DataItem individuels au sein d’un élément Page et est nommé par l’attribut Name .
Dataitem Regroupe les éléments Setter individuels au sein d’un élément Page . Vous pouvez créer des données hiérarchiques en incluant un ou plusieurs éléments Data dans un élément DataItem . Chaque élément DataItem représente un élément individuel. Par exemple, une liste de lecteurs disponibles peut avoir un Objet DataItem pour le nom d’affichage et un autre élément DataItem pour la lettre de lecteur correspondante.
Par défaut Spécifie une valeur par défaut pour le champ spécifié dans l’élément Parent Field ou RadioGroup . La valeur par défaut est définie sur la valeur entre crochets par cet élément.
DLL Spécifie une DLL qui doit être chargée et référencée par l’Assistant UDI et le Concepteur de l’Assistant UDI.
Dll Regroupe les éléments DLL individuels.
Erreur Spécifie un code d’erreur possible qu’une tâche peut retourner. La valeur du code d’erreur est retournée par le HRESULT de la tâche et est piégée par cet élément pour fournir des informations d’erreur plus spécifiques.
ExitCode Spécifie un code de sortie possible pour une tâche. Les codes de sortie sont des codes de retour attendus par la tâche. Créez un élément ExitCode pour chaque code de sortie possible. Sinon, vous pouvez spécifier un astérisque (*) dans l’attribut Value pour gérer les codes de retour non répertoriés dans d’autres éléments ExitCode .
ExitCodes Regroupe un ensemble d’éléments ExitCode et Error pour un élément Task ou un élément Error .
Champ Spécifie une instance d’un contrôle dans un élément Page utilisé pour fournir une personnalisation avec XML. Tous les contrôles n’autorisent pas la personnalisation avec XML, mais uniquement les contrôles qui utilisent l’élément Field .
Fields Regroupe les éléments Field individuels au sein d’un élément Page .
Fichier Spécifie la source et la destination d’une opération de copie de fichiers à l’aide du Microsoft. Type de tâche Wizard.CopyFilesTask. Vous pouvez inclure un élément File distinct pour copier plusieurs fichiers dans une même tâche.
Page Spécifie une instance d’une page et inclut tous les paramètres de configuration de la page.
PageRef Spécifie une référence à une instance d’une page au sein d’une phase au sein d’un groupe de phases.
Pages Regroupe les éléments Page individuels.
RadioGroup Spécifie un groupe de cases d’option dans un élément Field .
StageGroup Spécifie un groupe d’une ou plusieurs étapes.
StageGroups Regroupe un ensemble de groupes d’étapes dans un fichier de configuration de l’Assistant UDI.
Setter Spécifie un paramètre de propriété d’une valeur pour une propriété nommée dans la propriété Property .
Stade Spécifie une étape dans un StageGroup et contient un ou plusieurs éléments PageRef .
Style Regroupe les éléments setter individuels qui configurent l’apparence de l’Assistant UDI, y compris le titre affiché en haut de l’Assistant et l’image de bannière affichée dans l’Assistant UDI.
Tâche Spécifie une tâche qui doit être exécutée sur la page spécifiée dans l’élément Page parent.
Tâches Regroupe un ensemble de tâches pour un élément Page .
Validateur Spécifie un validateur pour le contrôle de champ spécifié dans l’élément Field parent.
Assistant Spécifie la racine de tous les autres éléments.

Données

Cet élément regroupe les éléments DataItem individuels au sein d’un élément Page et est nommé par l’attribut Name .

Informations sur l’élément

Le tableau 78 fournit des informations sur l’élément Data .

Tableau 78. Informations sur l’élément de données

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément Page (cet élément est facultatif.)
Éléments parents Page, DataItem
Sommaire DataItem, Setter
Attributs d’élément

Le tableau 79 répertorie les attributs de l’élément Data et fournit une description de chacun d’eux.

Tableau 79. Attributs et valeurs correspondantes pour l’élément Data

Attribut Description
Nom Spécifie le nom de l’élément Data
Remarques

L’attribut Name permet au code de récupérer un jeu de données spécifique.

Exemple

Aucun.

Dataitem

Cet élément regroupe les éléments Setter individuels au sein d’un élément Page . Vous pouvez créer des données hiérarchiques en incluant un ou plusieurs éléments Data dans un élément DataItem . Chaque élément DataItem représente un élément individuel. Par exemple, une liste de lecteurs disponibles peut avoir un Objet DataItem pour le nom d’affichage et un autre élément DataItem pour la lettre de lecteur correspondante.

Informations sur l’élément

Le tableau 80 fournit des informations sur l’élément DataItem .

Tableau 80. Informations sur l’élément DataItem

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément Data (cet élément est facultatif.)
Éléments parents Données
Sommaire Données, Setter
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

Aucun.

Valeur par défaut

Cet élément spécifie une valeur par défaut pour le champ spécifié dans l’élément Parent Field ou RadioGroup . La valeur par défaut est définie sur la valeur que cet élément met entre crochets.

Informations sur l’élément

Le tableau 81 fournit des informations sur l’élément Default .

Tableau 81. Informations sur l’élément Default

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans un élément Field ou RadioGroup (cet élément est facultatif.)
Éléments parents Champ, RadioGroup
Sommaire Peut être n’importe quel contenu XML bien formé, mais il s’agit généralement d’un texte standard
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

Dans l’exemple suivant, la valeur par défaut du champ TimeZone est définie sur « Pacific Standard Time » :

<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">  
  <Default>Pacific Standard Time</Default>  

DLL

Cet élément spécifie une DLL pour l’Assistant UDI et le Concepteur de l’Assistant UDI à charger et référencer.

Informations sur l’élément

Le tableau 82 fournit des informations sur l’élément DLL .

Tableau 82. Informations sur l’élément DLL

Attribut Valeur
Nombre d’occurrences Un ou plusieurs éléments dans l’élément DLLs
Élément parent Dll
Sommaire Aucun contenu autorisé pour cet élément
Attributs d’élément

Le tableau 83 répertorie les attributs de l’élément DLL et fournit une description de chacun d’eux.

Tableau 83. Attributs et valeurs correspondantes pour l’élément DLL

Attribut Description
Nom Spécifie le nom de la DLL pour l’Assistant UDI et le Concepteur de l’Assistant UDI à référencer
Remarques

Aucun.

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

Dll

Cet élément regroupe les éléments DLL individuels.

Informations sur l’élément

Le tableau 84 fournit des informations sur l’élément DLLs .

Tableau 84. Informations sur l’élément DLLs

Attribut Valeur
Nombre d’occurrences Un
Éléments parents Assistant
Sommaire DLL
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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

Error

Cet élément spécifie un code d’erreur possible qu’une tâche peut retourner. La valeur du code d’erreur est retournée et piégée par le HRESULT de la tâche pour fournir des informations d’erreur plus spécifiques.

Informations sur l’élément

Le tableau 85 fournit des informations sur l’élément Error .

Tableau 85. Informations sur l’élément Error

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément ExitCode (cet élément est facultatif).)
Éléments parents ExitCodes
Sommaire Tout contenu XML bien formé
Attributs d’élément

Le tableau 86 répertorie les attributs de l’élément Error et fournit une description de chacun d’eux.

Tableau 86. Informations sur l’élément Error

Attribut Description
État Spécifie l’état de retour d’une tâche qui a rencontré une erreur. En règle générale, la valeur de cet attribut est définie sur Erreur. Cette valeur s’affiche dans la colonne État de la page de l’Assistant UDI.
Text Spécifie le texte descriptif sur la condition d’erreur rencontrée par la tâche.
Type Spécifie si cet élément représente une erreur, un avertissement ou une réussite. La valeur spécifiée dansType doit être unique dans un élément ExitCodes . Les valeurs suivantes sont valides pour cet élément :

- 0.L’élément représente un succès.
- 1. L’élément représente un avertissement.
- -1. L’élément représente une erreur.
Valeur Spécifie la valeur du code que la tâche a retournée sous forme de valeur numérique. La spécification de la valeur d’un astérisque (*) indique l’élément par défaut pour les codes de retour qui ne sont pas répertoriés dans d’autres éléments Error .
Remarques

Aucun.

Exemple

Aucun.

ExitCode

Cet élément spécifie un code de sortie possible pour une tâche. Les codes de sortie sont des codes de retour attendus par la tâche. Créez un élément ExitCode pour chaque code de sortie possible. Sinon, vous pouvez spécifier un astérisque (*) dans l’attribut Value pour gérer les codes de retour non répertoriés dans d’autres éléments ExitCode .

Informations sur l’élément

Le tableau 87 fournit des informations sur l’élément ExitCode .

Tableau 87. Informations sur l’élément ExitCode

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément ExitCodes (cet élément est facultatif.)
Éléments parents ExitCodes
Sommaire Au moins un élément ExitCode et zéro ou plusieurs éléments Error
Attributs d’élément

Le tableau 88 répertorie les attributs de l’élément ExitCode et fournit une description de chacun d’eux.

Tableau 88. Attributs et valeurs correspondantes pour l’élément ExitCode

Attribut Description
État Spécifie l’état de retour d’une tâche. La valeur de cet attribut s’affiche dans la colonne État de la page correspondante de l’Assistant UDI. Vous pouvez utiliser toutes les valeurs de cet attribut qui sont significatives pour votre tâche. Voici les valeurs classiques utilisées pour cet attribut :

-Succès
-Avertissement
-Erreur
Text Spécifie le texte descriptif sur le code existant de la tâche.
Type Spécifie si cet élément représente une erreur, un avertissement ou une réussite. La valeur spécifiée dans type doit être unique dans un élément ExitCodes . Les valeurs suivantes sont valides pour cet élément :

- 0. L’élément représente une réussite.
- 1. L’élément représente un avertissement.
- -1. L’élément représente une erreur.
Valeur Spécifie la valeur du code que la tâche a retournée sous forme de valeur numérique. La spécification de la valeur d’un astérisque (*) indique l’élément par défaut pour les codes de retour qui ne sont pas répertoriés dans d’autres éléments ExitCode .
Remarques

Aucun.

Exemple

Aucun.

ExitCodes

Cet élément regroupe un ensemble d’éléments ExitCode et Error pour un élément Task ou Error .

Informations sur l’élément

Le tableau 89 fournit des informations sur l’élément ExitCodes .

Tableau 89. Informations sur l’élément ExitCodes

Attribut Valeur
Nombre d’occurrences Un dans chaque élément Task
Éléments parents Tâche
Sommaire Erreur, ExitCode
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

Aucun.

Champ

Cet élément spécifie une instance d’un contrôle dans un élément Page utilisé pour fournir une personnalisation avec XML. Tous les contrôles n’autorisent pas la personnalisation avec XML, mais uniquement les contrôles qui utilisent l’élément Field .

Informations sur l’élément

Le tableau 90 fournit des informations sur l’élément Field .

Tableau 90. Informations sur l’élément Field

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément Field (cet élément est facultatif.)
Éléments parents Fields
Sommaire Valeur par défaut, Validateur
Attributs d’élément

Le tableau 91 répertorie les attributs de l’élément Field et fournit une description de chacun d’eux.

Tableau 91. Attributs et valeurs correspondantes pour l’élément Field

Attribut Description
Enabled Spécifie si le champ est activé pour l’entrée utilisateur (l’attribut peut être défini sur True ou False.)
Name Spécifie le nom du champ
Résumé Spécifie le texte descriptif affiché dans la page de l’Assistant Résumé pour la valeur définie par ce champ
VarName Spécifie le nom de variable de séquence de tâches lu ou configuré à l’aide du champ dans l’élément Field parent
Remarques

Cet élément peut contenir zéro ou plusieurs éléments Default et zéro ou plusieurs éléments Validator .

Exemple

Aucun.

Champs

Cet élément regroupe les éléments Field individuels au sein d’un élément Page .

Informations sur l’élément

Le tableau 92 fournit des informations sur l’élément Fields .

Tableau 92. Informations sur l’élément Fields

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément Page (cet élément est facultatif.)
Éléments parents Page
Sommaire Champ, RadioGroup
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

Aucun.

File

Cet élément spécifie la source et la destination d’une opération de copie de fichiers à l’aide de la Microsoft. Type de tâche Wizard.CopyFilesTask. Vous pouvez inclure un élément File distinct pour copier plusieurs fichiers dans une même tâche.

Informations sur l’élément

Le tableau 93 fournit des informations sur l’élément File .

Tableau 93. Informations sur l’élément File

Attribut Valeur
Nombre d’occurrences Un ou plusieurs pour chaque tâche qui a un type de tâche de Microsoft. Wizard.CopyFilesTask
Éléments parents Tâche
Sommaire Aucun
Attributs d’élément

Le tableau 94 répertorie les attributs de l’élément File et fournit une description de chacun d’eux.

Tableau 94. Attributs et valeurs correspondantes pour l’élément File

Attribut Description
Dest Spécifie le chemin complet ou relatif du dossier de destination pour le fichier spécifié dans l’attribut Source . Les variables d’environnement sont autorisées dans le cadre du chemin d’accès.
Source Spécifie le chemin complet ou relatif du fichier source que le Microsoft. Wizard.CopyFilesTask copie le type de tâche. Cet attribut prend en charge les caractères génériques afin que plusieurs fichiers puissent être copiés à l’aide d’un seul élément File . Les variables d’environnement sont autorisées dans le cadre du chemin d’accès.
Remarques

Aucun.

Exemple

Aucun.

Page

Cet élément spécifie une instance d’une page et inclut tous les paramètres de configuration de la page.

Informations sur l’élément

Le tableau 95 fournit des informations sur l’élément Page .

Tableau 95. Informations sur les éléments de page

Attribut Valeur
Nombre d’occurrences Un ou plusieurs éléments Dans chaque élément Pages
Éléments parents Pages
Sommaire Données, Champs, Setter, Tâches
Attributs d’élément

Le tableau 96 répertorie les attributs de l’élément Page et fournit une description de chacun d’eux.

Tableau 96. Attributs et valeurs correspondantes pour l’élément Page

Attribut Description
DisplayName Spécifie le nom convivial de la page de l’Assistant affichée dans le concepteur de l’Assistant UDI. Ce nom est généralement plus descriptif que l’attribut Name .
Name Spécifie le nom de la page de l’Assistant affichée dans le concepteur de l’Assistant UDI.
Type Spécifie le type de page de l’Assistant qui est directement lié à une page d’Assistant spécifique dans une DLL.
Remarques

Aucun.

Exemple

Aucun.

PageRef

Cet élément spécifie une référence à une instance d’une page au sein d’une phase au sein d’un groupe de phases.

Informations sur l’élément

Le tableau 97 fournit des informations sur l’élément PageRef .

Tableau 97. Informations sur l’élément PageRef

Attribut Valeur
Nombre d’occurrences Un ou plusieurs au sein d’un élément Stage
Éléments parents Stade
Sommaire Aucun
Attributs d’élément

Le tableau 98 répertorie l’attribut de l’élément PageRef et fournit une description de celui-ci.

Tableau 98. Attributs et valeurs correspondantes pour l’élément PageRef

Attribut Description
Page Spécifie l’instance d’une page au sein d’une phase dans un groupe de phases. Définissez cette valeur sur l’attribut Name d’un élément Page .
Remarques

Aucun.

Exemple

Aucun.

Pages

Cet élément regroupe les éléments Page individuels.

Informations sur l’élément

Le tableau 99 fournit des informations sur l’élément Pages .

Tableau 99. Informations sur l’élément Pages

Attribut Valeur
Nombre d’occurrences Un
Éléments parents Assistant
Sommaire Page
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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

Cet élément spécifie un groupe de cases d’option avec dans un élément Field .

Informations sur l’élément

Le tableau 100 fournit des informations sur l’élément RadioGroup .

Tableau 100. Informations sur l’élément RadioGroup

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans un élément Fields (cet élément est facultatif.)
Éléments parents Fields
Sommaire Par défaut
Attributs d’élément

Le tableau 101 répertorie les attributs de l’élément RadioGroup et fournit une description de chacun d’eux.

Tableau 101. Attributs et valeurs correspondantes pour l’élément RadioGroup

Attribut Description
Locked Spécifie si le groupe de cases d’option est activé pour l’entrée utilisateur. L’attribut peut être défini sur :

- True. Spécifie que les cases d’option sont désactivées et que les utilisateurs ne peuvent pas sélectionner une case d’option dans le groupe.
- False. Spécifie que les cases d’option sont activées et que les utilisateurs peuvent sélectionner une case d’option dans le groupe.
Name Spécifie le nom du groupe d’options radio.
Remarques

Aucun.

Exemple

Aucun.

StageGroup

Cet élément spécifie un groupe d’étapes de déploiement.

Informations sur l’élément

Le tableau 102 fournit des informations sur l’élément StageGroup .

Tableau 102. Informations sur l’élément StageGroup

Attribut Valeur
Nombre d’occurrences Un ou plusieurs éléments Dans un élément StageGroups
Éléments parents StageGroups
Sommaire Stade
Attributs d’élément

Le tableau 103 répertorie les attributs de l’élément StageGroup et une description de l’attribut.

Tableau 103. Attributs et valeurs correspondantes pour l’élément StageGroup

Attribut Description
DisplayName Spécifie le nom convivial du groupe de phases affiché dans le concepteur de l’Assistant UDI. Ce nom est généralement plus descriptif que l’attribut Name .
Remarques

Aucun.

Exemple

Aucun.

StageGroups

Cet élément regroupe un ensemble de groupes d’étapes dans un fichier de configuration de l’Assistant UDI.

Informations sur l’élément

Le tableau 104 fournit des informations sur l’élément StageGroups .

Tableau 104. Informations sur l’élément StageGroups

Attribut Valeur
Nombre d’occurrences Zéro ou un dans un élément Wizard
Éléments parents Assistant
Sommaire StageGroup
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple

Aucun.

Setter

Cet élément spécifie un paramètre de propriété pour la valeur d’une propriété nommée dans la propriété Property .

Informations sur l’élément

Le tableau 105 fournit des informations sur l’élément Setter .

Tableau 105. Informations sur l’élément Setter

Attribut Valeur
Nombre d’occurrences Zéro ou plus dans chaque élément parent (cet élément est facultatif.)
Éléments parents Data, DataItem, Page, Style, Task, Validateator
Sommaire Contient une valeur de chaîne dans l’attribut Property
Attributs d’élément

Le tableau 106 répertorie l’attribut de l’élément Setter et fournit une description de celui-ci.

Tableau 106. Attributs et valeurs correspondantes pour l’élément Setter

Attribut Description
Propriété Spécifie le nom de propriété défini. Le nom de la propriété est défini sur la valeur que cet attribut met entre crochets.
Remarques

Aucun.

Exemple

Aucun.

Phase

Cet élément spécifie une étape dans un StageGroup et contient un ou plusieurs éléments PageRef .

Informations sur l’élément

Le tableau 107 fournit des informations sur l’élément Stage .

Tableau 107. Informations sur l’élément Stage

Attribut Valeur
Nombre d’occurrences Un ou plusieurs éléments dans un élément StageGroup
Éléments parents StageGroup
Sommaire PageRef
Attributs d’élément

Le tableau 108 répertorie les attributs de l’élément Stage et fournit une description de chacun d’eux.

Tableau 108. Attributs et valeurs correspondantes pour l’élément Stage

Attribut Description
DisplayName Spécifie le nom convivial de la page de l’Assistant affichée dans le concepteur de l’Assistant UDI. Ce nom est généralement plus descriptif que l’attribut Name .
Name Spécifie le nom de la phase. La valeur de cet élément est utilisée lors du démarrage de l’Assistant UDI avec le paramètre de ligne de commande /stage: name .
Remarques

Aucun.

Exemple

Aucun.

Style

Cet élément regroupe les éléments Setter individuels qui configurent l’apparence de l’Assistant UDI, y compris le titre affiché en haut de l’Assistant et l’image de bannière affichée dans l’Assistant UDI.

Informations sur l’élément

Le tableau 109 fournit des informations sur l’élément Style.

Tableau 109. Informations sur l’élément Style

Attribut Valeur
Nombre d’occurrences Un
Éléments parents Assistant
Sommaire Setter
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

Exemple
<Style>  
  <Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>   
  <Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>   
</Style>  

Tâche

Cet élément spécifie une tâche qui doit être exécutée sur la page spécifiée dans l’élément Page parent.

Informations sur l’élément

Le tableau 110 fournit des informations sur l’élément Task .

Tableau 110. Informations sur l’élément Task

Attribut Valeur
Nombre d’occurrences Un ou plusieurs au sein d’un élément Tasks
Éléments parents Tâches
Sommaire ExitCodes, File, Setter
Attributs d’élément

Le tableau 111 répertorie les attributs de l’élément Task et fournit une description de chacun d’eux.

Tableau 111. Attributs et valeurs correspondantes pour l’élément Task

Attribut Description
DependsOn Spécifie si la tâche dépend d’une autre tâche. La valeur de cet attribut est définie sur l’attribut Name d’un autre élément Task . Note: Cet attribut ne peut pas être configuré à l’aide du concepteur de l’Assistant UDI. Toutefois, vous pouvez ajouter manuellement cet attribut à un élément Task en modifiant directement le fichier .xml.
DisplayName Spécifie le nom convivial de la tâche affichée dans le concepteur de l’Assistant UDI. Ce nom est généralement plus descriptif que l’attribut Name .
Name Spécifie le nom de la tâche. Ce nom doit être unique.
Type Spécifie le type de tâche pour la tâche à exécuter, qui est défini dans la DLL qui contient la tâche.
Remarques

Aucun.

Exemple

Aucun.

Tâches

Cet élément regroupe un ensemble de tâches pour un élément Page .

Informations sur l’élément

Le tableau 112 fournit des informations sur l’élément Tasks .

Tableau 112. Informations sur l’élément Tasks

Attribut Valeur
Nombre d’occurrences Zéro ou un dans chaque élément Page (cet élément est facultatif.)
Éléments parents Page
Sommaire Tâche
Attributs d’élément

Le tableau 113 répertorie les attributs de l’élément Tasks et fournit une description de chacun d’eux.

Tableau 113. Attributs et valeurs correspondantes pour l’élément Tasks

Attribut Description
NameTitle Spécifie la légende qui s’affiche en haut de la colonne contenant le nom des tâches dans la page de l’Assistant appropriée.
StatusTitle Spécifie la légende qui s’affiche en haut de la colonne qui contient l’état des tâches dans la page de l’Assistant appropriée.
Remarques

Aucun.

Exemple

Aucun.

Validateur

Cet élément spécifie un validateur pour le contrôle de champ spécifié dans l’élément Field parent.

Informations sur l’élément

Le tableau 114 fournit des informations sur l’élément Validator .

Tableau 114. Informations sur l’élément Validator

Attribut Valeur
Nombre d’occurrences Zéro ou un dans un élément Field
Éléments parents Champ
Sommaire Setter
Attributs d’élément

Le tableau 115 répertorie l’attribut de l’élément Validator et fournit une description de celui-ci.

Tableau 115. Attributs et valeurs correspondantes pour l’élément Validator

Attribut Description
Type Spécifie le type du validateur, qui est défini dans la DLL qui contient le validateur
Remarques

Aucun.

Exemple

Aucun.

Assistant

Cet élément spécifie la racine de tous les autres éléments.

Informations sur l’élément

Le tableau 116 fournit des informations sur l’élément Wizard .

Tableau 116. Informations sur l’élément Wizard

Attribut Valeur
Nombre d’occurrences Un
Éléments parents Aucun
Sommaire DLL, Pages, StageGroups, Style
Attributs d’élément

Cet élément n’a pas d’attributs.

Remarques

Aucun.

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