Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La instalación controlada por usuario (UDI) ayuda a simplificar la implementación de sistemas operativos cliente de Windows®, como Windows 8.1, en equipos mediante la característica de implementación de sistema operativo (OSD) en Microsoft® System Center 2012 R2 Administrador de configuración. UDI forma parte de Microsoft Deployment Toolkit (MDT).
Introducción
Normalmente, cuando se implementan sistemas operativos mediante la característica OSD, se debe proporcionar toda la información necesaria para implementar el sistema operativo. La información se configura en archivos de configuración o en bases de datos (como el archivo CustomSettings.ini o la base de datos MDT [MDT DB]). Debe proporcionar todas las opciones de configuración para poder iniciar la implementación.
UDI proporciona una interfaz controlada por asistente que le permite proporcionar información de configuración inmediatamente antes de realizar la implementación. Este comportamiento permite crear secuencias de tareas OSD genéricas y, a continuación, proporcionar información específica del equipo en el momento de la implementación, lo que proporciona una mayor flexibilidad en el proceso de implementación.
Público objetivo
Esta guía está escrita para los desarrolladores que crean páginas de asistente personalizadas para UDI Wizard y editores de páginas de asistente personalizados para UDI Wizard Designer. En esta guía se da por supuesto que está familiarizado con el desarrollo de las aplicaciones de Windows mediante:
C++, que se usa para crear páginas de asistente personalizadas
Microsoft .NET Framework, que se utiliza para crear editores de páginas del asistente personalizado
Windows Presentation Foundation (WPF), que se usa para crear editores de páginas del asistente personalizados
Lenguajes compatibles con WPF, como C#, C++ o Microsoft Visual Basic® .NET, que se usan para crear editores de páginas del asistente personalizados
Acerca de esta guía
Esta guía proporciona la información de referencia necesaria para ayudarte a personalizar la IU para tu organización. En esta guía no se tratan temas administrativos u operativos, como la instalación de MDT (que incluye UDI), la configuración de UDI para implementar sistemas operativos y aplicaciones, o la realización de implementaciones mediante el Asistente de UDI. Para obtener más información sobre esos temas, consulta los temas de UDI en Uso del Microsoft Deployment Toolkit, que se incluye con MDT.
Información general sobre el desarrollo de UDI
El desarrollo de UDI le permite ampliar las características que proporciona UDI. Normalmente, el desarrollo de UDI es necesario cuando se desea recopilar información adicional que consume el proceso de implementación de UDI. Esta información adicional normalmente se guarda como variables de secuencia de tareas que leen los pasos de la secuencia de tareas en una secuencia de tareas UDI en Administrador de configuración.
Arquitectura UDI
El objetivo general del desarrollo de UDI es crear páginas de asistente personalizadas que se puedan mostrar en el Asistente de UDI. Al crear páginas de asistente personalizadas, puede ampliar las características existentes de UDI para cumplir con los requisitos empresariales y técnicos de su organización. Una página del asistente personalizada recopila información además o en lugar de las páginas del asistente que proporciona UDI.
La figura 1 ilustra la relación entre UDI Wizard Designer y UDI Wizard.
Figura 1. Relación entre UDI Wizard y UDI Wizard Designer
Figura 1. Relación entre UDI Wizard y UDI Wizard Designer
A nivel conceptual, el desarrollo de UDI incluye la creación de:
Páginas de asistente personalizadas. Las páginas del asistente se muestran en el Asistente UDI y recopilan la información necesaria para completar el proceso de implementación. Las páginas del asistente se crean con C++ en Microsoft Visual Studio®. Las páginas del asistente personalizadas se implementan como DLL que lee el Asistente UDI. El kit de desarrollo de software (SDK) de UDI incluye un ejemplo de cómo crear páginas de asistente personalizadas.
Editores de páginas del asistente personalizado. Los editores de páginas del asistente se usan para configurar el comportamiento de la página de asistente personalizada. Los editores de página del asistente personalizado se implementan como archivos DLL que lee UDI Wizard Designer. Los editores de páginas del asistente se crean mediante:
WPF versión 4.0
Microsoft Prism , versión 4.0
Microsoft Unity Application Block (Unity) versión 2.1
MDT incluye todos los ensamblados necesarios para crear un editor de páginas del asistente personalizado que se usará en UDI Wizard Designer. El SDK de UDI incluye un ejemplo de cómo crear editores de páginas de asistente personalizados.
Además, UDI Wizard Designer consume archivos de configuración del editor de páginas del asistente. Los archivos de configuración del editor de páginas del asistente se crean como parte del proceso de creación de las páginas del asistente personalizadas y los editores de páginas del asistente personalizados. El Asistente para UDI Designer crea la información XML necesaria en el archivo de configuración del Asistente para UDI y en el archivo .app correspondiente.
Preparación del entorno de desarrollo UDI
Antes de comenzar a crear sus propias páginas del asistente personalizadas y editores de páginas del asistente, realice los pasos siguientes para preparar el entorno de desarrollo de UDI:
Prepare los requisitos previos del entorno de desarrollo de UDI como se describe en Preparar los requisitos previos del entorno de desarrollo de UDI.
Configure el entorno de desarrollo de UDI como se describe en Configurar el entorno de desarrollo de UDI.
Compruebe que el entorno de desarrollo de UDI está configurado correctamente, como se describe en Comprobación del entorno de desarrollo de UDI.
Preparar los requisitos previos del entorno de desarrollo de UDI
Para preparar los requisitos previos del entorno de desarrollo de UDI, realice los pasos siguientes:
Prepare los requisitos del hardware del entorno de desarrollo de UDI como se describe en Preparar los requisitos previos de hardware del entorno de desarrollo de UDI.
Preparar los requisitos del software del entorno de desarrollo UDI como se describe en Preparar los requisitos previos del software del entorno de desarrollo UDI.
Preparación de los requisitos previos de hardware del entorno de desarrollo de UDI
Los requisitos previos de hardware del entorno de desarrollo de UDI son los mismos requisitos de hardware para la edición de Microsoft Visual Studio que está utilizando. Para obtener más información sobre estos requisitos, consulte los requisitos del sistema para cada edición en la documentación de Visual Studio.
Preparar los requisitos previos del software del entorno de desarrollo UDI
El entorno de desarrollo de UDI tiene los siguientes requisitos previos de software:
Cualquier sistema operativo Windows que sea compatible con Visual Studio 2010 (se recomienda Windows 7 o Windows Server ® 2008 R2).
Necesitará un sistema operativo Windows que admita la arquitectura de procesador para la que desea desarrollar. Puede desarrollar UDI de 32 y 64 bits con un sistema operativo de 64 bits. Solo realiza el desarrollo de UDI de 32 bits en sistemas operativos de 32 bits. Por este motivo, debe usar un sistema operativo de 64 bits.
Nota:
Las versiones de IntelItanium (IA-64) del sistema operativo Windows no son compatibles con entornos de desarrollo UDI.
Para obtener más información sobre los sistemas operativos compatibles con Visual Studio 2010, consulte los requisitos del sistema para cada edición en la documentación de Visual Studio.
Microsoft .NET Framework versión 4.0 (requerido por Visual Studio 2010)
Lenguaje C++ (el lenguaje usado para extender las páginas del Asistente UDI)
Otros lenguajes compatibles con WPF, como C#, Visual Basic .NET o C++/Common Language Infrastructure, que se usan para ampliar UDI Wizard Editores de páginas del asistente de Designer
Nota:
El código fuente de ejemplo para los editores de páginas del asistente UDI Wizard Designer está escrito en C#. Instale el lenguaje C# si desea utilizar el código fuente de ejemplo.
Configurar el entorno de desarrollo de UDI
Una vez que se cumplan los requisitos previos del entorno de desarrollo de UDI, realice los pasos siguientes para configurar el entorno de desarrollo de UDI:
Instale Visual Studio 2010.
Asegúrese de instalar el lenguaje C++ y cualquier otro lenguaje compatible con WPF.
Nota:
El código fuente de ejemplo para las páginas del editor UDI Wizard Designer está escrito en C#. Instale el lenguaje C# si desea utilizar el código fuente de ejemplo.
Para obtener más información acerca de cómo instalar Visual Studio 2010, consulte Instalación de Visual Studio.
Instala MDT.
Para más información sobre cómo instalar MDT, consulta la sección "Instalación o actualización a MDT" del documento MDT Uso del Microsoft Deployment Toolkit.
En el Explorador de Windows, cree local_folder (donde local_folder cualquier carpeta ubicada en una unidad local en el equipo de desarrollo).
Copia la carpeta installation_folder\SDK en local_folder (donde installation_folder es la carpeta en la que instalaste MDT y local_folder es cualquier carpeta ubicada en una unidad local en el equipo de desarrollo).
Copia la carpeta SDK en otra ubicación porque MDT está instalado en la carpeta Program Files, en la que no se puede escribir sin permisos elevados. Copiar la carpeta SDK en otra ubicación le permite modificar los archivos de esta sin necesidad de tener permisos elevados.
Copia la carpeta installation_folder\Templates\Distribution\Tools en local_folder (donde installation_folder es la carpeta en la que instalaste MDT y local_folder es la carpeta que creaste anteriormente en el proceso).
Cambie el nombre de la carpeta local_folder\Tools a local_folder\OSDSetupWizard(donde local_folder es la carpeta que creó anteriormente en el proceso).
Cuando haya finalizado, la estructura de carpetas debajo de local_folder debe tener un aspecto similar a la estructura de carpetas ilustrada en la figura 2 (donde local_folder es la carpeta que creó anteriormente en el proceso y se muestra como UDIDevelopment en la figura).
Figura 2. Estructura de carpetas para el desarrollo de UDIFigura 2. Estructura de carpetas para el desarrollo de UDI
Comprobación del entorno de desarrollo de UDI
Cuando el entorno de desarrollo UDI esté configurado, compruebe que el entorno de desarrollo UDI está configurado correctamente asegurándose de que los proyectos de ejemplo se compilan correctamente en Visual Studio 2010.
Compruebe que el entorno de desarrollo de UDI está configurado correctamente determinando si:
El proyecto SamplePage se compila correctamente como se describe en Comprobar que el proyecto SamplePage se compila correctamente
El proyecto SampleEditor se compila correctamente como se describe en Comprobar que el proyecto SampleEditor se genera correctamente
Compruebe que el proyecto SamplePage se compila correctamente
El proyecto SamplePage proporciona un ejemplo de cómo crear una página de asistente personalizada para el Asistente de UDI. Para obtener más información sobre el proyecto SamplePage, consulte Revisar la solución de Visual Studio SamplePage.
Para comprobar que el proyecto SamplePage se compila correctamente
Inicie Visual Studio 2010.
Abra el proyecto SamplePage.
El proyecto SamplePage reside en la carpeta local_folder\SDK\UDI\SamplePage (donde local_folder es la carpeta que creó anteriormente en el proceso).
En Visual Studio 2010, en el Explorador de soluciones, haga clic con el botón derecho en el proyecto SamplePage y, a continuación, seleccione Propiedades.
Aparece el cuadro de diálogo Páginas de propiedades de SamplePage .
En el cuadro de diálogo Páginas de propiedades de SamplePage , vaya a Propiedades de configuración/Depuración.
En las propiedades de depuración, en Configuración, seleccione Todas las configuraciones.
En las propiedades de depuración, en Comando, escriba $(TargetDir)\OSDSetupWizard.exe.
En las propiedades de depuración, en Directorio de trabajo, escriba $(TargetDir).
En el cuadro de diálogo Páginas de propiedades de SamplePage , vaya a Propiedades de configuración/Eventos de compilación/Evento posterior a la compilación.
En las propiedades del evento posterior a la compilación, en Línea de comandos, escriba lo siguiente:
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"En el cuadro de diálogo Páginas de propiedades de SamplePage , seleccione Aceptar.
Guarde el proyecto.
En el menú Depurar , seleccione Iniciar depuración.
Aparecerá el cuadro de diálogo de Microsoft Visual Studio, que indica que el origen no está actualizado y le pregunta si desea compilar el proyecto.
En el cuadro de diálogo Microsoft Visual Studio , seleccione Sí.
Aparecerá el cuadro de diálogo Sin información de depuración , que le informa de que no hay información de depuración disponible para OSDSetupWizard.exe.
En el cuadro de diálogo Sin información de depuración , seleccione Sí.
El asistente de UDI se abre con la página del asistente personalizado mostrada.
Compruebe que puede seleccionar un valor en Elegir su ubicación.
En el formulario Asistente con página de ejemplo , seleccione Cancelar.
Aparecerá el cuadro de diálogo Asistente para cancelar .
En el cuadro de diálogo Asistente para cancelar , seleccione Sí.
Cierre Visual Studio 2010.
Compruebe que el proyecto SampleEditor se compila correctamente
El proyecto SampleEditor proporciona un ejemplo de cómo crear un editor de página de asistente personalizado para UDI Wizard Designer. Para obtener más información sobre el proyecto SampleEditor, consulte Revisar la solución de Visual Studio de SamplePage.
Para comprobar que el proyecto SampleEditor se compila correctamente
Inicie Visual Studio 2010.
Abra el proyecto SampleEditor.
El proyecto SampleEditor reside en la carpeta local_folder\SDK\UDI\SampleEditor (donde local_folder es la carpeta que creó anteriormente en el proceso).
En Visual Studio 2010, en el Explorador de soluciones, seleccione el proyecto SampleEditor.
En el menú Proyecto , seleccione Agregar referencia.
Se abrirá el cuadro de diálogo Agregar referencia .
En el cuadro de diálogo Agregar referencia , seleccione la pestaña Examinar .
En la pestaña Examinar , vaya a installation_folder\Bin (donde installation_folder es la carpeta en la que instaló MDT). Seleccione los siguientes archivos y luego haga clic en Aceptar:
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
Nota:
Puede seleccionar varios archivos en la pestaña Examinar manteniendo presionada la tecla CTRL mientras selecciona los archivos.
En el Explorador de soluciones, vaya a SampleEditor/Referencias.
Compruebe que ninguna de las referencias tenga advertencias o errores.
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto SampleEditor y, a continuación, seleccione Propiedades.
Aparece el cuadro de diálogo Páginas de propiedades de SampleEditor .
En el cuadro de diálogo Páginas de propiedades de SampleEditor , seleccione la pestaña Depurar .
En la pestaña Depurar , seleccione Iniciar programa externo.
En Iniciar programa externo, escribe installation_folder\Bin\UDIDesigner.exe (donde installation_folder es la carpeta en la que instalaste MDT) y luego selecciona Aceptar.
Sugerencia
Puede seleccionar el botón de puntos suspensivos (...) para ir a la carpeta y seleccionar UDIDesigner.exe.
En el menú Archivo , seleccione Guardar todo.
Copia el archivo local_folder\SDK\SamplePage\SamplePage.dll.config en la carpeta installation_folder\Bin\Config (donde local_folder es la carpeta que creaste en el equipo de desarrollo anteriormente en el proceso de configuración yinstallation_folder es la carpeta en la que instalaste MDT).
En Visual Studio 2010, en el menú Depurar , seleccione Iniciar depuración.
Se inicia UDI Wizard Designer.
En UDI Wizard Designer, en la cinta de opciones, seleccione Abrir.
Aparece el cuadro de diálogo Abrir.
En el cuadro de diálogo Abrir , abra el archivo local_folder\SDK\SamplePage\SamplePage\Config.xml (donde local_folder es la carpeta que creó en el equipo de desarrollo anteriormente en el proceso de configuración).
Se abrirá el archivo Config.xml y el grupo Fase personalizado se mostrará en el panel de detalles.
En el panel de detalles, seleccione la pestaña Configurar .
Revise la información de configuración del cuadro Ubicación , incluidas las siguientes:
Botón Desbloqueado, con el que se habilita o deshabilita el cuadro Ubicación
Cuadro de valor predeterminado, en el que se especifica un valor predeterminado para que se muestre en el cuadro Ubicación
Nombre para mostrar descriptivo visible en la página de resumen, en la que se escribe el subtítulo de la información que se muestra en la página Resumen
Cuadro de lista de ubicaciones, que incluye una lista de posibles ubicaciones
Cierre UDI Wizard Designer.
Cierre Visual Studio 2010.
Revisión de los ejemplos de SDK de UDI
Antes de comenzar con el desarrollo, revisa los ejemplos proporcionados en el SDK de UDI. Use la información de esta guía y el código fuente de los ejemplos para ayudarle a crear sus propias páginas y editores de páginas del asistente personalizadas de UDI.
Para revisar los ejemplos del SDK de UDI, revisa lo siguiente:
Contenido de la carpeta SDK que copió anteriormente durante el proceso de instalación, tal como se describe en Revisar el contenido de la carpeta SDK
Ejemplo de página del asistente UDI personalizada como se describe en Revisar la solución de Visual Studio de SamplePage
Ejemplo de editor de páginas del asistente UDI personalizado, como se describe en Revisar la solución de Visual Studio de SampleEditor
Revise el contenido de la carpeta SDK
Durante la configuración del entorno de desarrollo de UDI, copió la carpeta SDK de la carpeta en la que instaló MDT a otra carpeta que creó. En la Tabla 1 se enumeran las carpetas inmediatamente debajo de la carpeta SDK y se proporciona una breve descripción de cada una.
Tabla 1. Carpetas en el SDK de UDI
| Folder | Esta carpeta contiene |
|---|---|
| Incluye | Los archivos de encabezado de C++ necesarios para crear páginas de asistente personalizadas para el Asistente de UDI |
| Bibliotecas | Los archivos de la biblioteca de C++ que se vincularán a la página personalizada; Hay versiones de 32 bits y 64 bits de las bibliotecas de vínculos estáticos. Nota: Las versiones de Itanium de las bibliotecas (IA-64) no están disponibles. |
| Editor de muestras | Un proyecto de Visual Studio para crear un editor personalizado que se usa para editar la página SamplePage en UDI Wizard Designer, que se escribe en C# |
| Página de muestra | Un proyecto de Visual Studio para crear una página de asistente de UDI personalizada, que está escrita en Visual C++ |
Revisar la solución de Visual Studio SamplePage
Antes de comenzar a crear las páginas del asistente personalizadas y los editores de páginas del asistente, realice las tareas siguientes para preparar el entorno de desarrollo de UDI:
Revise las etapas del ciclo de vida de una página del asistente UDI tal como se describe en Revisar el ciclo de vida de la página del asistente.
Revise la solución de Visual Studio para el ejemplo de SamplePage en el SDK de UDI como se describe en Revise el ejemplo de SamplePage.
Revisar el ciclo de vida de la página del asistente
Una página del asistente UDI tiene métodos que corresponden a cada etapa (o fase) del ciclo de vida de la página. Como parte de la creación de su página de asistente personalizada, necesitará invalidar estos métodos con su código. En la Tabla 2 se enumeran los métodos que necesitará invalidar y se proporciona una breve descripción de cada método, incluido cuándo usar el método en el ciclo de vida de la página del asistente.
Tabla 2. Métodos en un asistente Ciclo de vida de la página
| Método | Descripción |
|---|---|
| OnWindowCreated | Se llama a este método una vez, después de que se haya creado la ventana de la página. Para este método, escriba código que inicialice la página por primera vez y solo deba realizarse una vez. Por ejemplo, utilice este método para inicializar campos o para leer información de configuración de los elementos Setter en el archivo de configuración del Asistente para UDI. |
| OnWindowShown | Se llama a este método cada vez que se muestra la página en el Asistente de UDI. Se llama la primera vez que se muestra la página y cada vez que navega a la página seleccionando Siguiente o Atrás en el asistente. Para este método, escriba código que prepare la página para ser mostrada, por ejemplo, leer variables de memoria, variables de secuencia de tareas o variables de entorno, y luego actualizar la página en función de los cambios realizados en esas variables. |
| OnCommonControlEvent | Se puede llamar a este método siempre que se muestre la página del asistente y reciba un mensaje WM_NOTIFY de un niño (normalmente, controles comunes). Para este método, escriba código que controle WM_NOTIFY en función del mensaje de notificación. Por ejemplo, puede que desee responder a eventos de un control común, como responder a eventos seleccionados o de doble clic para un control TreeView . |
| OnUnhandledEvent | Se llama a este método cada vez que se produce un mensaje de ventana no controlado para la página del asistente. Este método brinda la oportunidad de interceptar y controlar estos mensajes de ventana que de otro modo no se controlarían. Para este método, escriba código que controle los mensajes de ventana pertinentes a la página del asistente. Normalmente, no será necesario invalidar este método. |
| OnNextSelected | Se llama a este método cuando selecciona Siguiente en el asistente. Para este método, escriba código que realice las acciones necesarias antes de pasar a la siguiente página del asistente, por ejemplo, realizar una validación que puede llevar mucho tiempo. Si se produce un error en la validación, puede cancelar la solicitud siguiente y mostrar un mensaje. |
| OnWindowHidden | Se llama a este método cada vez que la página está oculta cuando se muestra la página del asistente anterior o siguiente. Para este método, escriba código que realice cualquier acción antes de que la página se oculte, antes de que se muestre otra página. Normalmente, no será necesario invalidar este método. |
Revisar el ejemplo de SamplePage
Revise el ejemplo de SamplePage con la lista siguiente, que representa la secuencia de eventos durante el ciclo de vida de la página del asistente del ejemplo de SamplePage:
El asistente de UDI, OSDSetupWizard.exe, lee la información de configuración del archivo de configuración del asistente de UDI en el ejemplo (el archivo Config.xml) como se describe en el paso 1: El asistente de UDI (OSDSetupWizard.exe) lee el archivo Config.xml.
El Asistente UDI carga las DLL necesarias para cada página del asistente enumerada en el archivo de configuración del Asistente UDI como se describe en el Paso 2: El asistente UDI carga la DLL para la página del asistente personalizada.
El Asistente UDI muestra la página del asistente personalizado y permite la interacción de control deseada, como se describe en el Paso 3: El Asistente UDI muestra la página del Asistente personalizado.
Cuando la página del asistente personalizado haya recopilado la información, realice las tareas necesarias antes de seleccionar Siguiente para pasar al asistente siguiente, tal como se describe en el Paso 4: Se selecciona el botón Siguiente en la página del asistente personalizado.
Paso 1: El asistente de UDI (OSDSetupWizard.exe) lee el archivo Config.xml
Cuando se inicia el Asistente para UDI (OSDSetupWizard.exe), lee de forma predeterminada el archivo de configuración del Asistente para UDI, que es el archivo UDIWizard_Config.xml, el archivo de configuración principal del Asistente para UDI.
Nota:
En el ejemplo se utiliza el archivo Config.xml como archivo de configuración. En MDT, el archivo de configuración predeterminado es el archivo UDIWizard_Config.xml, que reside en la carpeta Scripts del paquete de Files de MDT para la configuración.
Puede reemplazar el archivo de configuración predeterminado que usa el Asistente de UDI modificando el paso de la secuencia de tareas del Asistente de UDI para usar el parámetro /definition . Para obtener más información acerca de cómo invalidar el archivo de configuración predeterminado que utiliza el Asistente de UDI, consulte "Invalidar el archivo de configuración que utiliza el Asistente de UDI".
Los elementos de nivel superior del archivo Config.xml son los
-
Para obtener más información sobre el esquema del archivo de configuración del Asistente UDI y cada uno de estos elementos, consulte Referencia del esquema del archivo de configuración del Asistente UDI.
El Asistente de UDI examina el elemento DLL en busca de los archivos .dll que se van a cargar. En el ejemplo, se muestran dos archivos .dll: SamplePage.dll y SharedPages.dll. Estos archivos .dll deben residir en la misma carpeta que OSDSetupWizard.exe, la carpeta Tools\platform (donde platform es x86 para la versión de 32 bits o x64 para la versión de 64 bits).
El Asistente UDI examina el elemento Pages en busca de las páginas definidas. En el ejemplo, se definen dos páginas: Custom y SummaryPage. El atributo Type del elemento Page se define en el archivo PageClassIDs.h y define de forma única el tipo de la página personalizada.
En el ejemplo, el tipo definido es Microsoft.SamplePage.LocationPage. Para la página personalizada, sustituya lo siguiente para evitar posibles conflictos con otras páginas que pueda crear en el futuro:
El nombre de la organización en lugar de Microsoft.
El nombre del proyecto en el lugar de SamplePage.
El nombre de la página del asistente personalizado en el lugar de LocationPage.
Paso 2: El asistente UDI carga la DLL para la página del asistente personalizado
Cuando el Asistente para UDI carga la DLL, llama a la función RegisterFactories , que debe implementarse en el archivo .dll. En el ejemplo, esta función se implementa en el archivo dllmain.ccp. Cada página del asistente que cree debe implementar la función RegisterFactories .
La función RegisterFactories se usa para registrar la clase de fábrica de la página del asistente con el registro de fábrica de clases para el asistente UDI. Las fábricas de clases son clases que pueden crear una instancia de otra clase. La función RegisterFactories crea una nueva instancia de una clase de fábrica y pasa esa clase al registro de fábrica de clases para el Asistente UDI, lo que hace que esa clase de fábrica esté disponible para el asistente. El Asistente UDI busca una clase de fábrica registrada con un identificador que coincida con el atributo Tipo del elemento Página para la página del asistente personalizada.
En el ejemplo, el identificador se define como ID_Location en el archivo PageClassIds.h como Microsoft.SamplePage.LocationPage, que coincide con el atributo Type para el elemento Page en el archivo Config.xml. ID_Location se pasa como parámetro en la función RegisterFactories implementada en el archivo dllmain.ccp.
Puede crear una función mediante la plantilla de función Register_name para simplificar la creación de una nueva instancia de fábrica y registrar la instancia recién creada. El valor de nombre proporcionado mediante la plantilla de función Registro debe implementar la interfaz iClassFactory . La clase ClassFactoryImpl controla la mayoría de los detalles para implementar un generador de clase.
También puede usar la función Factorías de Registro para registrar tipos de tarea y tipos de validador. Para obtener más información, vea los artículos siguientes:
Nota:
El ejemplo contiene y registra solo una página de asistente personalizada. El ejemplo no incluye tareas ni validadores personalizados y, por lo tanto, no registra ninguna tarea o validador personalizado.
Paso 3: El asistente de UDI muestra la página del asistente personalizado
La página del asistente personalizado del ejemplo se define en el archivo LocationPage.cpp. Las páginas del asistente se derivan de clases de plantilla que proporcionan gran parte de la funcionalidad que tiene una página. Todas las páginas del asistente deben derivar de la clase de plantilla WizardPageImpl, que implementa la interfaz IWizardPage. Cada página del asistente puede implementar otras clases de plantilla opcionales e interfaces correspondientes en función de las necesidades de la página.
La clase de plantilla WizardPageImpl tiene varias interfaces útiles que pueden ayudarle a escribir páginas de asistente personalizadas. Implemente la clase de plantilla WizardPageImpl como clase base para su página de asistente personalizada.
Para obtener una lista de los disponibles:
Clases de plantilla para páginas del asistente, consulte Clases auxiliares de página del asistente
Interfaces para las clases de plantilla de página del asistente, consulte Interfaces de página del asistente
La página del asistente personalizada del ejemplo se deriva de la clase de plantilla WizardPageImpl e implementa la interfaz IWizardPage. Además, la página del asistente personalizado implementa la interfaz IFieldCallback . Ambas opciones se implementan en el archivo LocationPage.cpp.
La página de asistente personalizado de ejemplo invalida los métodos siguientes:
OnWindowCreated. El método OnWindowCreated de la página del asistente de ejemplo llama a los métodos siguientes:
AddField. Este método relaciona el control de cuadro IDC_COMBO_LOCATION del recurso IDD_LOCATION_PAGE con el elemento de datos denominado Ubicación en el archivo Config.xml.
Además del método AddField , puede usar los métodos AddRadioGroup y AddToGroup para admitir otros controles y comportamientos.
Nota:
Asegúrese de llamar al método AddField, AddRadioGroup o AddToGroup antes de llamar al método InitFields .
InitFields. Use este método para inicializar los campos (controles) que ha agregado al formulario. El puntero de la página es un parámetro. En el ejemplo, se pasa el puntero this , que hace referencia a la página actual.
Nota:
Para admitir el uso del puntero this, debe implementar la interfaz IFieldCallback además de las interfaces que admite la clase de plantilla WizardPageImpl .
La interfaz IFieldCallback llama al método SetFieldDefault , que se utiliza para establecer los valores predeterminados para controles distintos de los controles de cuadro de texto y casilla. En el ejemplo, el método SetFieldDefault establece el índice inicial del control de cuadro combinado en función del valor predeterminado especificado en el elemento Default para el elemento Field del archivo Config.xml.
El método OnWindowCreated configura el controlador de formulario mediante la interfaz IFormController. Para obtener más información sobre cómo configurar el controlador del formulario, consulte Configuración del formulario.
InitLocations. Este método rellena el cuadro combinado desde la lista de ubicaciones en el archivo Config.xml. El elemento Data y los elementos DataItem secundarios del archivo Confg.xml proporcionan la lista de valores posibles.
OnNextSelected. Este método realiza las tareas siguientes:
Haga novedades la variable de secuencia de tareas TSLocation con el valor seleccionado en el cuadro combinado mediante el método SaveFields
Agrega información que se mostrará en la página Resumen mediante el método SaveFields
Paso 4: Se selecciona el botón Siguiente en la página del asistente personalizado
Cuando el usuario completa los campos de la página del asistente personalizado, selecciona Siguiente, que llama al método OnNextSelected . El método OnNextSelected realiza todas las tareas necesarias antes de pasar a la siguiente página del asistente, como registrar los cambios de configuración realizados en la página del asistente personalizada.
Para la página del asistente personalizada de ejemplo, la invalidación del método OnNextSelected se implementa en el archivo LocationPage.ccp. En el método OnNextSelected de la página del asistente personalizado de ejemplo, se llama a los métodos siguientes:
Sección inicial. Este método inicializa el encabezado (subtítulo de etiqueta) para los datos de resumen mostrados en la página Resumen. Normalmente, puede establecer este valor mediante la función DisplayName(). Los datos asociados a este subtítulo se guardan mediante el método SaveFields.
SaveFields. Este método guarda los valores de campo en las variables de secuencia de tareas y en los datos que se muestran en la página Resumen .
Revisar la solución SampleEditor Visual Studio
Antes de comenzar a crear sus propias páginas del asistente personalizadas y editores de páginas del asistente, realice los pasos siguientes para preparar el entorno de desarrollo de UDI:
Revisa la arquitectura de UDI Wizard Designer como se describe en Revisar la arquitectura de UDI Wizard Designer.
Revise los componentes de una página del Asistente de UDI que se pueden personalizar con el archivo de configuración del Asistente de UDI como se describe en Revisar componentes configurables de una página del Asistente de UDI.
Revisa el ejemplo de EditorPage proporcionado en el SDK de UDI como se describe en Revisa el ejemplo de EditorPage.
Revisar la arquitectura del UDI Wizard Designer
UDI Wizard Designer se desarrolló con WPF, Prism y Unity. El Designer UDI se usa para editar el archivo de configuración del Asistente para UDI (UDIWizard_Config.xml), que el Asistente para UDI (OSDSetupWizard.exe) lee en tiempo de ejecución. El elemento Páginas del archivo de configuración del Asistente UDI contiene una lista de páginas que tiene un elemento Page independiente para cada página del asistente.
Al editar los valores de configuración de una página del asistente, UDI Wizard Designer carga el editor de página personalizado correspondiente al tipo de página del asistente. Los editores de página del asistente personalizado se desarrollan como controles de usuario de WPF. Las páginas del editor de páginas del asistente personalizado usan el patrón de diseño Model-View-ViewModel (MVVM) para WPF.
El patrón de diseño MVVM ayuda a separar la interfaz de usuario (interfaz de usuario; presentación) de los datos que se presentan. Los datos son una fachada sobre el elemento Page en el archivo de configuración del Asistente para UDI (el archivo Config.xml del ejemplo), al que se accede mediante la propiedad CurrentPage de la interfaz IDataService .
UDI Wizard Designer usa DependencyAttribute para obtener acceso a la clase DataService basada en el marco de inserción de dependencias en Unity. Para obtener más información sobre el marco de interjección de dependencias en Unity, consulte Inyectar algo de vida en sus aplicaciones: conocer el bloque de aplicaciones de Unity.
Revisar los componentes configurables de una página del asistente de UDI
Al crear su página del asistente personalizada, algunas de las opciones de configuración pueden establecerse en el código y no se pueden cambiar después de haber compilado la página. Sin embargo, para otras opciones de configuración, deberá permitir que esas opciones de configuración se cambien mediante UDI Wizard Designer.
Normalmente, las opciones de configuración que desea configurar mediante el Asistente para UDI Designer se guardan en el archivo de configuración del Asistente para UDI (el archivo Config.xml del ejemplo). No obstante, también puede crear su propio archivo de configuración independiente, si es necesario. Un ejemplo del uso de un archivo de configuración independiente es el archivo UDIWizard_Config.xml.app, que usan la tarea Detección de aplicaciones y el tipo de página Asistente ApplicationPage .
A continuación se muestra una lista de las opciones de configuración típicas que puede administrar con UDI Wizard Designer:
campo. Los campos de uso permiten a los usuarios proporcionar información. Los campos aparecen como elementos de campo en el archivo de configuración (UDIWizard_Config.xml) del Asistente para UDI, que contiene las opciones de configuración de cada campo. El editor de páginas del asistente correspondiente necesita proporcionar un método para editar las opciones de configuración de campo para el campo usando FieldElementControl.
Propiedades. Los posicionadores ayudan a crear propiedades para entidades en la página, como páginas en el elemento Página , campos en el elemento Campo o datos en los elementos Datos o DataItem . Las propiedades se configuran en los elementos Setter . Agregue un elemento Setter independiente para cada propiedad que desee definir. Edita las propiedades usando el SetterControl y configura otros elementos de Setter usando otros controles.
Datos: Los datos se utilizan para almacenar información que utilizará la página del asistente y otros componentes. Puede definir datos para páginas o campos mediante los elementos Data o DataItem . Los datos se pueden definir en una estructura plana o jerárquica mediante el uso adecuado de los elementos Data o DataItem . En el Config.xml del ejemplo del SDK se muestra cómo construir estructuras de datos planas.
El editor de páginas del asistente personalizado que cree debe poder administrar estas opciones de configuración.
Revisar el ejemplo de EditorPage
El ejemplo EditorPage se usa para configurar las opciones de configuración de la página del Asistente SamplePage en el archivo de configuración del Asistente UDI. El ejemplo de EditorPage tiene los siguientes componentes principales:
Interfaz de usuario para configurar los ajustes del cuadro combinado de ubicación
Interfaz de usuario para agregar o editar una ubicación en la lista de posibles ubicaciones, que se muestran en el cuadro combinado Ubicación
Opciones de configuración leídas y guardadas en el archivo de configuración del Asistente para UDI
Código auxiliar para los demás componentes
Revise el ejemplo de EditorPage en Visual Studio siguiendo estos pasos:
Revise cómo se carga e inicializa el editor de páginas del asistente SampleEditor en UDI Wizard Designer, como se describe en Carga e inicialización del editor de páginas del Asistente para revisión.
Revisa la interfaz de usuario usada para editar el cuadro combinado Ubicación en los archivos LocationPageEditor.xaml y LocationPageEditor.xaml.cs como se describe en Revisa la interfaz de usuario usada para configurar el cuadro combinado Ubicación.
Revise la interfaz de usuario que se usa para agregar o editar ubicaciones en la lista en AddEditLocationView.xaml y AddEditLocationView.xaml.cs archivos, tal como se describe en Revise la interfaz de usuario usada para modificar la lista de ubicaciones posibles.
Revise el código usado para administrar la información de configuración guardada en el archivo de configuración del Asistente de UDI como se describe en Revise el código usado para administrar la información de configuración.
Carga e inicialización del editor de páginas del Asistente para revisión
Los editores de páginas del asistente personalizado se cargan según lo requiera UDI Wizard Designer. Los archivos de configuración de UDI Wizard Designer se cargan cuando se inicia UDI Wizard Designer. El Designer Asistente para UDI examina la carpeta install_folder\Bin\Config (donde install_folder es el nombre de la carpeta donde está instalado MDT) en busca de archivos que tengan una extensión de archivo .config.
Durante la configuración del entorno de desarrollo de UDI, copió el archivo SamplePage.dll.confg en la carpeta install_folder\Bin\Config. Cuando inicia el Asistente para UDI Designer, se encuentra y carga el archivo SamplePage.dll.confg.
El Asistente UDI Designer utiliza los siguientes atributos del elemento Page en el archivo SamplePage.dll.confg para cargar e inicializar el ejemplo EditorPage:
DesignerAssembly. Este atributo determina el nombre de la DLL que se va a cargar. Esta DLL debe colocarse en la misma carpeta que el archivo UDIDesigner.exe, que es la carpeta install_folder\Bin (donde install_folder es el nombre de la carpeta en la que está instalado MDT).
DesignerType. Este atributo es el nombre de tipo Microsoft .NET de la clase que contiene el control de usuario WPF.
Tipo. Use este atributo para configurar el tipo de página de la página del asistente personalizada, que carga el asistente de UDI. UDI Wizard Designer utiliza este atributo para buscar el elemento de página adecuado en el archivo de configuración del UDI Wizard.
Dll. Use este atributo para configurar el elemento DLL en el archivo de configuración del Asistente de UDI, que crea UDI Wizard Designer.
Descripción. Use este atributo para proporcionar información sobre el editor de páginas del asistente. El valor de este atributo se muestra en el cuadro de diálogo Agregar nueva página del UDI Wizard Designer, que se utiliza para agregar la página del Asistente a la "Biblioteca de páginas".
DisplayName. Use este atributo para proporcionar el nombre de la página del asistente personalizada que se muestra en UDI Wizard Designer. El valor de este atributo se muestra en el cuadro de diálogo Agregar nueva página del UDI Wizard Designer, que se utiliza para agregar la página del Asistente a la "Biblioteca de páginas".
En el ejemplo, el tipo de página del asistente personalizado SamplePage es Microsoft.SamplePage.LocationPage, que se guarda en el archivo Config.xml. El archivo Config.xml reside en la carpeta local_folder\SDK\SamplePage\SamplePage en (donde local_folder es la carpeta que creó en el equipo de desarrollo anteriormente en el proceso de configuración).
Revisar la interfaz de usuario usada para configurar el cuadro combinado de ubicación
Cuando se carga e inicializa el editor de páginas del asistente, el editor de páginas del asistente SampleEditor se carga cuando se edita una página con un tipo de Microsoft.SamplePage.LocationPage . La interfaz de usuario del editor de páginas se almacena en el archivo LocationPageEditor.xaml.
Si examina la interfaz de usuario en la pestaña Diseño y el código en la pestaña XAML , puede ver la relación entre la interfaz de usuario gráfica y los elementos y atributos en el Lenguaje de marcado de aplicaciones extensible (XAML).
Por ejemplo, si revisas el elemento Controls:FieldElementControl en el XAML, puedes ver cómo se relaciona con el diseño de la interfaz de usuario correspondiente. Use el elemento Controls:FieldElementControl para definir el control FieldElementControl .
Los parámetros de enlace del archivo XAML enlazan los campos del editor de páginas de ejemplo con la información del archivo de configuración del asistente UDI. Por ejemplo, el código siguiente vincula el cuadro de texto Valor predeterminado con el elemento Predeterminado en el archivo de configuración del asistente UDI (Config.xml en el ejemplo):
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
Para obtener más información, vea Cómo: Hacer que los datos estén disponibles para el enlace en XAML.
Utilice el elemento Views:CollectionTControl.ColumnCollectionView en el XAML para editar la lista de ubicaciones disponibles en la vista de cuadrícula. Utilice el control CollectionTControl para mostrar la vista de cuadrícula y enlazar la vista de cuadrícula al elemento de datos con el nombre Ubicación en el archivo de configuración UDI.
Revise la interfaz de usuario usada para modificar la lista de posibles ubicaciones
La interfaz de usuario para modificar la lista de posibles ubicaciones consta de:
Un menú contextual y botones de la cinta de opciones que permiten agregar, editar, quitar o cambiar el orden de los elementos en la lista de ubicaciones, tal como se describe en Revisar Botones contextuales del menú y de la cinta para modificar la lista de ubicaciones
Un cuadro de diálogo que se inicia cuando selecciona agregar o editar un elemento de la lista de ubicaciones, como se describe en Revisar el cuadro de diálogo para agregar o editar ubicaciones
Revise el menú contextual y los botones de la cinta para modificar la lista de ubicaciones
Al hacer clic con el botón derecho en el cuadro de lista que contiene la lista de ubicaciones, se muestra un menú contextual. La cinta tiene botones correspondientes que le permiten realizar las mismas tareas. El elemento de control Views:CollectionsTControl del archivo LocationPageEditor.xaml define los métodos a los que se llama en función de la acción realizada y las propiedades que se establecen de la siguiente manera:
SelectedItem. Esta propiedad enlazada a datos se activa cuando el usuario selecciona un elemento de la lista. Esta propiedad está vinculada a la propiedad CurrentLocation en el modelo de vista, que se encuentra en el archivo LocationPageEditorViewModel.cs y es utilizada por el control CollectionTControl para pasar el elemento seleccionado al editar o quitar un elemento existente.
AddItemAction. Esta acción se realiza cuando el usuario selecciona la opción Agregar elemento en el menú contextual o los botones correspondientes de la cinta de opciones. Hay un enlace de datos a una propiedad en el modelo de vista que devuelve el objeto AddLocationAction . Este objeto es el método AddLocationCallback , ubicado en el archivo LocationPageEditorViewModel.cs, y muestra el cuadro de diálogo en el archivo AddEditLocationView.xaml.
EditItemAction. Esta acción se realiza cuando el usuario selecciona la opción Editar elemento en el menú contextual. Hay un enlace de datos a una propiedad en el modelo de vista que devuelve el objeto EditLocationAction . Este objeto es el método EditLocationCallback , ubicado en el archivo LocationPageEditorViewModel.cs, y muestra el cuadro de diálogo en el archivo AddEditLocationView.xaml.
RemoveAction. Esta acción se realiza cuando el usuario selecciona la opción Quitar elemento en el menú contextual. Hay un enlace de datos a una propiedad en el modelo de vista que devuelve el objeto RemoveAction . Este objeto es el método EditLocationCallback , ubicado en el archivo LocationPageEditorViewModel.cs, y muestra un mensaje que confirma la eliminación de la ubicación.
Revise el cuadro de diálogo para agregar o editar ubicaciones
Si agrega una nueva ubicación a la lista de ubicaciones o edita una ubicación existente, se muestra un mensaje que se encuentra en el archivo AddEditLocationView.xaml. El mensaje se muestra mediante el método de ventana ShowDialogWindow en el archivo LocationPageEditorViewModel.cs.
La interfaz de usuario del archivo AddEditLocationView.xaml consta de:
Un marco de diálogo denominado DialogFrame, que incluye los siguientes elementos:
Un título, que se configura utilizando el atributo DialogTitle del marco de diálogo
Un botón Aceptar , que establece el estado devuelto como para la propiedad Aprobado en Verdadero (el estado devuelto se comprueba en el método AddLocationCallback en el archivo LocationPageEditorViewModel.cs para determinar si el usuario seleccionó Aceptar).
Un botón Cancelar , que establece el estado de devolución como para la propiedad Aprobado en False (el estado de devolución se comprueba en el método AddLocationCallback en el archivo LocationPageEditorViewModel.cs para determinar si el usuario seleccionó Cancelar).
Un elemento WPF que contiene:
Una etiqueta, que se configura mediante el atributo Content
Un cuadro de texto, que está enlazado al elemento de datos con el nombre Ubicación en el archivo de configuración UDI (el archivo Config.xml del ejemplo)
Revisar el código usado para administrar la información de configuración
La información de configuración de la página del asistente personalizada se almacena en el archivo de configuración del asistente de UDI, que es el:
Config.xml archivo del ejemplo proporcionado con el SDK de UDI (este archivo contiene solo las opciones de configuración del ejemplo).
UDIWizard_Config.xml archivo proporcionado con MDT, almacenado en la carpeta installation_folder\Templates\Distribution\Scripts (donde installation_folder es la carpeta en la que instaló MDT); Este archivo contiene las opciones de configuración de todas las páginas y fases del asistente integrado
En el ejemplo de SampleEditor, la rutina Ubicaciones ayuda a administrar la información de configuración y se encuentra en el archivo LocationPageEditorViewModel.cs. La rutina Ubicaciones devuelve una lista de las ubicaciones del archivo de configuración del Asistente UDI. En concreto, la lista devuelta contiene un elemento para cada elemento DataItem del archivo de configuración del Asistente para UDI.
Creación de páginas personalizadas del asistente UDI
El proceso de alto nivel para crear páginas personalizadas del asistente UDI es el siguiente:
Realice una copia de la solución de SamplePage como punto de partida.
Coloque los controles deseados (campos) en el formulario.
Escriba el código para realizar las tareas apropiadas cuando se cargue la página del asistente (invalidaciones para el método OnWindowCreated ), incluidos los pasos siguientes:
Inicialice el formulario.
Lea variables de memoria, variables de secuencia de tareas, variables de entorno o información de archivos XML (como propiedades de Setter ).
Escriba cualquier código para realizar las tareas apropiadas cuando se muestre la página (invalidaciones para el método OnWindowShown ), incluidos los pasos siguientes:
Habilite o deshabilite los controles en función de la información leída cuando se cargó la página en el paso 3.
Actualice los controles según la información leída cuando se cargue la página en el paso 3, como el rellenado de controles según la información leída.
Escriba cualquier código para realizar las tareas adecuadas mientras el usuario interactúa con la página del asistente.
Escriba cualquier código para realizar las tareas apropiadas cuando el usuario seleccione Siguiente en el Asistente para UDI (invalidaciones para el método OnNextSelected ), incluidos los pasos siguientes:
Actualice las variables de memoria, de secuencia de tareas, de entorno o de información de archivos XML.
Actualizar la información de la página de resumen (si no se realiza con los campos de la página).
Compile la solución.
Asegúrese de que la versión de la DLL que cree sea la misma plataforma de procesador que la instalación de MDT, en concreto, la plataforma de procesador para el Entorno de preinstalación de Windows (Windows PE). El Asistente de UDI puede ejecutarse en:
El sistema operativo existente en el equipo de destino. Puede ejecutar versiones de 32 bits de la página del asistente en sistemas operativos Windows de 32 o 64 bits. Sin embargo, solo puede ejecutar versiones de 64 bits de la página del asistente en sistemas operativos Windows de 64 bits.
Windows PE en el equipo de destino. Windows PE no admite la ejecución de aplicaciones de 32 bits en una versión de 64 bits de Windows PE. Por lo tanto, debe haber creado una versión para la página del asistente para cada arquitectura de procesador de Windows PE que tenga previsto usar.
Copie el DLL de la página del asistente personalizado en la carpeta installation_folder\Templates\Distribution\Tools\platform (donde installation_folder es la carpeta en la que instaló MDT y la plataforma es x86 para la versión de 32 bits o x64 es para la versión de 64 bits).
Complete los pasos para crear un editor de páginas personalizado.
Creación de editores de páginas del asistente personalizado
El proceso de alto nivel para crear editores de páginas del asistente UDI personalizado es el siguiente:
Realice una copia de la solución SampleEditor como punto de partida.
Cree la interfaz de usuario del editor de páginas principal en un archivo .xaml.
Agregue instancias del control FieldElementControl según requiera la página del asistente que se configurará (si es necesario).
Agregue instancias del control SetterControl según lo requiera la página del asistente que se configurará (si es necesario).
Agregue instancias del control CollectionTControl según sea necesario que la página del asistente se configure (si es necesario).
Agregue la interfaz IDataService .
Escriba el código adecuado para actualizar el archivo de configuración del Asistente UDI en función de las opciones de configuración que se configuren con el editor de páginas del asistente personalizado.
Cree cuadros de diálogo secundarios en un archivo .xaml y llámelos desde el editor de página principal mediante la interfaz IMessageBoxService según lo requiera la página del asistente que se va a configurar.
Agregue las interfaces apropiadas a la cinta de opciones de UDI Wizard Designer en función de los requisitos de la página del asistente que se va a configurar.
Compile la solución.
Nota:
Asegúrese de que la versión de la DLL que cree sea la misma plataforma de procesador que la instalación de MDT. Por ejemplo, si instalas la versión de 64 bits de MDT, creas una versión de 64 bits del editor de páginas personalizado.
Cree un archivo de configuración del Designer del asistente UDI para cargar las DLL necesarias y asignar el editor de páginas del asistente con la página del asistente correspondiente (el archivo SamplePage.dll.config del ejemplo).
Para obtener más información sobre los elementos necesarios para realizar la asignación entre la página del asistente y el editor de páginas del asistente, vea el elemento DesignerMappings , los elementos secundarios y los atributos correspondientes.
Copia el archivo de configuración del Designer del asistente de UDI que creó en el paso anterior en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instalaste la versión de MDT).
Copie el archivo DLL de su editor de página del asistente personalizado en la carpeta installation_folder\Bin (donde installation_folder es la carpeta en la que instaló MDT).
Creación de tareas UDI personalizadas
Las tareas UDI son DLL escritas en C++ que implementan la interfaz ITask. Para registrar la DLL en la biblioteca de tareas del Asistente para UDI, Designer cree un archivo de configuración del Asistente para UDI Designer (archivo .config) y colóquelo en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instaló MDT).
Nota:
Puede crear una DLL que contenga páginas del asistente, tareas y validadores dentro del mismo archivo .dll. También puede crear un único archivo de configuración (Designer.config) del asistente UDI que contenga las opciones de configuración de las páginas del asistente, las tareas y los validadores de la DLL.
Para crear tareas UDI personalizadas
Escribir código que implemente la interfaz de ITask y los métodos siguientes:
inicialización. Este método se llama para inicializar la tarea.
Ejecutar. Se llama a este método para ejecutar la tarea.
Escribir código que registre el factoría de clase de tarea personalizada con el registro de factoría.
Cree la solución para su tarea personalizada.
Nota:
Asegúrese de que la versión de la DLL que cree sea la misma plataforma de procesador que la instalación de MDT. Por ejemplo, si instalas la versión de 64 bits de MDT, creas una versión de 64 bits de la tarea UDI personalizada.
Cree un elemento Task en el elemento TaskLibrary en el archivo de configuración UDI Wizard Designer, similar al siguiente extracto:
<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>Nota:
Todos los elementos de Task deben incluir el parámetro BitmapFilename . Especifique todos los demás parámetros según lo requiera la tarea. Por ejemplo, en el extracto anterior, el parámetro de registro se utiliza para especificar un parámetro para la ubicación de un archivo de registro.
Copia el archivo de configuración del Designer del asistente UDI creado en el paso anterior en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instaló MDT).
Copie el archivo DLL de la tarea personalizada en la carpeta de plataforma installation_folder\Templates\Distribution\Tools\ (donde installation_folder es la carpeta en la que instaló MDT y plataforma es x86 para la versión de 32 bits o x64 es para la versión de 64 bits).
Creación de validadores UDI personalizados
Los validadores UDI son DLL escritas en C++ que implementan la interfaz IValidator. Para registrar el archivo DLL con el Asistente para UDI Designer para el validador, cree un archivo de configuración del Asistente para Designer UDI (archivo .config) y colóquelo en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instaló MDT).
Para crear validadores de UDI personalizados
Escriba código que cree una subclase de la clase BaseValidator e implemente los métodos siguientes:
Init(IControl, *pControl, IWizardPageContainer, *pContainer, IStringProperties, *pProperties). El controlador de formulario llama al miembro Init para inicializar el validador. Este método debe llamar al método Init para la clase BaseValidator . Normalmente lee las propiedades establecidas para el validador desde el archivo de configuración del Asistente para UDI. Por ejemplo, el validador InvalidCharactersValidator recupera el valor de la propiedad InvalidChars con este método.
Es válido. El controlador de formularios llama a este método para ver si el control contiene texto válido. A continuación se muestra un ejemplo del método IsValid de un validador que valida que el campo no está vacío:
BOOL IsValid(LPBSTR pMessage) { __super::IsValid(pMessage); _bstr_t text; m_pText->GetText(text.GetAddress()); return (text.length() > 0); }init(IControl *pControl, LPCTSTR message). El controlador de formulario llama a este miembro para cada pulsación de tecla y otros eventos para que el validador pueda validar el contenido del control y los mensajes actualizados en la parte inferior de la página del asistente (o borrarlos).
Normalmente, estos son los únicos métodos que necesita invalidar. Sin embargo, dependiendo del validador, es posible que necesite invalidar otros métodos en la subclase de la clase BaseValidator que cree. Para obtener más información acerca de estos otros métodos, vea la clase BaseValidator .
Escribir código que registre la clase de tarea personalizada con el generador del Registro.
Cree la solución para su tarea personalizada.
Nota:
Asegúrese de que la versión de la DLL que cree sea la misma plataforma de procesador que la instalación de MDT. Por ejemplo, si instalas la versión de 64 bits de MDT, creas una versión de 64 bits de la tarea UDI personalizada.
Cree un elemento Validator en el elemento ValidatorLibrary en el archivo de configuración UDI Wizard Designer, similar al siguiente extracto:
<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>Advertencia
Todos los elementos de Validator deben incluir el parámetro Message . Especifique todos los demás parámetros según lo requiera el validador. Por ejemplo, en el extracto anterior, el parámetro NamedPattern se usa para especificar un parámetro para el nombre de un patrón de expresión regular predefinido.
Copia el archivo de configuración del Designer del asistente UDI creado en el paso anterior en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instaló MDT).
Copie el archivo DLL de la tarea personalizada en la carpeta de plataforma installation_folder\Templates\Distribution\Tools\ (donde installation_folder es la carpeta en la que instaló MDT y plataforma es x86 para la versión de 32 bits o x64 es para la versión de 64 bits).
Referencia del asistente UDI
Componentes de página del asistente
Puede usar cualquiera de los diversos componentes precompilados para crear sus páginas personalizadas.
Crear instancias de componentes
El Asistente de UDI utiliza factorías de clases para crear nuevas instancias de objetos para usted. Estas fábricas están registradas en un registro de fábrica, utilizando una cadena como clave de la fábrica. Por ejemplo, el componente WmiRepository se identifica mediante la cadena "Microsoft.Wizard.WmiRepository", que está disponible en el archivo de encabezado IWmiRepository como ID_WmiRepository.
Suponiendo que ha escrito su página como una subclase de WizardPageImpl, puede crear una nueva instancia de WmiRepoistory como esta:
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
La función CreateInstance es una función de plantilla segura para crear nuevas instancias de componentes. PWmiRepository es un puntero inteligente, por lo que maneja el recuento de referencias por usted.
Componentes creables
Hay un conjunto de componentes que puede registrar en el registro. El primer conjunto de componentes siempre está registrado, porque el archivo ejecutable principal del Asistente de UDI lo proporciona. Los otros dos conjuntos de componentes se proporcionan en archivos DLL "opcionales". Para que estos componentes estén disponibles, la DLL debe aparecer en la sección DLL del archivo XML .config. No es necesario que el código sepa qué archivo ejecutable contiene un componente específico.
La lista de ID de componentes para componentes (el nombre del componente es el mismo que el ID pero sin el ID_ inicial) registrados en el registro de fábrica (definido en OSDSetupWizard) se muestra en la Tabla 3.
Tabla 3. Identificadores de componentes
| ID | Descripción |
|---|---|
| ID_ACPowerTask | (ITask, IWizardComponent) Una tarea preliminar que garantiza que el equipo no se está ejecutando solo con la batería |
| ID_AppDiscoveryTask | (ITask, IWizardComponent) Una tarea especializada para descubrir qué elementos de software tiene instalados en su equipo |
| ID_BackgroundTask | (IBackgroundTask, IWizardComponent) Puede usarse para ejecutar una tarea en otro subproceso |
| ID_CopyFilesTask | (ITask, IWizardComponent) Una tarea para copiar uno o varios archivos |
| ID_FormController | (IFormController) Lo más probable es que no necesite crear una instancia usted mismo, ya que su página recibe su propia instancia |
| ID_InvalidCharactersValidator | (IValidator) Garantiza que ningún campo de texto contenga caracteres de una lista proporcionada al validador |
| ID_Logger | (ILogger) Lo más probable es que no necesite crear una instancia usted mismo, ya que la página recibe un puntero a la instancia compartida |
| ID_NonEmptyValidator | (IValidator) Un validador que garantiza que ningún campo está vacío |
| ID_PasswordValidator | (IValidator) Un validador que garantiza que no hay dos campos de texto con el mismo contenido |
| ID_Regex | (IRegEx) Evalúa las expresiones regulares, buscando coincidencias. |
| ID_RegExValidator | (IValidator) Un validador que valida contra una expresión regular o un patrón conocido |
| ID_SimpleStringProperties | (IStringProperties, ISimpleStringProperties) Proporciona una forma sencilla de enviar propiedades a tareas sin usar XML |
| ID_ShellExecuteTask | (ITask, IWizardComponent) Ejecutar un programa externo |
| ID_SummaryBag | (Bolsa de Resumen) Disponible indirectamente desde la página a través del método de formulario |
| ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent) Administra la ejecución de un conjunto de tareas y la interfaz de usuario |
| ID_WmiRepository | (IWmiRepository, IWizardComponent) Permite ejecutar consultas de Instrumental de administración de Windows (WMI) |
| ID_IXmlDocument | (IXmlDocument) Proporciona una fachada para leer y escribir documentos XML |
Los OSDRefreshWizard.dll definidos, las páginas compartidas y otros componentes de control se muestran en la Tabla 4 y la Tabla 5.
Tabla 4. Controles de directorio
| ID | Descripción |
|---|---|
| ID_Directory | (IDirectoría) Una fachada para obtener información de directorios del sistema de archivos |
Tabla 5. Definición SharedPages.dll
| ID | Descripción |
|---|---|
| ID_ADHelper | (IADHelper) Proporciona una fachada para un conjunto limitado de características en los Servicios de dominio de Active Directory® (AD DS) |
| ID_CpuInfo | (ICpuInfo) Determina si la CPU es de 32 o 64 bits |
| ID_DomainJoinValidator | (IDomainJoinValidator) Tiene algunos métodos para comprobar si un conjunto de credenciales puede unirse a un dominio |
| ID_DriveList | (IDriveList, IBindableList, IWizardComponent) Usa WMI para obtener una lista de unidades en el equipo |
| ID_WiredNetworkTask | (ITask) Una tarea que comprueba si está conectado a la red con un adaptador de red cableado (en lugar de inalámbrico) |
Componentes de control
Usted interactúa con los controles de la página a través de la función de plantilla GetControlWrapper , que proporciona acceso a uno de los tipos de componentes enumerados en la tabla 6.
Tabla 6. Componentes
| Tipos de controles de cuadro de diálogo | Descripción |
|---|---|
| CONTROL_CHECK_BOX | (ICheckBox) Una fachada para trabajar con controles de casilla |
| CONTROL_COMBO_BOX | (IComboBox) Una fachada para controles de cuadro combinado |
| CONTROL_GENERIC | (IControl) Permite trabajar con la mayoría de los tipos de controles para controlar la habilitación y el estado visible |
| CONTROL_LIST_VIEW | (IListView) Una fachada que proporciona acceso a las características de un control de vista de lista |
| CONTROL_PROGRESS_BAR | (IProgressBar) Una fachada para trabajar con la posición de un control de barra de progreso |
| CONTROL_RADIO_BUTTON | (IRadioButton) Una fachada para trabajar con controles de botón de radio |
| CONTROL_STATIC_TEXT | (IStaticText) Una fachada que proporciona permiso de lectura y escritura al texto de un control, como una etiqueta o un cuadro de texto |
| CONTROL_TREE_VIEW | (ItreeView) Una fachada para trabajar con un control de vista de árbol |
Componente Lista de imágenes
Este componente es una fachada para un control ImageList en la página. Cree una lista de imágenes a través de la interfaz IListView o ITreeView .
Componente FormController
El asistente crea automáticamente este componente y lo pasa a la página. Se accede a él desde la página mediante el método Form , que implementa la clase base WizardPageImpl .
Componente InvalidCharacterValidator
Este es un tipo de validador que puedes incluir en una página. El identificador es ID_InvalidCharactersValidator (definido en IValidator.h), que tiene un valor de texto de "Microsoft.Wizard.Validation.InvalidChars".
Este validador busca una sola propiedad (un elemento Setter en el archivo .config) denominada InvalidChars, que es una lista de caracteres no permitidos. Comprueba los caracteres de un cuadro de texto; Si el texto contiene algún carácter de esta lista, el componente notifica un error.
NonEmptyValidator Component
Este es un tipo de validador que puedes incluir en una página. El identificador es ID_NonEmptyValidator (definido en IValidator.h), que tiene un valor de texto de "Microsoft.Wizard.Validation.NonEmpty".
Este validador notifica un error si el cuadro de texto (o cualquier otro control que admita IStaticText) tiene un valor de cadena vacío.
Componente PasswordValidator
Este es un tipo de validador que puedes incluir en una página. El identificador es ID_PasswordValidator (definido en IValidator.h), que tiene un valor de texto de "Microsoft.Wizard.Validation.Password".
Este validador funciona con dos controles de texto diferentes (controles que admiten IStaticText) e informa de un error si no contienen los mismos valores. En otras palabras, se produce un error si los cuadros de texto Contraseña y Confirmar contraseña no coinciden.
Dado que este validador requiere dos controles, necesita más configuración que otros validadores. La configuración podría parecerse a esto:
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);
En primer lugar, defina el control Confirmar contraseña como un "hijo" del control Contraseña . De esta manera, si el controlador de formularios deshabilita el control de contraseña , también deshabilitará el control Confirmar contraseña . A continuación, agregue un validador de contraseñas al formulario. Por último, proporcione al validador de contraseñas la interfaz para el control Confirmar contraseña .
Debido al requisito de dos controles, debe usar código para configurar este validador en lugar del archivo XML .config.
Componente RegExValidator
Este es un tipo de validador que puedes incluir en una página. El identificador es ID_RegExValidator (definido en IValidator.h), que tiene un valor de texto de "Microsoft.Wizard.Validation.RegEx".
Este validador compara el contenido de un control de texto (uno que admite IStaticText) con una expresión regular y produce un error si el texto no coincide con la expresión regular.
Como alternativa, puede usar este validador con un patrón con nombre predefinido. Para usar una expresión regular, el XML debe contener una propiedad de establecedor denominada Pattern. Si desea usar un patrón con nombre en su lugar, use un establecedor llamado NamedPattern establecido en uno de los valores de la Tabla 7.
Tabla 7. Emisores de patrones con nombre
| Pattern | Descripción |
|---|---|
| Nombre de usuario | Comprueba que el texto es de la forma dominio\usuario o user@domain |
| Nombre del equipo | El nombre debe tener entre 1 y 15 caracteres y no puede incluir un conjunto de caracteres (como : y ?) |
| Workgroup | El nombre debe tener entre 1 y 15 caracteres y no puede contener un conjunto de caracteres (como =, + y ?) |
Componente FactoryRegistry
Este componente realiza un seguimiento de todas las fábricas y servicios de clase. Implementa la interfaz IFactoryRegistry y está disponible indirectamente a través del método Container de la página. Además, el Registro carga archivos DLL de extensión. Después de cargar una DLL, el Registro busca una función exportada denominada RegisterFactories. Debe implementar esta función y en ella registrar las fábricas de clases para sus páginas, tareas y validadores (y cualquier otra fábrica de clases que desee registrar). Este es un ejemplo del proyecto de ejemplo:
extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)
{
Register<LocationPageFactory>(ID_LocationPage, factories);
}
Componente del registrador
Este componente está disponible para la página a través del método Logger (implementado por WizardPageImpl). Utilice este método para escribir entradas en el archivo de registro. El contenido del archivo de registro es útil para diagnosticar problemas que puedan tener los usuarios al ejecutar el Asistente de UDI.
Componente PropertyBag
El contenedor de propiedades es un contenedor para variables de memoria. Está disponible desde la página mediante Container()->Properties(). Las variables de memoria son útiles para pasar datos temporales entre diferentes páginas.
Componentes TSVariableBag y TSRepository
El componente TSVariableBag permite leer y escribir variables de secuencia de tareas. Mantiene los valores en la memoria hasta que el usuario selecciona Finalizar (de forma predeterminada). Puede acceder al bolsa TSVariable a través del método TSVariables de la página (implementado por la clase base WizardPageImpl ). Estos componentes registran todas las lecturas y escrituras de variables de secuencia de tareas.
Componente WmiRepository
Este componente proporciona una fachada para trabajar con consultas WMI. Puede llamar a la función auxiliar CreateInstance con ID_WmiRepository para obtener una instancia de este componente, que admite la interfaz IWmiRepository . Este componente devuelve registros de resultados a través de la interfaz IWmiIterator .
Clases auxiliares de página del asistente
Puede crear páginas personalizadas del asistente de UDI con las clases auxiliares integradas que se proporcionan con el SDK de UDI. En la Tabla 8 se enumeran las clases auxiliares que puede usar para crear páginas de asistente personalizadas.
Tabla 8. Clases auxiliares
| Clase auxiliar | Descripción |
|---|---|
| Clase ClassFactoryImpl | Se trata de una clase base útil para crear un generador de clases que, después, puede registrar en el registro de factoría. |
| Clase de plantilla de interfaz | Use esta clase de plantilla cuando desee compilar un componente que implemente más de una interfaz. |
| Clase Path Helper | Esta clase proporciona operaciones comunes de archivos o directorios. |
| Clase de plantilla de puntero | Esta clase proporciona recuento de referencias para la administración de la duración en componentes COM. Es importante liberar interfaces cuando haya terminado con ellas. Esta clase de plantilla controla la duración automáticamente. |
| Clase PUnknown | Esta clase es un puntero inteligente específico para la interfaz IUnknown. Para todas las demás interfaces, use la clase de plantilla Pointer. |
| Clase auxiliar de StringUtil | Esta clase proporciona métodos auxiliares que facilitan el trabajo con cadenas. |
| Clase de plantilla SubInterface | Esta clase base facilita la implementación de un componente que admite una interfaz que hereda a su vez de otra interfaz. |
| Clase de plantilla UnknownImpl | Esta clase controla la mayoría de los detalles de la creación de un componente COM. |
| Clase de plantilla WizardComponent | Esta clase base se usa para crear componentes que necesitan acceso a los servicios del asistente, como la creación de componentes y el registro. |
| Clase de plantilla WizardPageImpl | Esta clase base debe usarse como clase base para todas las páginas del asistente personalizadas |
Clase ClassFactoryImpl
Se trata de una clase base útil para crear un generador de clases que, después, puede registrar en el registro de factoría.
A continuación se muestra un extracto del archivo LocationPage.h del proyecto de ejemplo para definir la clase ClassFactoryImpl .
#pragma once
#include "ClassFactoryImpl.h"
class LocationPageFactory :public ClassFactoryImpl
{
protected:
IUnknown *CreateNewInstance();
};
A continuación se muestra un extracto del archivo LocationPage.cpp de la página del Asistente de ejemplo utilizado para definir el factoría de clases para la página.
IUnknown *LocationPageFactory::CreateNewInstance()
{
return static_cast<IWizardPage *>(new LocationPage);
}
Clase de plantilla de interfaz
Use esta clase de plantilla cuando desee compilar un componente que implemente más de una interfaz, por ejemplo:
classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>
Este código crea una cadena de clases base que admite tanto IFieldCalback como las interfaces que admite WizardPageImpl (que resulta ser IWizardPage).
Clase Path Helper
Esta clase proporciona operaciones comunes de archivos o directorios:
static inline std::wstring GetModulePath(HINSTANCE hModule)
También devuelve la ruta de acceso completa al archivo .exe o .dll con el identificador de instancia que se proporciona a este método:
static inline std::wstring GetModuleFilename(HINSTANCE hModule)
La clase devuelve la ruta de acceso completa y el nombre de archivo del archivo .exe y .dll con el identificador de instancia que proporciona a este método:
static inline std::wstring GetDirectoryName(LPCWSTR fullName)
. . . o solo la ruta de acceso mientras se quita el nombre de archivo:
static inline std::wstring GetFileName(LPCWSTR fullName)
Dada una ruta de acceso con un nombre de archivo, la clase auxiliar de ruta devuelve solo el nombre de archivo:
static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)
Por último, la clase devuelve una nueva cadena que es la ruta de acceso combinada y el nombre de archivo (u otra ruta de acceso).
Clase de plantilla de puntero
Esta clase se define en Pointer.h. Dado que los componentes COM utilizan el recuento de referencias para la administración de la vida útil, es importante que siempre libere las interfaces cuando termine con ellas. Microsoft proporciona una clase de plantilla que controla la duración automáticamente. Por ejemplo, si desea un puntero inteligente para una interfaz XML, podría escribir algo como esto:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
La primera línea define el puntero inteligente. La segunda línea muestra la recuperación de un puntero inteligente a través de otra llamada. El operador & siempre libera una interfaz existente si la contiene y devuelve la dirección del puntero interno. Una vez que haya recuperado un puntero como este, la instancia de Pointer llama a Release cuando la variable sale del ámbito. Microsoft recomienda usar punteros inteligentes en lugar de llamar a AddRef y Release manualmente.
Además, la clase de puntero inteligente Pointer llama a QueryInterface para recuperar otras interfaces. Por ejemplo, cuando el registro de fábrica crea una nueva instancia de un componente, tiene un código como este:
PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
pComp->SetContainer(m_pContainer);
La primera línea llama a QueryInterface en segundo plano para solicitar la interfaz IWizardComponent . El puntero inteligente resultante será igual a nullptr si el componente no admite esa interfaz.
Clase PUnknown
Esta clase es un puntero inteligente específico para la interfaz IUnknown . Para todas las demás interfaces, use la clase de plantilla Pointer .
Clase auxiliar de StringUtil
Esta clase se define en Utilities.h y proporciona métodos auxiliares que facilitan el trabajo con cadenas:
static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)
Este método compara dos cadenas mientras ignora las mayúsculas y minúsculas (consulte la Tabla 9).
Tabla 9. Clase auxiliar de StringUtil
| Devuelve | Descripción |
|---|---|
| 0 | Las cadenas coinciden, omitiendo mayúsculas y minúsculas |
| <0 | Primer < segundo |
| >0 | Primer > segundo |
A continuación le mostramos un ejemplo:
static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)
Estos métodos son un poco similares a los métodos de formato Microsoft .NET en el sentido de que los parámetros tienen la forma de {0}. Sin embargo, no realizan ningún formato de la entrada, solo la sustitución:
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)
Estos son contenedores alrededor de StringCchPrintf que devuelven una cadena de servidores , por lo que no tiene que asignar memoria para cadenas o búferes.
Clase de plantilla SubInterface
Esta clase base facilita la implementación de un componente que admite una interfaz que hereda a su vez de otra interfaz. Por ejemplo, la interfaz ICheckBox hereda de IControl. Así es como se utiliza esta clase para definir el CheckBoxWrapper:
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
La interfaz base es el primer parámetro, mientras que la interfaz derivada es el segundo parámetro.
Clase de plantilla UnknownImpl
Esta clase se define en UnknownImpl.h y controla la mayoría de los detalles de la creación de un componente COM. Este es un ejemplo de cómo usaría esta clase base:
classDirectory :public UnknownImpl<IDirectory>
Este código define una clase que admite la interfaz IDirectory .
Clase de plantilla WizardComponent
Esta clase se define en IWizardComponent.h y es una clase base útil para crear componentes que necesiten acceso a los servicios del asistente, como la creación de componentes y el registro.
A modo de ejemplo, esta es la manera en que se define el componente CopyFilesTask :
classCopyFilesTask :public WizardComponent<ITask>
{
...
El parámetro para esta clase de plantilla es la interfaz "main" que desea utilizar para su componente, que en el caso de las tareas es ITask. El uso de WizardComponent significa que el componente admite tanto la interfaz que proporciona (ITask en este ejemplo) como IWizardComponent.
Siempre que se usa el registro de factoría de clases para crear un nuevo componente, el registro llama al método IWizardComponent-SetContainer> del componente para proporcionar al componente acceso a los servicios del asistente.
Clase de plantilla WizardPageImpl
Use esta clase como clase base para las páginas personalizadas, por ejemplo:
class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>
El parámetro es el identificador de recurso de la plantilla de cuadro de diálogo.
Interfaces de página del asistente
El Asistente UDI utiliza interfaces para acceder a los diferentes controles de la página. En tu página, usas la función GetControlWrapper para recuperar un contenedor de control. A continuación le mostramos un ejemplo:
PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);
Aquí, PStaticText es un puntero inteligente a la interfaz IStaticText . Los punteros inteligentes llaman automáticamente al método COM Release() cuando salen del ámbito o se pasa la dirección de una variable (como &pFormat) a un método.
Interfaz IADHelper
__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)
Inicialice este componente, pasándolo al registrador para que pueda registrar información.
HRESULTValidLogon(nombre de usuario LPCTSTR, contraseña LPCTSTR, dominio LPCTSTR)
Este método comprueba si un conjunto de credenciales es válido, como se muestra en la Tabla 10.
Tabla 10. HResultValidLogon
| HResult | Descripción |
|---|---|
| S_OK | Las credenciales son válidas |
| S_FALSE | Las credenciales no son válidas |
| E_FAIL | No se pudo encontrar el controlador de dominio; Comprobar los registros para obtener información detallada |
HRESULT HasAccess(nombre de usuario LPCTSTR, contraseña LPCTSTR, dominio LPCTSTR, LPCTSTR computerName, LPCTSTR accountDomain)
Este método comprueba si un conjunto de credenciales tiene acceso de lectura y escritura al objeto de equipo en AD DS, como se muestra en la tabla 11.
Tabla 11. HResult HasAccess
| [HRESULT] | Description |
|---|---|
| S_OK | El usuario tiene acceso |
| E_FAIL | El usuario no tiene acceso. Compruebe el archivo de registro para obtener información adicional. |
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);
};
Información general
La página Progreso usa esta clase para ejecutar tareas en un subproceso independiente. También puede usar esta clase siempre que desee realizar operaciones en un subproceso independiente. Tasks es cualquier clase que admita la interfaz de ITask .
Esta interfaz se implementa mediante el componente ID_BackgroundTask ("Microsoft.Wizard.BackgroundTask"), definido en la interfaz IBackgroundTask.h.
HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)
Esta interfaz inicializa el componente, como se muestra en la Tabla 12.
Tabla 12. HRESULT Init
| Parámetro | Descripción |
|---|---|
| pTask | Puntero a la clase que contiene el código que desea ejecutar en otro subproceso |
| Id | Un número que puede usar en el método Finished de la devolución de llamada para indicar qué tarea terminó de ejecutarse; Es útil si inicia varias tareas con el mismo método de devolución de llamada |
| pCallback | Una clase que implementa el método Finished , al que se llama cada vez que una tarea termina de ejecutarse; la llamada al método Finished estará en el subproceso en segundo plano, no en el subproceso de la interfaz de usuario |
void Start(void)
Este método inicia la tarea en un subproceso en segundo plano y devuelve los elementos que se muestran en la tabla 13.
Tabla 13. Devolver subproceso en segundo plano
| Devuelve | Descripción |
|---|---|
| E_INVALIDARG | La tarea ya se está ejecutando, por lo que no puede iniciarla en este momento. |
| E_FAIL | Hubo un problema al iniciar el hilo. |
| S_OK | Se inició la conversación. |
BOOL Running()
Este método devuelve TRUE si la tarea en segundo plano se está ejecutando en ese momento y FALSE si no se está ejecutando.
HRESULT Wait(DWORD waitMilliseconds)
Este método espera hasta que el subproceso deja de ejecutarse o hasta que ha transcurrido el número de milisegundos.
HRESULT Terminate(DWORD, exitCode)
Este método termina el subproceso que se está ejecutando (vea la tabla 14 y la tabla 15). Este proceso puede tardar poco tiempo en finalizar después de que se devuelva este método.
Tabla 14. Código de salida de terminación HRESULT
| Parámetro | Descripción |
|---|---|
| Código de salida | El código de salida que se enviará al método de devolución de llamada Finished, que también estará disponible en el método GetExitCode . |
Tabla 15. Códigos de terminación
| Devuelve | Descripción |
|---|---|
| E_FAIL | Error en la llamada para finalizar. |
| S_OK | La solicitud para finalizar el subproceso ha sido correcta. |
HRESULT GetExitCode(LPDWORD, pCode, HRESULT *pHresult)
Use este método para obtener los resultados de la ejecución de la tarea en el subproceso en segundo plano (consulte la Tabla 16).
Tabla 16. Códigos de resultado
| Parámetro | Descripción |
|---|---|
| Código de página | Puntero a un DWORD que se establecerá en return o nullptr si no necesita el valor devuelto. Al salir, este parámetro se establece en STILL_ACTIVE si el subproceso se está ejecutando, el código devuelto por el método Execute de la tarea o el valor pasado al método Terminate si llamó a ese método. |
| pHresult | Puntero a un HRESULT que se establecerá en return o nullptr si no necesita el valor HRESULT . |
HRESULT Cerrar (vacío)
Este método libera el subproceso en segundo plano. Devuelve E_INVALIDARG si el subproceso se está ejecutando actualmente y S_OK en caso contrario.
Interfaz de ICheckBox
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void Check(comprobación BOOL)
Establezca el estado activado de la casilla. Cuando el método es VERDADERO, la casilla está activada; cuando el método es FALSO, la casilla está desactivada.
BOOL IsButtonChecked()
Este método informa del estado de comprobación actual de una casilla.
Interfaz IComboBox
__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();
};
Información general
Esta interfaz se implementa mediante el componente CheckBoxWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_COMBO_BOX.
HRESULT Bind([in] IBindableList *pList)
Use este método cuando tenga un origen de datos que implemente la interfaz IBindableList . El cuadro de lista inicializa el contenido con los subtítulos de esta lista.
Selección HRESULT (índice int)
Seleccione el elemento del cuadro combinado del índice.
int Selected(void)
Este método devuelve el índice del elemento seleccionado o -1 si no hay nada seleccionado.
void Add([in] LPCTSTR subtítulo)
Agregar manualmente un elemento al cuadro combinado.
HRESULT: GetText([out, retval], LPBSTR, pText)
Recuperar la cadena del elemento seleccionado actualmente en el cuadro combinado.
void Clear()
Quita todos los elementos del cuadro combinado.
IControl Interface
__interface IControl : IUnknown
{
HRESULT SetEnable(BOOL enable);
BOOL IsEnabled(void);
HRESULT SetVisible(BOOL visible);
};
Información general
Esta interfaz se implementa mediante el componente ControlWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_GENERIC.
HRESULT SetEnable(BOOL enable)
Habilite o deshabilite el control.
BOOL IsEnabled(void)
Devuelve VERDADERO si el control está habilitado, FALSO si no lo está.
HRESULT SetVisible(BOOL visible)
Mostrar u ocultar el control.
Interfaz ICpuInfo
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
Información general
Esta interfaz se obtiene mediante la creación de un nuevo componente ID_CpuInfo . El método único indica si la CPU es de 32 o 64 bits. Tenga en cuenta que si tiene un sistema operativo de 32 bits en un equipo de 64 bits, este método devuelve TRUE, porque solo informa del ancho de la CPU (no del sistema operativo).
Interfaz de IDirectory
__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);
};
Información general
El componente Directorio , que se crea mediante ID_Directory, proporciona una fachada para trabajar con directorios en el sistema de archivos.
BOOL FileExists(LPCWSTR name)
Este método devuelve VERDADERO si existe un archivo con el nombre que proporciona.
BOOL FindFirst([in] LPCWSTR name)
Este método busca una primera coincidencia para el nombre que proporciona. Admite caracteres comodín y devuelve nombres de archivo y directorio. El método devuelve VERDADERO si se encontró una coincidencia, FALSO en caso contrario.
HRESULT FoundName([out, retval] LPBSTR name)
Este método recupera el nombre del archivo encontrado con una llamada a FindFirst o FindNext.
DWORD: FoundAttributes(void)
Este método devuelve el atributo del directorio o archivo encontrado más recientemente. Puede utilizar el código siguiente para probar si se trata de un directorio:
pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext(void)
Busca el siguiente. Este método devuelve VERDADERO si se encontró otra coincidencia, FALSO en caso contrario.
void FinishFind(void)
Este método libera los recursos utilizados para la operación Buscar.
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);
};
Información general
Obtiene una instancia de esta interfaz utilizando el valor ID_DomainJoinValidator de la función de plantilla CreateInstance .
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)
Inicialice la instancia, como se muestra en la Tabla 17.
Tabla 17. HRESULT Init - Inicialización de la instancia
| Parámetro | Descripción |
|---|---|
| pLogger | La instancia del registrador, que está disponible para la página a través del método Logger de la página |
| Contenedor | Pasa los resultados del método Container de la página |
| Nombre de usuario | El cuadro de texto que contiene el nombre de usuario que se va a validar |
| pContraseña | El cuadro de texto que contiene la contraseña que se va a validar |
| PComputerName | Cuadro de texto que contiene el nombre del equipo que finalmente se unirá al dominio |
HRESULT IsUsernameValid(LPCWSTR domainName)
Este método utiliza el método IADHelper-ValidLogon> para realizar el trabajo. Consulte ese método para obtener más información.
BOOL CanModifyComputerAdEntry(LPCWSTR domainName)
Compruebe si el usuario tiene derechos para modificar la entrada del equipo. La mayor parte del trabajo lo realiza IADHelper-HasAccess>. Si este método devuelve FALSO, compruebe el archivo de registro para ver los detalles.
Interfaz IDriveList
__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)
Llame a este método antes de llamar a cualquier otro componente. Deberá crear un nuevo WmiRepository antes de llamar a este método.
HRESULT: SetWhereClause(LPCTSTR, whereClause)
Este método permite agregar texto que aparecerá como una cláusula "where" en la consulta. Por ejemplo, la línea siguiente devuelve solo unidades USB:
pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(__int64 size)
Establezca la opción Minimizar tamaño de unidad, en bytes, para las unidades que se devolverán desde la consulta.
Actualización de HRESULT (anular)
Ejecutar la consulta. La lista de unidades disponible después de llamar a este método se ordena por letra de unidad.
HRESULT AddProperty(ENUM_DISK_QUERY_SECTION sección, LPCTSTR propName, LPCTSTR propNameReturned)
Este método agrega los nombres de propiedades adicionales que desea que estén disponibles en los resultados de la consulta. Llame a este método antes de llamar a Update. En el Cuadro 18 se muestran tres de las propiedades útiles.
Tabla 18. HRESULT AddProperty: Propiedades útiles
| Section | Propiedad | Descripción |
|---|---|---|
| DISKQUERY_LOGICALDISK | Size | El tamaño, en bytes, representado como una cadena |
| DISKQUERY_DISKPARTITION | DiskIndex | El número de disco como un entero, a partir de 0 |
| DISKQUERY_LOGICALDISK | VolumeName | La etiqueta del volumen |
size_t Count(void)
El número de registros que devuelve la consulta. Llame a Update antes de llamar a este método.
HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT value)
Este método recupera el valor de una propiedad de los resultados de la consulta, como se muestra en la Tabla 19.
Tabla 19. HRESULT GetProperty
| Parámetro | Descripción |
|---|---|
| Índice | Índice basado en cero para el registro de resultados |
| propName | Nombre de la propiedad, como "Tamaño" |
| Valor | A su vuelta, este parámetro contiene un valor variable de la propiedad |
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Este método recupera el subtítulo de un registro que es el mismo que la propiedad Título.
Interfaz IImageList
__interface IImageList
{
HRESULT CreateImageList(int width, int height, UINT flags);
HImageList GetImageList(void);
int AddImage(HInstance hInstance, int resourceId);
};
Información general
Esta interfaz se implementa mediante el componente ImageList . Recupera una instancia de este componente desde la interfaz IListView .
HRESULT CreateImageList(int width, int height, UINT flags)
Cree una nueva lista de imágenes, que administra este componente. Llame a este método solo una vez.
HImageList GetImageList(void)
Este método devuelve el identificador de la lista de imágenes en caso de que necesite realizar otras operaciones en la lista de imágenes.
int AddImage(HInstance hInstance, int resourceId)
Agregue una nueva imagen a la lista de imágenes desde un recurso, como se muestra en la Tabla 20.
Tabla 20. HRESULT IImageList Interface
| Parámetro | Descripción |
|---|---|
| hInstance | Identificador de instancia del módulo que contiene el recurso de mapa de bits |
| resourceId | Identificador del recurso que se va a cargar en la lista de imágenes |
Interfaz IListView
__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);
};
Información general
Esta interfaz se implementa mediante el componente ControlWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_LIST_VIEW.
int AddItem([en] LPCTSTR text)
Agregar una nueva fila al cuadro de lista. El método devuelve el índice del elemento que se acaba de agregar.
int AddColumn(int width, [in] LPCTSTR text)
Agregar una nueva columna a la vista de lista.
HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)
Establezca el texto en una columna que no sea la primera columna del cuadro de lista, como se muestra en la Tabla 21.
Tabla 21. HRESULT SetSubItem
| Parámetro | Descripción |
|---|---|
| index | El índice del elemento de lista que desea modificar |
| de datos | Índice de la columna que desea actualizar; la primera columna se establece con AddItem, las columnas dos y siguientes se establecen con este método |
| text | La cadena que se va a mostrar en la columna |
int GetWidth(void)
Este método devuelve el ancho de todo el cuadro de texto.
void SetExtendedStyle(estilo DWORD)
Este método permite establecer estilos extendidos en el cuadro de lista, por ejemplo:
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
Este método devuelve el índice del elemento de vista de lista seleccionado actualmente.
HRESULT SelectItem(int index)
Establezca el elemento seleccionado en la lista en este índice.
BOOL IsItemChecked(int index)
Este método devuelve VERDADERO si se selecciona un elemento de la lista. Este método requiere que llame a SetExtendedStyle para establecer el estilo de la casilla.
int GetItemCount(void)
Este método devuelve el número de elementos de la vista de lista.
HRESULT CreateImageList(int width, int height, UINT flags)
Cree una nueva lista de imágenes y adjúntela a la vista de lista.
int AddImage(HINSTANCE hInstance, int resourceId)
Agregue una imagen a la lista de imágenes de la vista de lista. Primero debe llamar a CreateImageList.
HRESULT SetImage(int index, int imageIndex)
Establecer la imagen que se mostrará en el lado izquierdo para un elemento de vista de lista específico.
HRESULT Borrar (vacío)
Quitar todos los elementos de la vista de lista.
IProgressBar Interface
__interface IProgressBar : IControl
{
HRESULT SetPercentage(int position);
int GetPercentage(void);
};
Información general
Esta interfaz se implementa mediante el componente ProgressBarWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_PROGRESS_BAR.
HRESULT SetPercentage(int position)
Establece la posición de la barra de progreso usando un número entre 0 y 100. De forma predeterminada, las nuevas barras de progreso de Win32® tienen un intervalo máximo de 100.
int GetPercentage(void)
Este método devuelve la posición actual de la barra de progreso.
Interfaz IRadioButton
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
Información general
Esta interfaz se implementa mediante el componente RadioButtonWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_RADIO_BUTTON.
void SetGroup(int firstId, int lastId)
Proporciona al contenedor el intervalo de botones de radio que se deben tratar como un grupo. Llame a este método antes de llamar a CheckRadio.
void CheckRadio(int id)
Establece el botón de radio específico para que sea el único botón del grupo de botones de radio seleccionados. Llame a SetGroup antes de llamar a este método.
BOOL IsButtonChecked(int id)
Este método devuelve VERDADERO si el botón de radio está seleccionado actualmente, FALSO en caso contrario.
void EnableRadio(int id, BOOL enable)
Este método habilita o deshabilita un botón de radio.
Interfaz IStaticText
__interface IStaticText : IControl
{
HRESULT SetText([in] LPCTSTR pText);
HRESULT GetText([out, retval] LPBSTR pText);
};
Información general
Esta interfaz se implementa mediante el componente StaticTextWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_STATIC_TEXT.
HRESULT: SetText([in], LPCTSTR, pText)
Establezca el texto del control.
HRESULT: GetText([out, retval], LPBSTR, pText)
Este método devuelve el valor actual del texto del control.
Interfaz de ITask
__interface IControl : IUnknown
{
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
HRESULT Execute(LPDWORD pReturnCode);
};
Implemente esta interfaz si desea que el componente esté disponible como una tarea en la página comprobativa o si desea usar el componente BackgroundTask para realizar el trabajo en un subproceso en segundo plano.
Estos son los componentes que implementan la interfaz de 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 está escribiendo una tarea para la página de comprobación previa, llame a este método para inicializar la tarea. El archivo .config contiene XML que podría parecerse a esto:
<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>
El parámetro pProperties proporciona acceso a los tres valores de establecedor, mientras que el parámetro pTaskSettings proporciona acceso al elemento Task y a los elementos secundarios. La mayoría de las tareas solo necesitan leer datos del parámetro pProperties .
Ejecutar
HRESULT Execute(LPDWORD pReturnCode)
Aquí es donde se escribe el código que realiza la tarea. Este método debería devolver S_OK si no se produjeron errores y puede devolver otro HRESULT si se produjo un error mientras se ejecutaba la tarea. Los valores distintos de S_OK que devuelve este método coinciden con <los elementos de error> en la <sección ExitCodes> si está utilizando la página preparatoria.
El parámetro pReturnCode debe actualizarse con un número que notifique el estado de la tarea. La página <de comprobación previa hace coincidir estos valores con los elementos ExitCode> .
Interfaz ITreeView
__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);
};
Información general
Esta interfaz se implementa mediante el componente TreeViewWrapper . Recupera una instancia de este componente mediante la función auxiliar GetControlWrapper con el tipo CONTROL_TREE_VIEW.
void EnableCheckboxes(void)
Este método activa las casillas en el control de vista de árbol estableciendo el estilo TVS_CHECKBOXES .
HRESULT CreateImageList(int width, int height, UINT flags)
Agregue una nueva lista de imágenes al control de vista de árbol. El parámetro flags se pasa en la llamada a la ImageList_Create función Win32.
int AddImage(HINSTANCE hInstance, int resourceId)
Agregue una imagen a la lista de imágenes desde un recurso (resourceId) en el módulo con el identificador de instancia hInstance.
HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)
Agregue un nodo a la vista de árbol. El nuevo nodo se agregará en el nivel superior si hParent es NULL. En caso contrario, proporcione el identificador al elemento primario donde desea que se agregue el nuevo elemento. Este método devuelve el identificador al nuevo elemento.
void SetImage(elemento HTREEITEM, int image, int expandImage)
Establezca la imagen que se usará para un elemento de vista de árbol. Puede configurar tanto la imagen normal como la expandida.
void Borrar (vacío)
Quite todos los elementos de la vista de árbol.
BOOL SetFirstVisible(HTREEITEM item, item)
Asegúrese de que el elemento de la vista de árbol está visible. La vista de árbol se desplazará si es necesario para que este elemento sea visible.
BOOL SelectItem(HTREEITEM item)
Establezca el elemento seleccionado actualmente en el elemento que proporcione. Puede llamar a SetFirstVisible después de esto para asegurarse de que el elemento recién seleccionado está visible.
void CheckItem(HTREEITEM item, UINT checkState)
El método básicamente establece la imagen que se mostrará para la casilla de verificación en la vista de árbol. Estas imágenes se encuentran en un control ImageList independiente que administra la vista de árbol. De forma predeterminada, esta lista de imágenes tiene tres imágenes, que se muestran en la Tabla 22.
Tabla 22.void Lista predeterminada de imágenes CheckItem
| checkState | Descripción |
|---|---|
| 0 | En blanco |
| 1 | Se ha desactivado |
| 2 | Seleccionado |
HTREEITEM SelectedItem(void)
Este método devuelve el identificador del elemento de vista de árbol seleccionado actualmente.
int SetItemHeight(SHORT height)
Este método establece la altura de todos los elementos del control de vista en árbol en píxeles. Devuelve el alto anterior en píxeles.
HRESULT EnableItem(elemento HTREEITEM, habilitación BOOL)
Este método habilita o deshabilita un solo elemento del árbol. Deshabilitar un elemento con niños no deshabilitará a los niños.
void Expand(HTREEITEM, hItem, BOOL expand)
Este método expande o contrae un nodo del árbol.
HTREEITEM GetChild(HTREEITEM hParent)
Este método devuelve el primer elemento secundario de un elemento de vista de árbol o NULL si no hay elementos secundarios.
HTREEITEM GetParent(HTREEITEM hNode)
Este método devuelve el identificador del elemento primario de un nodo en la vista de árbol o un valor nulo si el nodo se encuentra en el nivel superior.
HTREEITEM GetNextItem(HTREEITEM hPrevious)
Puede llamar a este método con un identificador que GetChild devuelve para iterar a través de todos los hijos de un nodo. Este método devuelve el siguiente elemento del mismo nivel en el árbol que comparte el mismo elemento primario.
UINT IsChecked(HTREEITEM item, item)
Este método devuelve 0 si el nodo de vista de árbol no está seleccionado y 1 si lo está.
BOOL IsEnabled(elemento HTREEITEM)
Este método devuelve VERDADERO si el nodo de vista de árbol está habilitado, FALSO en caso contrario.
INT_PTR CommonControlEvent(WORD, controlId, void*, pInfo, BOOL *pCancel)
Este método es solo para uso interno.
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)
Llame a este método si desea recibir una notificación cuando el elemento seleccionado cambie o cuando el usuario cambie el estado de comprobación de un elemento de vista de árbol. Debe implementar ITreeViewEvent en el componente para recibir estas devoluciones de llamada.
void SetSelectedBackColor(COLORREF color)
Establezca el color de fondo utilizado para el elemento seleccionado.
Interfaz IWmiIteration
__interface IWmiIterator : IUnknown
{
HRESULT Next(void);
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Información general
Normalmente se usa esta interfaz, junto con IWmiRepository, cuando se trabaja con llamadas WMI. La interfaz IWmiIteration permite iterar a través de los valores que devuelve una consulta.
HRESULT Siguiente (vacío)
Vaya al siguiente elemento de los resultados de la consulta, tal como se muestra en la Tabla 23.
Tabla 23. HRESULT Siguiente(vacío) Devoluciones de consulta
| HRRESULT | Descripción |
|---|---|
| S_OK | Se movió al siguiente resultado; puede usar GetProperty para recuperar las propiedades de ese resultado. |
| S_FALSE | No hay más elementos en la lista. |
| E_NOT_SET | No hay resultados de consulta |
HRESULT: GetProperty(LPCTSTR, propertyName, [out], LPVARIANT, pValue)
Este método recupera el valor de una propiedad del registro de resultado actual, como se muestra en la Tabla 24 y la Tabla 25.
Table 24. HRESULT GetProperty
| Parámetro | Descripción |
|---|---|
| propertyName | Nombre de la propiedad que desea recuperar |
| pValor | Apunta a una estructura VARIANT que, devuelta, contiene el valor de propiedad. |
Tabla 25. HRESULT GetProperty Result
| [HRESULT] | Descripción |
|---|---|
| S_OK | Se recuperó el valor de la propiedad. |
| WBEM_E_NOT_FOUND | No hay ninguna propiedad con el nombre. |
| E_NOT_VALID_STATE | No hay un registro activo. |
Nota:
El método GetProperty puede devolver otros códigos de error de WMI distintos de los que se enumeran en la tabla 25. Los valores enumerados son los resultados comunes que se devuelven.
Interfaz IWmiRepository
__interface IWmiRepository : IUnknown
{
HRESULT SetNamespace(LPCWSTR namespaceName);
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Información general
Esta interfaz se implementa mediante el componente WmiRepository (ID_WmiRepository).
HRESULT: SetNamespace(LPCWSTR, namespaceName)
Este método establece el espacio de nombres WMI que se usará para la consulta. Llame a este método antes de llamar a ExecQuery. Si no llama a este método, el espacio de nombres será root\cimv2. Este método siempre devuelve S_OK.
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator)
Ejecute una consulta en el conjunto de espacios de nombres WMI con una llamada a SetNamespace, como se muestra en la tabla 26 y la tabla 27.
Tabla 26. HRESULT ExecQuery
| Parámetro | Descripción |
|---|---|
| Query | La cadena de la consulta WMI que desea ejecutar |
| ppIterator | Pase un puntero a un puntero de interfaz, que a su regreso se rellenará con una interfaz, lo que le dará acceso a los resultados de la consulta |
Tabla 27. Resultado de la consulta HRESULT
| [HRESULT] | Descripción |
|---|---|
| S_OK | Consulta correcta |
| Otros | Si la consulta no se realizó correctamente, devuelve un HRESULT de WMI |
Interfaz IFormController
__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);
};
Información general
Cada página del Asistente de UDI tiene su propio controlador de formularios que implementa esta interfaz. Use este controlador para conectar los datos de campo del archivo XML de .config a los controles de la página. A continuación, el controlador del formulario controla muchos de los detalles por usted.
Configuración del formulario
Por lo general, configure el controlador de formularios en el método OnWindowCreated de la página. Hacerlo generalmente implica llamar a los métodos que se muestran en la Tabla 28.
Tabla 28. Método OnWindowCreated
| Método | Descripción |
|---|---|
| Init | Inicializa el controlador de formulario |
| AddField | Proporciona una conexión entre un campo del archivo XML de .config que es un nombre de cadena y un control del cuadro de diálogo de la página que es un identificador |
| AddRadioGroup | Se usa para conectar un botón de radio a un grupo y a un control en el cuadro de diálogo |
| AddToGroup | Permite los controles "secundarios" que se habilitan o deshabilitan junto con su elemento primario o en función del botón de radio seleccionado |
| InitFields | Llame después de haber llamado a todos los métodos Agregar para configurar el formulario |
| Validate | Realiza la validación inicial |
Procesando eventos de formulario
Agregue la siguiente llamada al método OnControlEvent :
Form()->ControlEvent(eventId, controlId);
Esta llamada pasa los eventos al controlador del formulario para que pueda procesar los eventos relacionados con el formulario.
Guardar datos de formulario
En el método OnNextSelected , llame a los métodos de formulario que se muestran en la tabla 29.
Tabla 29. Método OnNextSelected
| Método | Descripción |
|---|---|
| Sección inicial | Proporciona el nombre de la sección que se mostrará en la página Resumen de esta página |
| Guardar campos | Guarde los valores de campo en las variables de secuencia de tareas y en la página Resumen |
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)
Normalmente se llama a este método cerca del principio del método OnWindowCreated de la página. El comando debería tener un aspecto similar al siguiente:
Form()->Init(View(), Container());
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)
Este método se llama internamente, y no debe llamarlo usted mismo. Proporciona el XML de la página al controlador del formulario.
Validar
HRESULT Validate(void)
Este método ejecuta todos los validadores asociados a los controles. Si un validador no pasa, el controlador de formulario muestra un mensaje de advertencia, deshabilita el botón Siguiente y, a continuación, deja de procesar los validadores. Normalmente, sólo necesita llamar a este método al final de su método OnWindowCreated ; siempre devuelve S_OK.
AddToGroup
AddToGroup(int groupControlId, int controlId)
Este método agrega un control como "secundario" de una casilla o botón de opción, como se muestra en el Cuadro 30. Todos estos controles secundarios se deshabilitarán cuando no se seleccione el control principal. El método siempre devuelve S_OK.
Tabla 30. AddToGroup
| Parámetro | Descripción |
|---|---|
| groupControlId | El id. de la casilla o botón de radio que controlará el estado de habilitación del control secundario |
| Controlld | El identificador del control que desea agregar como un elemento secundario |
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)
Este método actualiza el estado de habilitación o deshabilitación de los controles secundarios de un grupo en función del estado del control primario. Por lo general, no es necesario llamar a este método, ya que el controlador del formulario lo llama por usted.
AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)
Llame a este método solo si tiene un validador que desea crear en código en lugar de con XML. Este método siempre devuelve S_OK.
AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)
Llame a este método solo si tiene un validador que desea crear en código en lugar de con XML.
DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)
Llame a este método para deshabilitar explícitamente el validador para un control o restaurar la validación normal, como se muestra en la Tabla 31. Este método es útil, por ejemplo, cuando tiene que habilitar o deshabilitar reglas para controles que no están cubiertos por la validación de formularios y necesita deshabilitar la validación de un control. En otras palabras, normalmente no llamaría a este método. Este método siempre devuelve S_OK.
Tabla 31. HRESULT DisableValidation
| Parámetro | Descripción |
|---|---|
| controlId | El control para el que desea habilitar o deshabilitar la validación |
| Disable | Establézcalo en VERDADERO para deshabilitar la validación y en FALSO para restaurar la validación normal |
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)
Agregue una correlación de control entre el nombre de un elemento Campo del archivo XML de .config y el ID de control en el cuadro de diálogo de la página, como se muestra en el Cuadro 32. Debe llamar a este método antes de la llamada a InitFields, ya que InitFields utiliza esta información. Este método siempre devuelve S_OK.
Cuadro 32. HRESULT AddField
| Parámetro | Descripción |
|---|---|
| Nombre del campo | Nombre del campo tal como aparece en el XML de la página |
| controlId | El identificador del control en la plantilla del cuadro de diálogo de la página |
| suppressLog | Establézcalo en TRUE si no desea que los valores de este campo se escriban en el archivo de registro; Establezca siempre este parámetro en TRUE para campos de contraseña o PIN |
| Tipo | El tipo de control, que es uno de los siguientes: - 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)
Este método agrega un control a un grupo de botones de radio con nombre, como se muestra en la Tabla 33. Debes llamarlo antes que al método InitFields , ya que ese método utiliza atributos en el elemento RadioGroup para controlar la configuración de todos los controles de botón de radio del grupo. Los grupos de radio se pueden bloquear, por ejemplo, para que todos los botones de radio estén deshabilitados, pero los controles secundarios se habilitan o deshabilitan solo en función del botón de radio seleccionado. Este método siempre devuelve S_OK.
Tabla 33. HRESULT AddRadioGroup
| Parámetro | Descripción |
|---|---|
| groupName | Cadena que define un grupo de botones de radio en esta página |
| radioControlId | El identificador de un solo botón de radio para agregar a este grupo |
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)
Este método permite habilitar o deshabilitar un grupo completo de botones de radio. Al deshabilitar un grupo de radio, se deshabilitan todos los controles de botón de radio del grupo, así como los elementos secundarios de los botones de radio que se han agregado con AddToGroup. Véanse los cuadros 34 y 35.
Tabla 34. EnableRadioGroup
| Parámetro | Descripción |
|---|---|
| groupName | Nombre de un grupo de botones de radio que ya definiste con una llamada a AddRadioGroup |
| Enable | Establézcalo en TRUE para habilitar el grupo de botones de radio y en FALSE para deshabilitar el grupo |
Tabla 35. HRESULT EnableRadioGroup
| [HRESULT] | Descripción |
|---|---|
| S_OK | Grupo habilitado o deshabilitado |
| E_INVALIDARG | No hay ningún grupo de botones de radio con el nombre que ha proporcionado |
InitFields
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)
Antes de llamar a este método, llame a AddField para cada campo que XML pueda controlar. Este método siempre devuelve S_OK.
El parámetro pFieldCallback es opcional. Si lo proporciona, el controlador del formulario llama a SetFieldDefault para los controles que no son CONTROL_STATIC_TEXT o CONTROL_CHECK_BOX. Este comportamiento le permite recuperar un valor predeterminado del XML y establecerlo en el control usted mismo.
Guardar campos
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)
Este método guarda los valores de campo en las variables de secuencia de tareas y en los datos de resumen que se mostrarán en la página Resumen . Proporcionar un puntero en pFieldCallback le permite controlar el guardado de valores para los controles que no admiten CONTROL_STATIC_TEXT.
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
Este método permite determinar si un campo se ha deshabilitado en el archivo XML.
Sección inicial
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)
Este método inicializa los datos de resumen que se mostrarán en la página Resumen , como se muestra en la Tabla 36. Llame a este método en el método OnNextSelected antes de llamar a SaveFields. Este método siempre devuelve S_OK.
Tabla 36. HRESULT InitSection
| Parámetro | Descripción |
|---|---|
| Clave | Este parámetro debe ser exclusivo de la página. Se usa para garantizar que cada página tenga su propia información resumida. |
| sectionCaption | El encabezado que se mostrará en la página Resumen de la información de resumen de esta página. Normalmente, se usa DisplayName() como valor para este parámetro. |
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)
Este método permite agregar elementos de resumen a la página Resumen por encima y más allá de los elementos establecidos con el XML. Consulte la Tabla 37.
Tabla 37. HRESULT AddSummaryItem
| Parámetro | Descripción |
|---|---|
| Primero | El subtítulo del elemento de resumen, que se muestra en el lado izquierdo |
| Second | El valor que se mostrará en el lado derecho |
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)
Llame a este método para las variables de secuencia de tareas para las que no desea que los valores se escriban en el archivo de registro. Llame a este método para las variables de secuencia de tareas que almacenan contraseñas, PIN u otros valores confidenciales que un usuario pueda escribir.
Guardartexto
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)
Este método guarda el valor de un control de texto en una variable de secuencia de tareas y en la sección de resumen. Normalmente, no necesitará llamar a este método usted mismo, ya que el controlador del formulario hace esto para todos los campos. Consulte la Tabla 38.
Cuadro 38. HRESULT SaveText
| Parámetro | Descripción |
|---|---|
| controlId | El identificador del cuadro de texto que contiene el valor que desea guardar (o cualquier otro control que pueda devolver texto) |
| tsVariableName | Nombre de la variable de secuencia de tareas que desea modificar |
| summaryCaption | El subtítulo de la página Resumen para este valor |
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)
Este método lee el valor de una variable de secuencia de tareas y establece el cuadro de texto en este valor.
Evento de control
void ControlEvent(WORD eventId, WORD controlId)
Llame a este método en el método OnControlEvent para asegurarse de que el controlador del formulario puede procesar eventos de control, lo que necesita hacer para funcionar correctamente. Los valores que se pasan a este método son los mismos valores que se pasan al método OnControlEvent .
IsValid
BOOL IsValid(void)
Este método devuelve el estado de la validación más reciente del formulario. Si alguno de los validadores de control notificó un error, este método devuelve FALSE. En otras palabras, devuelve TRUE solo si todos los controles de la página son válidos.
Interfaz IValidator
__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);
};
Información general
Los validadores son componentes que pueden validar un único control en la página. La manera más fácil de implementar un validador es convertirlo en una subclase de la clase BaseValidator , que se define en el archivo de encabezado BaseValidator.h.
HRESULT Init(IControl *pControl, LPCTSTR message)
Si crea un validador en el código, puede llamar a este método para inicializarlo. Consulte la Tabla 39.
Cuadro 39. HRESULT Init
| Parámetro | Descripción |
|---|---|
| Control | El control que el validador debe validar |
| Message | El mensaje que se mostrará en la página si el control no es válido |
HRESULT Init(IControl, *pControl, IWizardPageContainer, *pContainer, IStringProperties, *pProperties)
El controlador del formulario llama a este método para inicializar los validadores que crea en función del XML de la página. Consulte la Tabla 40.
Cuadro 40. Método de inicialización HRESULT
| Parámetro | Descripción |
|---|---|
| Control | El control que el validador debe validar |
| Contenedor | En caso de que su validador necesite acceso al registrador o necesite crear otros componentes |
| pPropiedades | Proporciona acceso a las propiedades (elementos establecedores) del validador |
BOOL, IsValid(LPBSTR, pMessage)
Este método devuelve VERDADERO si el control es válido o FALSO si no es válido. A la vuelta, pMessage debe rellenarse con un nuevo BSTR que contenga el mensaje que se mostrará cuando el control no sea válido.
HRESULT: SetProperty(int, propertyId, LPVARIANT, pValue)
Puede implementar este método si necesita valores adicionales que no se proporcionan en el XML.
HRESULT: SetProperty(int, propertyId, IUnknown, *pUnknown)
Puede implementar este método si necesita valores adicionales que no se proporcionan en el XML.
HRESULT: SetProperty)(int, propertyId, LPCTSTR, pValue)
Puede implementar este método si necesita valores adicionales que no se proporcionan en el XML.
Interfaz IRegEx
__interface IRegEx : IUnknown
{
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);
HRESULT GetMatch(size_t index, LPBSTR pValue);
};
Este método lo implementa el componente ID_Regex (IRegex.h) y proporciona compatibilidad con el procesamiento de expresiones regulares.
BOOL MatchesRegex(entrada LPCTSTR, LPCTSTR regex)
Este método ejecuta la expresión regular en el texto de entrada. Usa la función regex_match de la biblioteca estándar de C++ para realizar el trabajo real. El método devuelve VERDADERO si hay coincidencias; en caso contrario, FALSO.
HRESULT: GetMatch(size_t index, LPBSTR, pValue)
Este método le permite recuperar las coincidencias de la llamada MatchesRegex más reciente. Tenga en cuenta que no hay ningún procesamiento de errores en este método y que devuelve S_OK o produce una excepción.
Interfaz ISummaryInfo
__interface ISummaryInfo : IUnknown
{
size_t Count(void);
HRESULT Clear(void);
HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);
HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);
HRESULT GetCaption(LPBSTR pCaption);
HRESULT SetCaption(LPCTSTR caption);
};
No debería necesitar utilizar esta interfaz directamente. En su lugar, usa IFormController.
ISummaryBag
__interface ISummaryBag : IUnknown
{
size_t Count(void);
HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);
HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);
};
No debería necesitar utilizar esta interfaz directamente. En su lugar, usa IFormController.
Interfaz ITSVariableBag
__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);
};
Esta interfaz proporciona acceso a variables de secuencia de tareas. Puedes acceder a esta interfaz usando el método TSVariables() de tu página.
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)
Este método lee el valor de una variable de secuencia de tareas.
Nota:
Los valores se almacenan en caché después de la primera lectura.
void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)
Este método establece el valor de una variable de secuencia de tareas. Este valor se guarda en la memoria. Los valores de la secuencia de tareas se escriben una vez que selecciona Finalizar en el Asistente de UDI.
void Borrar (vacío)
Este método quita todos los valores de secuencia de tareas que se hayan guardado en la memoria.
HRESULT Remove([in] LPCTSTR variableName)
Este método quita de la memoria un valor específico de secuencia de tareas. La próxima vez que llame a GetValue con el mismo nombre de secuencia de tareas, el método intentará recuperarlo de la secuencia de tareas.
HRESULT SuppressLogValue([in] LPCTSTR variableName)
Siempre que se escriben variables de secuencia de tareas, como cuando selecciona Finalizar en el Asistente de UDI, los nombres y valores se escriben en el archivo de registro. Llame a este método para suprimir el registro de valores confidenciales, como contraseñas o números PIN, para una variable de secuencia de tareas específica.
void Save(void)
Este método guarda todos los valores de secuencia de tareas que se han establecido con las llamadas a 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);
};
Esta interfaz es para uso interno de TSVariableBag para leer y escribir variables de secuencia de tareas.
Interfaz IWizardFinish
__interface IWizardFinish : IUnknown
{
HRESULT Canceled(void);
HRESULT Finished(void);
};
Esta interfaz es útil en escenarios avanzados en los que desea realizar un procesamiento adicional al seleccionar Finalizar o Cancelar en el Asistente de UDI. El Asistente UDI contiene una tarea Finalizar que guarda las variables de secuencia de tareas al seleccionar Finalizar. Si cancela el asistente, la tarea solo establece la variable de secuencia de tareas OSDSetupWizCancelled en TRUE y no guarda los cambios en ninguna otra variable de secuencia de tareas.
Si crea su propio componente de acabado, debe registrarlo con un código como este:
Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);
PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);
PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);
pService->Register(pFinish);
Interfaz IBindableList
__interface IBindableList : IUnknown
{
size_t Count(void);
HRESULT GetCaption(size_t index, LPBSTR pCaption);
};
Implemente esta interfaz si tiene un componente de origen de datos que desea enlazar a un cuadro combinado llamando a su método Bind .
size_t Count(void)
Este método devuelve el número de elementos de la lista.
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Este método devuelve el subtítulo del elemento en un índice específico.
Interfaz IDataNodes
__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);
};
Esta interfaz proporciona acceso a datos jerárquicos que se pueden guardar en una página. Esta interfaz se obtiene a través de los métodos de la interfaz ISettingsProperties , que está disponible para la página mediante el método Settings .
Los datos en el XML de una página pueden tener un aspecto similar al siguiente
<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>
Llamar a Settings()->GetDataNode(L"Network", &pData) le proporciona una instancia IDataNodes con dos elementos de datos (cada uno de los cuales a su vez tiene dos propiedades).
size_t Count()
Este método devuelve el número de elementos DataItem .
HRESULT SetCaptionProperty(LPCTSTR captionProperty)
El componente que soporta esta interfaz también es compatible con IBindableList, que facilita rellenar un cuadro combinado con datos del XML de la página. Este método controla qué propiedad (establecedor) de cada elemento DataItem se usará para este enlace. Por ejemplo, podría llamar a este método con DisplayName y usaría esa propiedad setter para el enlace de datos. El cuadro combinado contendría entonces Público y Equipo de desarrollo como elementos.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)
Este método obtiene una propiedad de uno de los elementos DataItem . Véanse los cuadros 41 y 42.
Cuadro 41. DataItem GetProperty
| Parámetro | Descripción |
|---|---|
| Índice | El valor de índice (a partir de 0) del DataItem para el que desea recuperar un valor de propiedad |
| propertyName | Nombre de la propiedad de establecedor para la que desea recuperar un valor |
| propertyValue | Al devolverlo, contiene el valor de cadena de una propiedad |
Cuadro 42. HRESULT GetProperty
| [HRESULT] | Descripción |
|---|---|
| S_OK | La propiedad fue recuperada. |
| E_INVALIDARG | El índice está más allá del final de la matriz. |
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)
Este método es similar a GetProperty, pero en lugar de devolver un valor de un DataItem, devuelve todo el DataItem encapsulado en una interfaz ISettingsProperties . Véanse los cuadros 43 y 44.
Cuadro 43. HRESULT GetNode
| Parámetro | Descripción |
|---|---|
| Índice | El valor de índice (a partir de 0) del DataItem para el que desea recuperar un valor de propiedad |
| ppNode | Al salir, la interfaz ISettingsProperties que envuelve el nodo DataItem |
Cuadro 44. Resultados de HRESULT GetNode
| [HRESULT] | Descripción |
|---|---|
| S_OK | Se recuperó el nodo. |
| E_INVALIDARG | El índice está más allá del final de la matriz. |
Interfaz IFactoryRegistry
__interface IFactoryRegistry : IUnknown
{
void Register(LPCTSTR type, IClassFactory *pFactory);
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);
BOOL Contains(LPCTSTR type);
HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory);
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance);
HRESULT SetContainer(IWizardPageContainer *pContainer);
HRESULT RegisterService(REFGUID iid, IUnknown *pService);
HRESULT GetService(REFGUID iid, IUnknown **ppService);
};
Información general
Cuando crea una nueva página personalizada, como mínimo necesita crear un generador de páginas, una clase que implementa IClassFactory. ( Puede usar ClassFactoryImpl como clase base para su fábrica).
void Register(LPCTSTR type, IClassFactory *pFactory)
Este método registra un factoría de clases en el Registro. Véase el cuadro 45.
Cuadro 45. Registro nulo de IClassFactory
| Parámetro | Descripción |
|---|---|
| Tipo | Una cadena que identifica la fábrica que está registrando; Por lo general, este parámetro debe tener el nombre de la compañía en la cadena para garantizar que sea único |
| pFábrica | Puntero a la instancia del generador de clases |
HRESULT: LoadAndRegister(LPCTSTR, dllName, ILogger, *pLogger)
Este método es solo para uso interno.
BOOL Contains(LPCTSTR type)
Este método es generalmente para uso interno. Comprueba si se ha registrado una fábrica de clases para un tipo.
HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory)
Este método permite recuperar el generador de clases. Normalmente, se debe llamar a CreateInstance. Sin embargo, si va a crear un gran número del mismo componente, es más eficaz recuperar la fábrica y, a continuación, pedirle que cree las instancias por usted.
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance)
Este método crea una nueva instancia de un componente, dado su tipo. En su lugar, utilice el método de plantilla CreateInstance , que permite la creación de objetos con seguridad de tipos.
HRESULT: SetContainer(IWizardPageContainer, *pContainer)
Este método es solo para uso interno.
HRESULT RegisterService(REFGUID iid, IUnknown *pService)
Los servicios son instancias únicas de un componente que se puede usar en varios lugares. Puede usar este método para registrar un servicio en una página y, a continuación, recuperar esa misma instancia de otra página.
HRESULT GetService(REFGUID iid, IUnknown **ppService)
Este método recupera un servicio que se registró previamente con una llamada a RegisterService.
HRESULT SetLanguage(LANGID languageId)
Este método establece el idioma del Asistente para UDI en el identificador de idioma que proporcionó en el parámetro languageId .
LANGID GetLanguage()
Este método devuelve el valor del identificador de idioma que proporcionó con el parámetro de línea de comandos /locale para el Asistente de UDI. El método devuelve uno de los siguientes valores:
Valor del identificador de idioma proporcionado con el parámetro de línea de comandos /locale
0, si no proporcionó el parámetro de línea de comandos /locale
Interfaz de clúster
__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);
};
Información general
El Asistente de UDI registra información en un archivo de registro, lo que ayuda a solucionar los problemas encontrados en el campo. Es una buena idea que las páginas registren información. Puede obtener un puntero a esta interfaz desde dentro de su página utilizando el método Logger() de la página. Las líneas del archivo de registro contienen un número de "nivel" que representa los mensajes de error, normal, detallado o de depuración.
Nota:
Los mensajes de depuración no se guardan en el archivo de registro a menos que el soporte de depuración esté activado. Puede activar el soporte de depuración agregando la línea siguiente al elemento Style en el archivo .config:
<Setter Property="debug">true</Setter>
Init
HRESULT Init(LPCWSTR logFilename)
Este método es solo para uso interno.
Registro de movimientos
HRESULT MoveLog(LPCWSTR logFilename)
Este método es solo para uso interno.
LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)
Este método es solo para uso interno.
Log
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)
Este método es solo para uso interno.
Error
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)
Llame a este método para registrar información sobre un error. Véase el cuadro 46.
Cuadro 46. HRESULT Error
| Parámetro | Descripción |
|---|---|
| Error | El código de error devuelto por una llamada (este código se mostrará en la entrada del registro como un número). |
| Componente | Cadena que identifica el origen del error, que generalmente es la página o el componente que ha escrito |
| Message | Mensaje que explica qué ha provocado el error |
Error 2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Este método es similar al método de error , pero le permite proporcionar un mensaje de dos partes. El mensaje final tendrá "message" y, a continuación, "message2" en el archivo de salida. Este es simplemente un método conveniente.
Normal
HRESULT Normal(LPCTSTR component, LPCTSTR message)
Este método registra un mensaje normal. Consulte la descripción del método de error para conocer los parámetros.
Normal2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Este método registra un mensaje normal. Consulte la descripción del método Error2 para conocer los parámetros.
Detallado
HRESULT Verbose(LPCTSTR component, LPCTSTR message)
Este método registra un mensaje detallado. Consulte la descripción del método de error para conocer los parámetros.
Detallado2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Este método registra un mensaje detallado. Consulte la descripción del método Error2 para conocer los parámetros.
Depuración
HRESULT Debug(LPCWSTR component, LPCWSTR message)
Este método registra un mensaje de depuración. Consulte la descripción del método de error para conocer los parámetros. Los mensajes de depuración no se guardan en el archivo a menos que esté habilitado. Consulte la sección Información general para obtener más información.
Habilitar depuración
HRESULT EnableDebug(BOOL debug)
Este método es solo para uso interno.
Cerrar
HRESULT Close(void)
Este método es solo para uso interno.
GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)
Este método recupera el nombre del archivo de registro.
Interfaz de ionación
__interface IOrientation : IUnknown
{
void SetController(IWizardDialogController *pController);
int AddPage(LPCTSTR name);
void SelectPage(int index);
};
Esta interfaz es solo para uso interno.
Interfaz de configuración
__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);
};
Esta interfaz es solo para uso interno.
Interfaz ISettingsProperties
__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);
};
Información general
Esta interfaz proporciona acceso a los datos de la página. Para llegar al nivel superior de datos de la página, use el método Settings() de la página.
HRESULT: GetAttribute(LPCTSTR, attributeName, LPBSTR, attributeValue)
Este método le permite recuperar los valores de los atributos en el nodo principal, que es el nodo Page cuando utiliza el método Settings() de la página.
IStringProperties * Properties()
Este método proporciona acceso a los valores de la propiedad setter en el nodo principal. Para una página, estas son las propiedades de nivel superior.
HRESULT: SelectNodes(LPCTSTR, xPath, IXMLDOMNodeList, **ppList)
Llame a este método si desea obtener directamente una lista de nodos XML mediante una expresión XPath. Es mejor usar uno de los otros métodos si puede. Use este método solo si no puede obtener acceso a los nodos de otra manera.
HRESULT: SelectSingleNode(LPCTSTR, xPath, IXMLDOMNode, **ppNode)
Llame a este método si desea obtener directamente un único nodo XML mediante una expresión XPath. Es mejor usar uno de los otros métodos si puede. Use este método solo si no puede llegar a un nodo de otra manera.
HRESULT GetDataNode(LPCTSTR name, ISettingsProperties **ppNode)
Recuperar un elemento de datos basado en el atributo Name de ese elemento.
HRESULT GetDataNodes(IDataNodes **ppNodes)
Este método recupera una lista de elementos DataItem en el nodo actual. Desde el nivel de página, llame a GetDataNode para recuperar una interfaz ISettingsProperty para los datos. Después, en esa instancia, llame a GetDataNodes para recuperar la lista de registros. Por ejemplo, dado este 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)
Este método proporciona una manera rápida de obtener acceso al conjunto de nodos DataItem en un nodo de datos específico. Usando el XML del ejemplo de GetDataNodes , el código siguiente hace exactamente lo mismo que las cuatro líneas de código en el ejemplo de GetDataNodes , pero con verificación de errores:
ISimpleStringProperties Interface
Interfaz ISimpleStringProperties
__interface ISimpleStringProperties : IStringProperties
{
void Add(LPCTSTR propertyName, LPCTSTR value);
};
Por sí sola, esta interfaz puede no ser útil. Sin embargo, lo implementa el componente ID_SimpleStringProperties , que también implementa la interfaz IStringProperties . Puede usar este componente en los casos en los que necesita pasar un conjunto de propiedades a otro componente, como una tarea, pero desea agregar valores mediante programación en lugar de usar valores de XML. Este es un ejemplo de cómo usaría esta interfaz:
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);
};
Esta interfaz proporciona un acceso sencillo a un conjunto de elementos establecedores que provienen de XML. Esta interfaz está disponible para las propiedades de una página mediante Settings()->Properties().
HRESULT: Get(LPCTSTR, propertyName, [out], LPBSTR, pPropValue)
Este método recupera un valor de propiedad único. Véanse los cuadros 47 y 48.
Cuadro 47. IHRESULT Obtener valor de propiedad
| Parámetro | Descripción |
|---|---|
| propertyName | Nombre de la propiedad que desea leer |
| pPropValue | Al salir, contiene el valor de propiedad como una cadena (este valor será nullptr si no existe tal propiedad). |
Cuadro 48. IHRESULT Obtener resultados de valor de propiedad
| [HRESULT] | Descripción |
|---|---|
| S_OK | Se recupera el valor de propiedad. |
| E_INVALIDARG | No hay ninguna propiedad con el nombre que ha proporcionado. |
Interfaz de ITaskManager
__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);
}
Esta interfaz se implementa mediante el componente TaskManager (ID_TaskManager en ITaskManager.h), que es el componente que ejecuta las tareas en la página preparatoria. Puede usar la página de comprobación previa directamente, que es lo que hace la mayor parte del tiempo, o crear su propia página, dejando que este componente realice la mayor parte del trabajo.
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)
Debe llamar a este método antes de llamar a cualquier otro. Inicializa el componente TaskManager . Véase el cuadro 49.
Cuadro 49. HRESULT Init
| Parámetro | Descripción |
|---|---|
| pPageView | Proporciona acceso a la página que ejecutará tareas (esta página debe tener un conjunto específico de controles, que se describen en los parámetros siguientes). |
| idListView | Identificador de control de un control ListView que mostrará la lista de tareas y el estado de dichas tareas |
| idMessage | Identificador de control de un cuadro de texto que se usará para mostrar un mensaje para la tarea que seleccione |
| idRetryButton | El identificador de control de un botón que puede seleccionar para volver a ejecutar las tareas |
| pPageInfo | Contenedor alrededor del XML de la página (el Administrador de tareas carga el conjunto de tareas que se ejecutarán desde este XML). |
| pCallback | Puede ser null (si este parámetro no es nulo, el Administrador de tareas llama al método Started cuando inicia una tarea y al método Finished para cada tarea que termina de ejecutarse). |
HRESULT SetFailMessage(LPCWSTR message)
Este método establece el mensaje que se mostrará si se produce un error en una o varias tareas.
HRESULT Start(void)
Este método inicia todas las tareas. Cada tarea se inicia en un subproceso independiente.
HRESULT GetTaskMessage(size_t index, LPBSTR message)
Este método es solo para uso interno. Recupera el mensaje actual de una tarea en función de su índice en la lista de tareas.
HRESULT GetResultType)(size_t index, LPBSTR type)
Este método recupera el "tipo" actual de una tarea. En la tabla 50 se muestran los tipos disponibles.
Tabla 50. HRESULT GetResultType
| Tipo | Descripción |
|---|---|
| 0 | Representa una tarea que se realizó correctamente |
| 1 | Representa una tarea que devolvió una advertencia |
| -1 | Representa una tarea con errores |
El tipo se recupera examinando el código de error o de salida de la tarea y buscando una coincidencia en el elemento XML ExitCodes> de <la tarea.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value)
Las páginas de progreso y preparatorias usan este método para recuperar la propiedad de setter BitmapFilename para que pueda mostrar una imagen junto al mensaje de la tarea que resalte. En otras palabras, puede agregar un establecedor personalizado al XML de la tarea y, a continuación, recuperarlo con este método.
int GetSelectedIndex(void)
Este método recupera el índice de la tarea seleccionada actualmente, lo que es útil si desea recuperar información adicional sobre la tarea (método GetProperty ) que se mostrará para la tarea seleccionada. Las páginas de progreso y comprobación previa utilizan este método para mostrar una imagen para la tarea seleccionada.
HRESULT Wait(DWORD waitMilliseconds)
Este método ayuda principalmente con las pruebas unitarias para que la prueba pueda garantizar que las tareas finalicen antes de que salga la prueba unitaria. Normalmente no llamaría a este método. Devuelve el resultado cuando todas las tareas terminan de ejecutarse o cuando ha transcurrido el tiempo de espera.
size_t FailedCount(void)
Este método devuelve el número de tareas marcadas actualmente como erróneas.
size_t WarningCount(void)
Este método devuelve el número de tareas marcadas actualmente como advertencia.
size_t SucceedCount(void)
Este método devuelve el número de tareas marcadas actualmente como correctas.
size_t RunningCount(void)
Este método devuelve el número de tareas que se están ejecutando actualmente.
void OnCommonControlEvent(WORD, controlId, LPNMHDR pInfo)
Llame a este método desde el OnCommonControlEvent de la página para que el Administrador de tareas pueda procesar los eventos que necesita.
void OnControlEvent(WORD eventId, WORD controlId)
Llama a este método desde el OnControlEvent de tu página para que el Administrador de tareas pueda procesar los eventos que necesita.
void EnableButtons(BOOL enable)
Este método es solo para uso interno.
Interfaz IWizardComponent
__interface IWizardComponent : IUnknown
{
HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Información general
Normalmente, no implementará esta interfaz directamente, sino a través de la clase de plantilla WizardComponent . Si el componente implementa esta interfaz y ha registrado un generador de clases en el Registro, el componente recibe un puntero a la instancia IWizardPageContainer cuando se crea. Esto le ayuda, por ejemplo, a acceder al registrador o al registro para crear otros componentes que su componente podría necesitar.
Interfaz IWizardDialogController
__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);
};
Esta interfaz es solo para uso interno.
Interfaz IWizardDialogView
__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);
};
Esta interfaz es solo para uso interno.
Interfaz IWizardPage
__interface IWizardPage : IUnknown
{
HRESULT SetPageSettings(ISettingsProperties *pPageSettings);
HINSTANCE GetInstanceHandle(void);
int GetDialogResourceId(void);
void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);
void WindowShown(void);
void WindowHidden(void);
HRESULT NextSelected(void);
void ControlEvent(WORD eventId, WORD controlId);
void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);
void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
};
Información general
Esta interfaz es implementada por WizardPageImpl, por lo que normalmente no tendrá que implementarla usted mismo. El asistente llama a todos estos métodos cuando interactúa con las páginas personalizadas.
Interfaz IWizardPageContainer
__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);
};
Información general
Esta interfaz está disponible para la página a través del método Container (implementado por WizardPageImpl) y le da acceso a varios servicios del asistente.
ILogger * Logger(void)
Utilice este método para escribir mensajes en el archivo de registro, por ejemplo:
Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * Propiedades (void)
Este método proporciona acceso a variables "memory", que son propiedades que están en memoria solo mientras se ejecuta el Asistente para UDI. Estas propiedades están disponibles para otras páginas, ya sea en código o en el XML usando la sintaxis $memoryVarName$ .
HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance)
Este método permite crear una nueva instancia de cualquier componente que se haya registrado. Sin embargo, es mejor usar la función de plantilla CreateInstance, ya que está fuertemente tipada.
HRESULT: GetService(REFIID, iid, [out], IUnknown, **ppInstance)
Este método permite recuperar un servicio que se ha registrado. Sin embargo, es mejor llamar a la función de plantilla GetService , que está fuertemente tipada (en lugar de usar IUnknown).
HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)
Este método controla el trabajo con variables dentro de valores de cadena. Admite los formatos que se muestran en la Tabla 51 y la Tabla 52.
Cuadro 51. HRESULT ReplaceVariables
| Format | Descripción |
|---|---|
| $Name$ | Reemplaza el valor de una variable de memoria por este nombre (si no hay ninguna variable de memoria con el nombre, se quitará el "token"). |
| %Name% | Una variable de secuencia de tareas o una variable de entorno. El orden es el siguiente: 1. Use el valor de una variable de secuencia de tareas, si está presente. 2. Use el valor de una variable de entorno, si está presente. 3. En caso contrario, quite este texto de la cadena. |
Tabla 52. Parámetro HRESULT
| Parámetro | Descripción |
|---|---|
| Source | La cadena de entrada, que puede contener cualquier combinación de $ variables and % o ninguna. |
| pDest | A su regreso, contiene una nueva cadena que tiene todos los tokens reemplazados de acuerdo con la Tabla 51 |
HRESULT: GotoPage(LPCTSTR, pageName)
Este método no se ha probado completamente. La idea es que pueda cambiar directamente a una página específica en función del nombre de la página, tal como se define en el archivo XML .config. Al llamar a este método, se omite OnNextSelected en la página. Además, el comportamiento de este método está sujeto a cambios, así que úselo bajo su responsabilidad.
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)
Este método muestra un cuadro de mensaje con el texto y los subtítulos que proporcione. El parámetro uType es cualquier valor que pueda proporcionar a la función Win32 del cuadro de mensajes .
BOOL InPreview(void)
Este método devuelve VERDADERO si inició el asistente en modo "vista previa" con el modificador /preview . En el modo de vista previa, el botón Siguiente nunca se deshabilita. Este método permite omitir código en modo de vista previa, por ejemplo, que podría causar problemas cuando no tiene datos válidos en la página.
HWND GetHwnd(void)
Este método devuelve el HWND del cuadro de diálogo principal. Use este método con cuidado. Por lo general, la interfaz de programación de aplicaciones del Asistente de UDI está diseñada para que nunca trabaje directamente con los controladores de ventana.
Interfaz IWizardPageView
__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);
};
Esta interfaz está disponible para el código de la página mediante el método View (implementado por WizardPageImpl).
HRESULT: GetControlWrapper(int, itemId, DialogControlTypes, controlType, IUnknown, *ppControl)
El Asistente de UDI utiliza envoltorios, que en realidad son fachadas para interactuar con los controles de la página. El uso de estas fachadas en lugar de los controles reales hace que sea mucho más fácil escribir pruebas para su página, ya que puede proporcionar fachadas simuladas de sus pruebas.
En lugar de usar este método directamente, es mejor usar el método de plantilla GetControlWrapper , que está fuertemente tipado, por ejemplo:
PComboBox m_pLanguagePackCombo;
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);
HWND GetHwnd(void)
Este método devuelve el identificador de ventana de la página. Por lo general, no debería necesitar acceso a este identificador de ventana.
HWND GetControl(int itemId)
Si es necesario, puede llamar a este método para obtener el identificador de ventana de un control en la página. (Es mejor llamar a la función de plantilla GetControlWrapper ).
HRESULT Show (void)
Este método es solo para uso interno.
HRESULT Ocultar (vacío)
Este método es solo para uso interno.
HRESULT Focus(int itemId)
Establezca el foco de entrada en un control específico.
IWizardPage * Page(void)
Este método es solo para uso interno.
IFormController * Form(void)
Este método es solo para uso interno.
HRESULT FocusWizardButton (botón WizardButton)
Establece el foco en uno de los botones del asistente. WizardButtons tiene dos valores: BackButton y NextButton.
HRESULT SetEnable(botón WizardButtons, habilitación BOOL)
Solicite que se habilite o deshabilite uno de los botones del asistente. Es posible que el botón no coincida con el estado que solicita. Por ejemplo, si ejecuta el Asistente para UDI con el modificador /preview , los botones siempre estarán habilitados. WizardButtons tiene dos valores: BackButton y NextButton.
void ShowWarningMessage(LPCTSTR message)
Este método muestra un mensaje de advertencia en la parte inferior del área de contenido de la página. Este mensaje puede ser cualquier texto que quiera.
void HideWarningMessage(void)
Ocultar un mensaje de advertencia que mostró con una llamada a ShowWarningMessage.
Interfaz IXmlDocument
__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);
};
Información general
Esta interfaz se implementa mediante el componente ID_IXmlDocument , que es una fachada diseñada para facilitar el trabajo con documentos XML en C++.
HRESULT Load(nombre de archivo LPCTSTR)
Este método carga un documento XML desde un archivo externo. Devuelve S_OK si el archivo se cargó sin errores o S_FALSE si se produjo un error. Cuando hay un error, puede obtener el mensaje de error llamando a GetParseErrorMessage.
HRESULT: LoadXml(LPCTSTR, xml)
Este método carga un documento XML desde una cadena en lugar de un archivo externo. Aparte del origen para leer el XML, el comportamiento es el mismo que el del método Load .
HRESULT Save(LPCWSTR filename)
Este método guarda el documento XML que está en memoria en un archivo externo.
HRESULT: GetParseErrorMessage(LPBSTR, pMessage)
Este método devuelve una nueva cadena con el mensaje de error de carga del documento XML, si existe. Siempre devuelve S_OK.
HRESULT: SelectNodes(LPCTSTR, xpath, IXMLDOMNodeList **ppNodes)
Este método permite usar una expresión XPath para recuperar una colección de nodos del documento. Siempre devuelve S_OK.
HRESULT: SelectSingleNode(LPCTSTR, xpath, IXMLDOMNode, **ppNode)
Este método permite usar una expresión XPath para recuperar un nodo del documento. Siempre devuelve S_OK.
HRESULT AddSchema(LPCTSTR nombre de archivo, LPCTSTR ns)
Este método agrega el nombre de un archivo de esquema externo que se utilizará para validar el esquema del documento XML cuando se cargue. El espacio de nombres que proporciones es la cadena que puedes usar en consultas XPath, aunque esto no se haya probado.
HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value)
Este método agrega un nuevo atributo a un nodo existente en el documento XML. Véase el cuadro 53.
Cuadro 53. HRESULT AddAttribute
| Parámetro | Descripción |
|---|---|
| pNode | El nodo al que desea agregar un atributo |
| Nombre | Nombre del nuevo atributo |
| Valor | El valor del nuevo atributo |
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode)
Llame a este método para crear un nuevo nodo:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Una vez creado un nuevo nodo, puede agregarlo como hijo a otro nodo llamando al método appendChild del padre.
Funciones auxiliares
CreateInstance Función de plantilla
HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)
Esta función se define en IWizardPageContainer.h y proporciona un contenedor seguro de tipos a través del método IWizardPageContainer-CreateInstance>, por ejemplo:
CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);
Este código crea un nuevo componente ID_Directory para recuperar la interfaz IDirectory de ese componente.
Función de plantilla GetService
void GetService(IWizardPageContainer *pContainer, I **ppService)
Esta función se define en IWizardPageContainer.h y proporciona un contenedor seguro de tipos a través del método IWizardPageContainer-GetService>—por ejemplo:
GetService<ITSVariableBag>(Container(), &pTsBag);
Esta función recupera el componente de secuencia de tareas, que admite la interfaz ITSVariableBag . (Para ITSVariableBag, puede usar el método TSVariables de la clase WizardPageImpl en su lugar).
Asistente UDI Referencia de esquema de archivo de configuración de Designer
Este archivo lo consume UDI Wizard Designer. Se crea un archivo independiente para cada archivo de .dll personalizado, que puede contener editores de página de asistente personalizados, tareas personalizadas o validadores personalizados. El archivo debe terminar con .config y residir en la carpeta installation_folder\Bin\Config (donde installation_folder es la carpeta en la que instaló MDT).
En la tabla 54 se enumeran los elementos del archivo de configuración UDI Wizard Designer y sus descripciones. El elemento DesignerConfig es el nodo raíz de esta referencia.
Tabla 54. Elementos del archivo de configuración UDI Wizard Designer y sus descripciones
| Nombre del elemento | Descripción |
|---|---|
| DesignerConfig | Especifica la raíz de todos los demás elementos |
| DesignerMappings | Agrupa un conjunto de elementos de página |
| Page | Especifica un editor de páginas de asistente que se cargará en UDI Wizard Designer, que se utiliza para editar los valores de configuración de una página de asistente |
| Param | Especifica un parámetro que se pasa al elemento principal Task o Validator y corresponde a un elemento Setter en el archivo de configuración UDI Wizard Nota: Los atributos de este elemento son diferentes si el elemento principal es el elemento Task o Validator . |
| Tarea | Especifica una tarea de la biblioteca de tareas |
| TaskItem | Especifica un grupo de parámetros que se pasan a la tarea |
| Biblioteca de tareas | Agrupa un conjunto de elementos de tarea |
| Validador | Especifica un validador dentro de la biblioteca de validadores |
| Biblioteca ValidatorLibrary | Agrupa un conjunto de elementos de validación |
DesignerConfig
Este elemento especifica la raíz de todos los demás elementos.
Información de elementos
En la tabla 55 se proporciona información sobre el elemento DesignerConfig .
Cuadro 55. Información del elemento DesignerConfig
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno: Este elemento es obligatorio. |
| Elementos principales | Ninguno |
| Contenido | DesignerMappings, TaskLibrary, ValidatorLibrary |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings
Este elemento agrupa un conjunto de elementos de página .
Información de elementos
En la tabla 56 se proporciona información sobre el elemento DesignerMappings .
Tabla 56. Información del elemento DesignerMappings
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro del elemento DesignerConfig (este elemento es opcional si no hay ninguna página del asistente personalizada en la DLL que corresponde a este archivo de configuración UDI Wizard Designer). |
| Elementos principales | DesignerConfig |
| Contenido | Page |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<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
Este elemento especifica un editor de páginas del asistente que se cargará en UDI Wizard Designer, que a su vez se utiliza para editar los valores de configuración de una página del asistente.
Información de elementos
En la tabla 57 se proporciona información sobre el elemento Página .
Cuadro 57. Información del elemento de página
| Atributo | Valor |
|---|---|
| Número de repeticiones | Una o más para cada página del asistente definida en el elemento DesignerMappings |
| Elementos principales | DesignerMappings |
| Contenido | Cualquier contenido XML con formato correcto |
Atributos de elemento
En la Tabla 58 se enumeran los atributos del elemento Page y una descripción de cada uno.
Tabla 58. Atributos y valores correspondientes para el elemento de página
| Atributo | Descripción |
|---|---|
| Descripción | Especifica el texto que proporciona información sobre el parámetro, que se muestra en UDI Wizard Designer |
| DesignerAssembly | Especifica el nombre del archivo de .dll asociado con el editor de páginas del asistente (el archivo .dll debe existir en la carpeta installation_folder\Bin (donde installation_folder es la carpeta en la que instaló MDT). |
| DesignerType | Especifica el nombre del editor de páginas del asistente dentro del archivo .dll especificado en el atributo DesignerAssembly (este es el tipo de Microsoft .NET para el editor de páginas del asistente, con el espacio de nombres completo de Microsoft .NET). |
| DisplayName | Especifica el nombre descriptivo del editor de página, que se muestra en UDI Wizard Designer |
| DLL | Especifica el nombre del archivo de .dll asociado a la página del asistente (el archivo .dll debe existir en la carpeta installation_folder\Templates\Distribution\Tools\platform (donde installation_folder es la carpeta en la que instaló MDT y la plataforma es x86 para la versión de 32 bits o x64 es para la versión de 64 bits). Nota: Asegúrese de que la arquitectura del procesador DLL coincida con la arquitectura del procesador MDT instalada. Por ejemplo, si instaló una versión de 32 bits de MDT, asegúrese de usar un archivo DLL de 32 bits para la página del asistente. |
| Image | Especifica el nombre de una imagen de la página que está en formato Portable Network Graphics (PNG) (El archivo .png debe existir en la carpeta installation_folder\Bin\Images (donde installation_folder es la carpeta en la que instaló MDT). |
| Tipo | Especifica el editor de páginas del asistente y debe coincidir con el nombre utilizado cuando se registró la página personalizada |
Comentarios
UDI Wizard Designer utiliza el elemento Page como una plantilla para crear el XML inicial de un nuevo asistente. UDI Wizard Designer realiza la validación de esquemas para asegurarse de que los elementos Page y secundarios tienen un formato válido. Este elemento proporciona una asignación entre el tipo de página del Asistente UDI y la información que UDI Wizard Designer necesita para editar y crear páginas de este tipo con un editor de páginas personalizado.
Ejemplo
Ninguno.
Parámetro
Este elemento especifica un parámetro que se pasa al elemento primario Task o Validator y que corresponde a un elemento Setter en el archivo de configuración UDI Wizard.
Nota:
Los atributos de este elemento son diferentes si el elemento primario es el elemento Task o Validator .
Información de elementos
La Tabla 59 proporciona información sobre el elemento Param .
Cuadro 59. Información del elemento parámetro
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más para cada elemento primario TaskItem o Validator |
| Elementos principales | TaskItem, Validator |
| Contenido | Cualquier contenido XML con formato correcto |
Atributos de elemento
La Tabla 60 enumera los atributos del elemento Param y proporciona una descripción de cada uno.
Tabla 60. Atributos y valores correspondientes para el elemento Param
| Atributo | Descripción |
|---|---|
| Descripción | Especifica el texto que proporciona información sobre el parámetro, que se muestra en UDI Wizard Designer Nota: Este atributo solo es válido para el elemento Validator. |
| DisplayName | Especifica el nombre descriptivo del parámetro validator, que se muestra para la página del Asistente de UDI adecuada en UDI Wizard Designer (Este nombre suele ser más descriptivo que el atributo Name). Nota: Este atributo solo es válido para el elemento Validator. |
| Nombre | Especifica el nombre del parámetro que se pasa a la tarea o al validador, dependiendo del elemento primario (este atributo se convertirá en el atributo de propiedad en un elemento Setter del archivo de configuración del Asistente UDI). Nota: Este parámetro se usa para los elementos principales TaskItem y Validator . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Tarea
Este elemento especifica una tarea dentro de la biblioteca de tareas.
Información de elementos
En el Cuadro 61 se proporciona información sobre el elemento Tarea .
Cuadro 61. Información del elemento de tarea
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o varios dentro del elemento TaskLibrary (este elemento no es opcional si se especifica el elemento TaskLibrary ). |
| Elementos principales | Biblioteca de tareas |
| Contenido | TaskItem |
Atributos de elemento
En la Tabla 62 se enumeran los atributos del elemento Task y se proporciona una descripción de cada uno.
Cuadro 62. Atributos y valores correspondientes para el elemento de tarea
| Atributo | Descripción |
|---|---|
| Descripción | Especifica el texto que proporciona información sobre la tarea, que se muestra en UDI Wizard Designer |
| DLL | Especifica el nombre del archivo de .dll asociado a la tarea (El archivo .dll debe existir en la carpeta installation_folder\Templates\Distribution\Tools\platform (donde installation_folder es la carpeta en la que instaló MDT y la plataforma es x86 para la versión de 32 bits o x64 para la versión de 64 bits). |
| Nombre | Especifica el nombre de la tarea, que se muestra en la página del Asistente de UDI correspondiente y en UDI Wizard Designer |
| Tipo | Especifica el tipo de tarea, que se registra en el registro de fábrica y se utiliza para llamar a una tarea específica dentro de un archivo .dll |
Comentarios
Ninguno.
Ejemplo
Ninguno.
TaskItem
Este elemento especifica un grupo de parámetros que se pasan a la tarea.
Información de elementos
En la tabla 63 se proporciona información sobre el elemento TaskItem .
Cuadro 63. Información del elemento TaskItem
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más para cada elemento de tarea |
| Elementos principales | Tarea |
| Contenido | Param |
Atributos de elemento
En la tabla 64 se enumeran los atributos del elemento TaskItem y se proporciona una descripción de cada uno.
Cuadro 64. Atributo y valores correspondientes para el elemento TaskItem
| Atributo | Descripción |
|---|---|
| Tipo | Especifica el tipo de elemento que se creará en el archivo de configuración del Asistente para UDI. Se creará un elemento XML que corresponda al valor de este atributo. Por ejemplo, si el valor de este atributo es Archivo, se creará un elemento Archivo en el archivo de configuración del Asistente UDI. Actualmente, los únicos valores admitidos son: - Archivo, que requiere dos elementos secundarios Param (un elemento secundario Param con el atributo Name establecido en Source y otro elemento secundario Param con el atributo Name establecido en Dest) - establecedor, que requiere un elemento secundario Param |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Biblioteca de tareas
Este elemento agrupa un conjunto de elementos de tarea .
Información de elementos
En la tabla 65 se proporciona información sobre el elemento TaskLibrary .
Cuadro 65. Información del elemento TaskLibrary
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro del elemento DesignerConfig (este elemento es opcional si no hay ninguna tarea personalizada en la DLL que corresponda a este archivo de configuración de UDI Wizard Designer). |
| Elementos principales | DesignerConfig |
| Contenido | Tarea |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<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>
Validador
Este elemento especifica un validador dentro de la biblioteca de validadores.
Información de elementos
La Tabla 66 proporciona información sobre el elemento Validator .
Cuadro 66. Información del elemento validador
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más en el elemento ValidatorLibrary (este elemento es opcional). |
| Elementos principales | Biblioteca ValidatorLibrary |
| Contenido | Param |
Atributos de elemento
La Tabla 67 enumera los atributos del elemento Validador y proporciona una descripción de cada uno.
Cuadro 67. Atributos y valores correspondientes para el elemento validador
| Atributo | Descripción |
|---|---|
| Descripción | Especifica el texto que proporciona información sobre el validador, que se muestra en UDI Wizard Designer |
| DisplayName | Especifica el nombre descriptivo del validador que se muestra en UDI Wizard Designer (este nombre suele ser más descriptivo que el atributo Name). |
| DLL | Especifica el nombre del archivo de .dll asociado con el validador (el archivo .dll debe existir en la carpeta installation_folder\Templates\Distribution\Tools\platform ( donde installation_folder es la carpeta en la que instaló MDT y la plataforma es x86 para la versión de 32 bits o x64 para la versión de 64 bits). |
| Nombre | Especifica el nombre del validador, que se muestra en la página del Asistente de UDI correspondiente y en UDI Wizard Designer |
| Tipo | Especifica el tipo de validador, que se registra con el factor de Registro y se utiliza para llamar a un validador específico dentro de un archivo .dll |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Biblioteca ValidatorLibrary
Este elemento agrupa un conjunto de elementos Validator .
Información de elementos
En la tabla 68 se proporciona información sobre el elemento ValidatorLibrary .
Cuadro 68. Información del elemento ValidatorLibrary
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro del elemento DesignerConfig (este elemento es opcional si no hay validadores personalizados en el DLL que corresponden a este archivo de configuración UDI Wizard Designer). |
| Elementos principales | DesignerConfig |
| Contenido | Validador |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Requiere texto en un campo" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="No permite que haya determinados caracteres en un campo" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Debe seguir un patrón predefinido" Type="Microsoft.Wizard.Validation.RegEx" name=" NamedPattern"> +<Validator DLL="" Description="Requerir que el contenido coincida con una expresión regular" Type="Microsoft.Wizard.Validation.RegEx" name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>
Referencia de UDI Wizard Designer
Controles
Los controles usados para crear editores de páginas del asistente personalizados para su uso en UDI Wizard Designer son instancias de UserControl de WPF. En la tabla 69 se enumeran los controles que puede utilizar para crear editores de páginas del asistente personalizados.
Cuadro 69. Controles que se pueden utilizar para crear editores de páginas del asistente personalizados
| Control | Descripción |
|---|---|
| ColecciónTControl | Este control se utiliza para editar los datos almacenados en el elemento Datos dentro de un elemento Página . |
| FieldElementControl | Este control se utiliza para editar un campo, que normalmente está vinculado a un control TextBox en la página .xaml. |
| SetterControl | Este control se utiliza para modificar el valor de un elemento establecedor en el archivo de configuración del Asistente para UDI. |
ColecciónTControl
Este control proporciona muchas funcionalidades para editar datos. La mejor manera de aprender a usar este control es mirar el ejemplo, que muestra cómo editar datos en el elemento Datos de una página. En concreto, el ejemplo muestra cómo agregar, quitar y editar elementos en este control.
FieldElementControl
Use este control para editar un campo, que normalmente está vinculado a un control TextBox en la página .xaml.
Ejemplo
El siguiente extracto de un archivo .xaml muestra el uso de FieldElementControl para configurar el valor predeterminado de un campo de una página del Asistente mediante un control TextBox secundario:
<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>
Propiedades
FieldData
Esta propiedad de cadena contiene información para conectar FieldElementControl al XML subyacente para el campo. La conexión se realiza a una propiedad de la interfaz del editor de páginas. El siguiente extracto de un archivo .xaml muestra el uso de la propiedad FieldData :
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
En este extracto, la interfaz del editor de páginas se llama ControlRoot y se especifica en el parámetro ElementName . El enlace se realiza a la propiedad DataContext.Location de la interfaz del editor de páginas ControlRoot . DataContext es un modelo de vista que señala al elemento Page dentro del archivo de configuración del Asistente para UDI. Ubicación es una propiedad de la vista que devuelve una lista de las ubicaciones posibles y se define mediante un elemento de datos dentro del archivo de configuración del Asistente UDI. Cada ubicación se define mediante un elemento DataItem dentro del archivo de configuración del Asistente para UDI.
HeaderText
Esta propiedad de cadena permite especificar un encabezado para el control FieldElementControl . El encabezado actúa como un título para el control y tiene formato de texto naranja en negrita que se muestra inmediatamente encima del control.
InstructionText
Esta propiedad de cadena permite especificar texto informativo para el control FieldElementControl . Normalmente, el texto se usa para proporcionar una breve descripción del campo y explicar cómo afecta la configuración del campo a la página del asistente correspondiente.
HideEnableButton
Esta propiedad booleana permite controlar la visibilidad del botón que cambia de estado entre Desbloqueado y Bloqueado (habilitado o deshabilitado). Si se establece en:
True, el botón no es visible
Falso, el botón es visible (este es el valor predeterminado).
HideDefaultTab
Esta propiedad booleana permite controlar la visibilidad de la sección que contiene el control utilizado para establecer el valor predeterminado. Aunque la propiedad hace referencia a una pestaña, no hay ninguna pestaña en FieldElementControl , sino una sección que se puede ocultar. Si se establece en:
True, la sección no está visible
Falso, la sección es visible (este es el valor predeterminado).
Ocultar borde
Esta propiedad booleana permite controlar la visibilidad del borde alrededor del control de campo. Si se establece en:
Verdadero el borde no es visible
Falso, el borde es visible (este es el valor predeterminado).
Ocultar imagen
Esta propiedad booleana permite controlar la visibilidad de la imagen que configura la propiedad FieldImageSource . Si se establece en:
True, la imagen no es visible
Falso, la imagen es visible (este es el valor predeterminado).
HideValidationTab
Esta propiedad booleana permite controlar la visibilidad de la sección donde se gestiona la lista de validadores. Aunque la propiedad hace referencia a una pestaña, no hay ninguna pestaña en FieldElementControl , sino una sección que se puede ocultar. Si se establece en:
True, la sección no está visible
Falso, la sección es visible (este es el valor predeterminado).
HideSummaryTab
Esta propiedad booleana permite controlar la visibilidad de la sección en la que se configura el subtítulo de resumen de campo. El subtítulo y el valor correspondiente del campo se muestran en un tipo de página del Asistente SummaryPage en un flujo de fase. Aunque la propiedad hace referencia a una pestaña, no hay ninguna pestaña en FieldElementControl , sino una sección que se puede ocultar. Si se establece en:
True, la sección no está visible
Falso, la sección es visible (este es el valor predeterminado).
HideTaskSequenceTab
Esta propiedad booleana permite controlar la visibilidad de la sección en la que se configura la variable de secuencia de tareas que corresponde al campo. Aunque la propiedad hace referencia a una pestaña, no hay ninguna pestaña en FieldElementControl , sino una sección que se puede ocultar. Si se establece en:
True, la sección no está visible
Falso, la sección es visible (este es el valor predeterminado).
SetterControl
Utilice este control para modificar el valor de un elemento Setter en el archivo de configuración del Asistente para UDI. Este control contiene un control secundario que se utiliza para modificar el valor del elemento setter .
Ejemplo
El siguiente extracto de un archivo .xaml muestra el uso de SetterControl para modificar un elemento Setter denominado KeyLocationSetter mediante un control TextBox secundario.
<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>
Propiedades
SetterData
Debe enlazar esto a una propiedad de la vista o modelo de vista que se conecte al establecedor. Hacerlo es similar a como enlazaría a un campo, como se describe para FieldElementControl.
HeaderText
Esta propiedad le permite establecer el texto que aparecerá en el encabezado del control. Piense en esta propiedad como un título para el control; De forma predeterminada, aparece como texto naranja en negrita.
InstructionText
Establezca esta propiedad en el texto que desea que aparezca debajo del encabezado, normalmente texto de instrucciones que indica al usuario del editor personalizado cuándo y por qué desea modificar el comportamiento del campo.
Interfaces
En la Tabla 70 se enumeran las interfaces que puede utilizar para crear editores de páginas del asistente personalizados.
Tabla 70. Interfaces que se pueden usar para crear editores de páginas de asistente personalizados
| Interfaz | Descripción |
|---|---|
| IDataService | Utilice esta interfaz para conectar campos a los elementos de datos en el archivo de configuración del Asistente para UDI. |
| IMessageBoxService | Esta interfaz proporciona acceso a métodos que puede usar para mostrar cuadros de mensaje. |
IDataService
Esta interfaz contiene varias propiedades y métodos, pero solo hay una propiedad que es probable que necesite. Esa propiedad es la única documentada aquí.
Puede usar la inserción de dependencias para obtener un puntero a esta interfaz usando código como este en su clase:
[Dependency]
public IDataService DataService { get; set; }
Propiedades
En la tabla 71 se enumeran las propiedades de la interfaz IDataService .
Cuadro 71. Propiedades de la interfaz IDataService
| Interfaz | Descripción |
|---|---|
| CurrentPage | Esta propiedad proporciona acceso a los elementos, atributos y valores XML bajo el contexto de la página actual que se está editando en el archivo de configuración del Asistente para UDI |
CurrentPage
XElement CurrentPage { get; set; }
Esta propiedad proporciona acceso al XML de la página actual. Nunca debe establecer esta propiedad, pero puede modificar el XML de la página. El editor de páginas de muestra muestra ejemplos de modificación del XML. Esta propiedad se usa principalmente cuando tiene datos personalizados. Para los campos y las propiedades (establecedores), puede usar controles precompilados que se ocupan de todos los detalles.
IMessageBoxService
Esta interfaz proporciona acceso a métodos que puede usar para mostrar cuadros de mensaje. Quizás se pregunte por qué necesita una interfaz para mostrar un cuadro de mensaje. La realidad es que no: Microsoft usa esta interfaz en el código, ya que ayuda a escribir pruebas automatizadas para páginas de diseñador.
Sin embargo, el uso de estos métodos proporciona una ventaja útil: los cuadros de diálogo siempre tienen el "propietario" establecido en el Asistente UDI, lo que garantiza que el cuadro de diálogo se agrupe correctamente con la ventana principal.
Puede usar la inserción de dependencias para obtener un puntero a esta interfaz usando código como este en su clase:
[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Métodos
En el Cuadro 72 se enumeran los métodos de la interfaz IMessageBoxService .
Cuadro 72. Métodos para la interfaz IMessageBoxService
| Método | Descripción |
|---|---|
| ShowMessageBox | Este método sobrecargado se utiliza para mostrar un cuadro de mensaje con los siguientes miembros: - ShowMessageBox(String message, String caption, MessageBoxImage icon (Mostrar mensaje, subtítulo de cadena, icono MessageBoxImage) - ShowMessageBox(string message, string caption, string subtitle, MessageBoxButton button, MessageBoxImage icon) - ShowMessageBox (excepción de excepción) |
| ShowDialogWindow | Use este método para crear un cuadro de diálogo nuevo. |
| ShowWizardWindow | Use este método para mostrar un editor personalizado dentro de un cuadro de diálogo que incluye los botones Siguiente y Atrás para la navegación. |
ShowMessageBox
Este método muestra un cuadro de mensaje que es un elemento secundario del editor de página del asistente personalizado. Este miembro está sobrecargado: la Tabla 73 contiene una lista de los miembros y una breve descripción de cada uno. Para obtener información completa sobre cada miembro (incluida la sintaxis, el uso y los ejemplos), consulte la sección correspondiente a cada miembro.
Cuadro 73. Miembros sobrecargados para el método ShowMessagBox
| Member | Descripción |
|---|---|
| ShowMessageBox(String message, String caption, MessageBoxImage icon (Mostrar mensaje, subtítulo de cadena, icono MessageBoxImage) | Muestra un cuadro de mensaje con un icono y un botón Aceptar |
| ShowMessageBox(string message, string caption, string subtitle, MessageBoxButton button, MessageBoxImage icon) | Muestra un cuadro de mensaje con un icono y diferentes combinaciones posibles de botones |
| ShowMessageBox (excepción de excepción) | Muestra un cuadro de mensaje que proporciona información sobre una excepción y tiene un botón Aceptar |
ShowMessageBox(String message, String caption, MessageBoxImage icon (Mostrar mensaje, subtítulo de cadena, icono MessageBoxImage)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
Este método muestra un cuadro de mensaje con un botón Aceptar . Véase el cuadro 74.
Tabla 74. Parámetros para el método ShowMessageBox(mensaje de cadena, subtítulo de cadena, icono MessageBoxImage)
| Parámetro | Descripción |
|---|---|
| message | El mensaje que se mostrará en el área de contenido del cuadro de mensaje |
| caption | El texto que se mostrará en la barra de título del cuadro de diálogo |
| icon | El tipo de icono que se mostrará en el cuadro de mensaje |
ShowMessageBox(string message, string caption, string subtitle, MessageBoxButton button, MessageBoxImage icon)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);
Este método muestra un cuadro de mensaje con el conjunto de botones que desea mostrar e informa qué botón seleccionó. Véase el cuadro 75.
Cuadro 75. Parámetros para el método ShowMessageBox(mensaje de cadena, subtítulo de cadena, botón MessageBoxButton, icono MessageBoxImage)
| Parámetro | Descripción |
|---|---|
| message | El mensaje que se mostrará en el área de contenido del cuadro de mensaje |
| caption | El texto que se mostrará en la barra de título del cuadro de diálogo |
| botón | Qué botones mostrar |
| icon | El tipo de icono que se mostrará en el cuadro de mensaje |
ShowMessageBox (excepción de excepción)
void ShowMessageBox(Exception exception);
Este método muestra un cuadro de mensaje que notifica información sobre una excepción. Este cuadro de mensaje tiene un solo botón Aceptar . Véase el cuadro 76.
Tabla 76. Parámetros para el método ShowMessageBox (excepción, excepción)
| Parámetro | Descripción |
|---|---|
| excepción | La excepción que desea notificar (El cuadro de diálogo usa una excepción. mensaje como el contenido). |
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
Este método crea un nuevo cuadro de diálogo cuyo contenido es el texto que se proporciona en el parámetro viewType . UDI Designer crea una nueva instancia de este tipo y la ajusta en un cuadro de diálogo con los botones Aceptar y Cancelar.
Pase datos al control mediante el parámetro dialogPayload. La solución SampleEditor del directorio SDK tiene un ejemplo de cómo usar esta funcionalidad.
ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
Este método permite mostrar un editor personalizado dentro de un cuadro de diálogo que incluye los botones Siguiente y Atrás para la navegación. Microsoft no ha proporcionado un ejemplo de cómo usar este método.
Referencia de esquema de archivo de configuración del asistente de UDI
Este archivo lo consume UDI Wizard y lo configura UDI Wizard Designer. Este archivo se usa para configurar:
Páginas del asistente mostradas en UDI Wizard
La secuencia de las páginas del asistente en UDI Wizard
Configuración de los campos de cada página del asistente
Grupos Stage disponibles en UDI Wizard Designer
Fases disponibles dentro de cada asistente de implementación en UDI Wizard Designer
En la figura 77 se enumeran los elementos del archivo de configuración del Asistente para UDI y sus descripciones. El elemento Asistente es el nodo raíz de esta referencia.
Tabla 77. Elementos del archivo de configuración del Asistente para UDI y sus descripciones
| Nombre del elemento | Descripción |
|---|---|
| Datos | Agrupa los elementos DataItem individuales dentro de un elemento Page y se denomina mediante el atributo Name . |
| DataItem | Agrupa los elementos individuales de Setter dentro de un elemento de página . Puede crear datos jerárquicos incluyendo uno o más elementos de datos dentro de un elemento DataItem . Cada elemento DataItem representa un elemento individual. Por ejemplo, una lista de unidades disponibles podría tener un DataItem para el nombre para mostrar y otro elemento DataItem para la letra de unidad correspondiente. |
| Default | Especifica un valor predeterminado para el campo especificado en el elemento Campo principal o RadioGroup . El valor predeterminado se establece en el valor entre corchetes de este elemento. |
| DLL | Especifica una DLL que el Asistente de UDI y el Asistente de UDI Designer deben cargar y hacer referencia a ella. |
| DLL | Agrupa los elementos individuales de DLL . |
| Error | Especifica un posible código de error que puede devolver una tarea. HRESULT de la tarea devuelve el valor del código de error y este elemento lo atrapa para proporcionar información de error más específica. |
| Código de salida | Especifica un posible código de salida para una tarea. Los códigos de salida son los códigos de retorno que espera la tarea. Cree un elemento ExitCode para cada código de salida posible. De lo contrario, puede especificar un asterisco (*) en el atributo Value para tratar los códigos de retorno que no aparecen en otros elementos de ExitCode . |
| Códigos de salida | Agrupa un conjunto de elementos ExitCode y Error para un elemento de tarea o un elemento de error . |
| Field | Especifica una instancia de un control en un elemento Page que se utiliza para proporcionar personalización con XML. No todos los controles permiten la personalización con XML, solo los controles que utilizan el elemento Field . |
| Fields | Agrupa los elementos de campo individuales dentro de un elemento de página . |
| Archivo | Especifica el origen y el destino de una operación de copia de archivo mediante el tipo de tarea Microsoft.Wizard.CopyFilesTask . Puede incluir un elemento File independiente para copiar más de un archivo en una sola tarea. |
| Page | Especifica una instancia de una página e incluye todas las opciones de configuración de la página. |
| Referencia de página | Especifica una referencia a una instancia de una página dentro de una fase dentro de un grupo de fase. |
| Pages | Agrupa los elementos de página individuales. |
| Grupo de radio | Especifica un grupo de botones de radio dentro de un elemento Field . |
| Grupo de escenario | Especifica un grupo de una o más fases. |
| Grupos de fase | Agrupa un conjunto de grupos de fase dentro de un archivo de configuración del Asistente de UDI. |
| Colocador | Especifica un valor establecido en la propiedad de una propiedad cuyo nombre se corresponde en la propiedad Propiedad . |
| Fase | Especifica una fase dentro de un StageGroup y contiene uno o varios elementos PageRef . |
| Estilo | Agrupa los elementos establecedores individuales que configuran la apariencia del Asistente de UDI, incluido el título que se muestra en la parte superior del asistente y la imagen de banner que se muestra en el Asistente de UDI. |
| Tarea | Especifica una tarea que se debe ejecutar en la página especificada en el elemento de página principal. |
| Tasks | Agrupa un conjunto de tareas para un elemento de página . |
| Validador | Especifica un validador para el control de campo que se especifica en el elemento Field principal. |
| Asistente | Especifica la raíz de todos los demás elementos. |
Datos
Este elemento agrupa los elementos DataItem individuales dentro de un elemento Page y se denomina mediante el atributo Name .
Información de elementos
En la Tabla 78 se proporciona información sobre el elemento Datos .
Cuadro 78. Información del elemento de datos
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento de página (este elemento es opcional). |
| Elementos principales | Page, DataItem |
| Contenido | DataItem, Setter |
Atributos de elemento
La Tabla 79 enumera los atributos del elemento Datos y proporciona una descripción de cada uno.
Cuadro 79. Atributos y valores correspondientes para el elemento de datos
| Atributo | Descripción |
|---|---|
| Name | Especifica el nombre del elemento de datos |
Comentarios
El atributo Name permite que el código recupere un conjunto específico de datos.
Ejemplo
Ninguno.
DataItem
Este elemento agrupa los elementos Setter individuales dentro de un elemento Page . Puede crear datos jerárquicos incluyendo uno o más elementos de datos dentro de un elemento DataItem . Cada elemento DataItem representa un elemento individual. Por ejemplo, una lista de unidades disponibles podría tener un DataItem para el nombre para mostrar y otro elemento DataItem para la letra de unidad correspondiente.
Información de elementos
En la tabla 80 se proporciona información sobre el elemento DataItem .
Tabla 80. Información del elemento DataItem
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento de datos (este elemento es opcional). |
| Elementos principales | Datos |
| Contenido | Data, Setter |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
Ninguno.
Predeterminado
Este elemento especifica un valor predeterminado para el campo especificado en el elemento Campo principal o RadioGroup . El valor predeterminado se establece en el valor que este elemento pone entre corchetes.
Información de elementos
En la tabla 81 se proporciona información sobre el elemento predeterminado .
Cuadro 81. Información del elemento predeterminado
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de un elemento Campo o RadioGroup (Este elemento es opcional). |
| Elementos principales | Field, RadioGroup |
| Contenido | Puede ser cualquier contenido XML bien formado, pero normalmente es texto estándar |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
En el siguiente ejemplo, el valor predeterminado del campo Zona horaria se establece en "Pacific Standard Time":
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
DLL
Este elemento especifica un archivo DLL para que el Asistente y el Asistente UDI Designer carguen y hagan referencia a ellos.
Información de elementos
En la Tabla 82 se proporciona información sobre el elemento DLL .
Tabla 82. Información del elemento DLL
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o varios dentro del elemento DLL |
| Elemento principal | DLL |
| Contenido | No se permite contenido para este elemento |
Atributos de elemento
En la tabla 83 se enumeran los atributos del elemento DLL y se proporciona una descripción de cada uno.
Tabla 83. Atributos y valores correspondientes para el elemento DLL
| Atributo | Descripción |
|---|---|
| Nombre | Especifica el nombre de la DLL a la que harán referencia el Asistente de UDI y UDI Wizard Designer |
Comentarios
Ninguno.
Ejemplo
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
DLL
Este elemento agrupa los elementos individuales de DLL .
Información de elementos
En la tabla 84 se proporciona información sobre el elemento DLL .
Tabla 84. DLLs Información del elemento
| Atributo | Valor |
|---|---|
| Número de repeticiones | Un |
| Elementos principales | Asistente |
| Contenido | DLL |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Error
Este elemento especifica un posible código de error que puede devolver una tarea. El valor del código de error se devuelve y se captura mediante HRESULT de la tarea para proporcionar información de error más específica.
Información de elementos
En la Tabla 85 se proporciona información sobre el elemento Error .
Tabla 85. Información del elemento de error
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento ExitCode (este elemento es opcional). |
| Elementos principales | Códigos de salida |
| Contenido | Cualquier contenido XML con formato correcto |
Atributos de elemento
En la Tabla 86 se enumeran los atributos del elemento Error y se proporciona una descripción de cada uno.
Tabla 86. Información del elemento de error
| Atributo | Descripción |
|---|---|
| State | Especifica el estado de retorno de una tarea que ha encontrado un error. Normalmente, el valor de este atributo se establece en Error. Este valor se muestra en la columna Estado de la página del asistente del Asistente de UDI. |
| Text | Especifica el texto descriptivo sobre la condición de error que encontró la tarea. |
| Tipo | Especifica si este elemento representa un error, una advertencia o un éxito. El valor especificado enTipo debe ser único dentro de un elemento ExitCodes . Los siguientes son valores válidos para este elemento: - **0.**El elemento representa un éxito. - 1. El elemento representa una advertencia. - -1. El elemento representa un error. |
| Valor | Especifica el valor del código que la tarea devolvió como valor numérico. Especificar el valor de un asterisco (*) indica el elemento predeterminado para los códigos de retorno que no aparecen en otros elementos de error . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Código de salida
Este elemento especifica un posible código de salida para una tarea. Los códigos de salida son los códigos de retorno que espera la tarea. Cree un elemento ExitCode para cada código de salida posible. De lo contrario, puede especificar un asterisco (*) en el atributo Value para tratar los códigos de retorno que no aparecen en otros elementos de ExitCode .
Información de elementos
En el Cuadro 87 se proporciona información sobre el elemento ExitCode .
Cuadro 87. Información del elemento ExitCode
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento ExitCodes (este elemento es opcional). |
| Elementos principales | Códigos de salida |
| Contenido | Al menos un elemento ExitCode y cero o más elementos de error |
Atributos de elemento
En el Cuadro 88 se enumeran los atributos del elemento ExitCode y se proporciona una descripción de cada uno de ellos.
Cuadro 88. Atributos y valores correspondientes para el elemento ExitCode
| Atributo | Descripción |
|---|---|
| State | Especifica el estado de retorno de una tarea. El valor de este atributo se muestra en la columna Estado de la página del asistente correspondiente en el Asistente de UDI. Puede usar cualquier valor que sea significativo para su tarea en este atributo. Los siguientes son los valores típicos utilizados para este atributo: - Éxito - Advertencia - Error |
| Text | Especifica el texto descriptivo sobre el código existente de la tarea. |
| Tipo | Especifica si este elemento representa un error, una advertencia o un éxito. El valor especificado en el tipo debe ser único dentro de un elemento ExitCodes . Los siguientes son valores válidos para este elemento: - 0. El elemento representa un éxito. - 1. El elemento representa una advertencia. - -1. El elemento representa un error. |
| Valor | Especifica el valor del código que la tarea devolvió como valor numérico. Especificar el valor de un asterisco (*) indica el elemento predeterminado para los códigos de retorno que no aparecen en otros elementos de ExitCode . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Códigos de salida
Este elemento agrupa un conjunto de elementos ExitCode y Error para una tarea o un elemento de error .
Información de elementos
En el Cuadro 89 se proporciona información sobre el elemento ExitCodes .
Tabla 89. Información del elemento ExitCodes
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno dentro de cada elemento de tarea |
| Elementos principales | Tarea |
| Contenido | Error, ExitCode |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
Ninguno.
Campo
Este elemento especifica una instancia de un control en un elemento Page que se utiliza para proporcionar personalización con XML. No todos los controles permiten la personalización con XML, solo los controles que utilizan el elemento Field .
Información de elementos
En la tabla 90 se proporciona información sobre el elemento Campo .
Cuadro 90. Información del elemento de campo
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento de campo (este elemento es opcional). |
| Elementos principales | Fields |
| Contenido | Predeterminado, Validador |
Atributos de elemento
En el Cuadro 91 se enumeran los atributos del elemento Campo y se proporciona una descripción de cada uno.
Tabla 91. Atributos y valores correspondientes para el elemento de campo
| Atributo | Descripción |
|---|---|
| Enabled | Especifica si el campo está habilitado para la entrada del usuario (el atributo se puede establecer en verdadero o falso). |
| Nombre | Especifica el nombre del campo |
| Resumen | Especifica el texto descriptivo que se muestra en la página Asistente para resumen para el valor que establece este campo |
| VarName | Especifica el nombre de la variable de secuencia de tareas leído o configurado mediante el campo del elemento Field principal |
Comentarios
Este elemento puede contener cero o más elementos predeterminados y cero o más elementos validadores .
Ejemplo
Ninguno.
Fields
Este elemento agrupa los elementos de campo individuales dentro de un elemento de página .
Información de elementos
En la Tabla 92 se proporciona información sobre el elemento Fields .
Cuadro 92. Fields Información del elemento
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento de página (este elemento es opcional). |
| Elementos principales | Page |
| Contenido | Field, RadioGroup |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
Ninguno.
Archivo
Este elemento especifica el origen y el destino de una operación de copia de archivo mediante el tipo de tarea Microsoft.Wizard.CopyFilesTask . Puede incluir un elemento File independiente para copiar más de un archivo en una sola tarea.
Información de elementos
En la tabla 93 se proporciona información sobre el elemento File .
Tabla 93. Información del elemento de archivo
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más para cada tarea que tiene un tipo de tarea de Microsoft.Wizard.CopyFilesTask |
| Elementos principales | Tarea |
| Contenido | Ninguno |
Atributos de elemento
En el Cuadro 94 se enumeran los atributos del elemento File y se proporciona una descripción de cada uno.
Tabla 94. Atributos y valores correspondientes para el elemento File
| Atributo | Descripción |
|---|---|
| Dest | Especifica la ruta completa o relativa a la carpeta de destino para el archivo especificado en el atributo de origen . Las variables de entorno se permiten como parte de la ruta de acceso. |
| Source | Especifica la ruta de acceso completa o relativa al archivo de origen que copia el tipo de tarea Microsoft.Wizard.CopyFilesTask . Este atributo admite caracteres comodín, para que se puedan copiar varios archivos con un único elemento de archivo . Las variables de entorno se permiten como parte de la ruta de acceso. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Page
Este elemento especifica una instancia de una página e incluye todas las opciones de configuración de la página.
Información de elementos
En la tabla 95 se proporciona información sobre el elemento Página .
Cuadro 95. Información del elemento de página
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más dentro de cada elemento de Páginas |
| Elementos principales | Pages |
| Contenido | Data, Fields, Setter, Tasks |
Atributos de elemento
En la tabla 96 se enumeran los atributos del elemento Page y se proporciona una descripción de cada uno.
Tabla 96. Atributos y valores correspondientes para el elemento de página
| Atributo | Descripción |
|---|---|
| DisplayName | Especifica el nombre descriptivo de la página del asistente que se muestra en UDI Wizard Designer. Este nombre suele ser más descriptivo que el atributo Name . |
| Nombre | Especifica el nombre de la página del asistente que se muestra en UDI Wizard Designer. |
| Tipo | Especifica el tipo de página del asistente que está directamente relacionada con una página del asistente específica dentro de una DLL. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Referencia de página
Este elemento especifica una referencia a una instancia de una página dentro de un Stage dentro de un StageGroup.
Información de elementos
En la tabla 97 se proporciona información sobre el elemento PageRef .
Tabla 97. Información del elemento PageRef
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o varios dentro de un elemento Stage |
| Elementos principales | Fase |
| Contenido | Ninguno |
Atributos de elemento
En la tabla 98 se muestra el atributo del elemento PageRef y se proporciona una descripción del mismo.
Cuadro 98. Atributos y valores correspondientes para el elemento PageRef
| Atributo | Descripción |
|---|---|
| Page | Especifica la instancia de una página dentro de una fase dentro de un grupo de fases. Establezca este valor en el atributo Name de un elemento de página . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Páginas
Este elemento agrupa los elementos de página individuales.
Información de elementos
En la tabla 99 se proporciona información sobre el elemento Páginas .
Cuadro 99. Información del elemento de páginas
| Atributo | Valor |
|---|---|
| Número de repeticiones | Un |
| Elementos principales | Asistente |
| Contenido | Page |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<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>
Grupo de radio
Este elemento especifica un grupo de botones de radio en un elemento Field .
Información de elementos
La Tabla 100 proporciona información sobre el elemento RadioGroup .
Tabla 100. Información del elemento RadioGroup
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de un elemento Fields (este elemento es opcional). |
| Elementos principales | Fields |
| Contenido | Default |
Atributos de elemento
En el Cuadro 101 se enumeran los atributos del elemento RadioGroup y se proporciona una descripción de cada uno.
Tabla 101. Atributos y valores correspondientes para el elemento RadioGroup
| Atributo | Descripción |
|---|---|
| Locked | Especifica si el grupo de botones de radio está habilitado para la entrada del usuario. El atributo se puede establecer en: - Cierto. Especifica que los botones de radio están deshabilitados y que los usuarios no pueden seleccionar un botón de radio en el grupo. - Falso. Especifica que los botones de radio están habilitados y que los usuarios pueden seleccionar un botón de radio en el grupo. |
| Nombre | Especifica el nombre del grupo de opciones de radio. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Grupo de escenario
Este elemento especifica un grupo de fases de implementación.
Información de elementos
En la tabla 102 se proporciona información sobre el elemento StageGroup .
Tabla 102. Información del elemento StageGroup
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más dentro de un elemento StageGroups |
| Elementos principales | Grupos de fase |
| Contenido | Fase |
Atributos de elemento
En la tabla 103 se enumeran los atributos del elemento StageGroup y una descripción del atributo.
Tabla 103. Atributos y valores correspondientes para el elemento StageGroup
| Atributo | Descripción |
|---|---|
| DisplayName | Especifica el nombre descriptivo del grupo de fases que se muestra en UDI Wizard Designer. Este nombre suele ser más descriptivo que el atributo Name . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Grupos de fase
Este elemento agrupa un conjunto de grupos de fase dentro de un archivo de configuración del Asistente de UDI.
Información de elementos
La Tabla 104 proporciona información sobre el elemento StageGroups .
Tabla 104. Información del elemento StageGroups
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro de un elemento del asistente |
| Elementos principales | Asistente |
| Contenido | Grupo de escenario |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
Ninguno.
Colocador
Este elemento especifica una configuración de propiedad para el valor de una propiedad que se denomina en la propiedad Property .
Información de elementos
La Tabla 105 proporciona información sobre el elemento Setter .
Tabla 105. Información del elemento de ajuste
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o más dentro de cada elemento principal (este elemento es opcional). |
| Elementos principales | Data, DataItem, Page, Style, Task, Validator |
| Contenido | Contiene un valor de cadena en el atributo Property |
Atributos de elemento
La Tabla 106 enumera el atributo del elemento Setter y proporciona una descripción del mismo.
Tabla 106. Atributos y valores correspondientes para el elemento Setter
| Atributo | Descripción |
|---|---|
| Propiedad | Especifica el nombre de propiedad que se va a establecer. El nombre de la propiedad se establece en el valor que este atributo pone entre corchetes. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Etapa
Este elemento especifica una fase dentro de un StageGroup y contiene uno o varios elementos PageRef .
Información de elementos
La Tabla 107 proporciona información sobre el elemento Stage .
Tabla 107. Información del elemento de la fase
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o varios dentro de un elemento StageGroup |
| Elementos principales | Grupo de escenario |
| Contenido | Referencia de página |
Atributos de elemento
La Tabla 108 enumera los atributos del elemento Stage y proporciona una descripción de cada uno.
Tabla 108. Atributos y valores correspondientes para el elemento Stage
| Atributo | Descripción |
|---|---|
| DisplayName | Especifica el nombre descriptivo de la página del asistente que se muestra en UDI Wizard Designer. Este nombre suele ser más descriptivo que el atributo Name . |
| Nombre | Especifica el nombre de la fase. El valor de este elemento se utiliza al iniciar el Asistente UDI con el parámetro de línea de comandos /stage: name . |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Estilo
Este elemento agrupa los elementos Setter individuales que configuran la apariencia del Asistente UDI, incluido el título que se muestra en la parte superior del asistente y la imagen de banner que se muestra en el Asistente UDI.
Información de elementos
La Tabla 109 proporciona información sobre el elemento Estilo.
Tabla 109. Información del elemento de estilo
| Atributo | Valor |
|---|---|
| Número de repeticiones | Un |
| Elementos principales | Asistente |
| Contenido | Colocador |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<Style>
<Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
<Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>
Tarea
Este elemento especifica una tarea que se ejecutará en la página especificada en el elemento de página principal.
Información de elementos
En el Cuadro 110 se proporciona información sobre el elemento Tarea .
Tabla 110. Información del elemento de tarea
| Atributo | Valor |
|---|---|
| Número de repeticiones | Uno o más dentro de un elemento de tareas |
| Elementos principales | Tasks |
| Contenido | ExitCodes, File, Setter |
Atributos de elemento
En el Cuadro 111 se enumeran los atributos del elemento Tarea y se proporciona una descripción de cada uno.
Tabla 111. Atributos y valores correspondientes para el elemento de tarea
| Atributo | Descripción |
|---|---|
| DependsOn | Especifica si la tarea depende de otra tarea. El valor de este atributo se establece en el atributo Nombre de otro elemento de tarea . Nota: Este atributo no se puede configurar con UDI Wizard Designer. Sin embargo, puede agregar manualmente este atributo a un elemento Task modificando directamente el archivo .xml. |
| DisplayName | Especifica el nombre descriptivo de la tarea que se muestra en UDI Wizard Designer. Este nombre suele ser más descriptivo que el atributo Name . |
| Nombre | Especifica el nombre de la tarea. Este nombre debe ser único. |
| Tipo | Especifica el tipo de tarea de la tarea que se va a ejecutar, que se define en la DLL que contiene la tarea. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Tareas
Este elemento agrupa un conjunto de tareas para un elemento Página .
Información de elementos
La Tabla 112 proporciona información sobre el elemento Tareas .
Tabla 112. Información del elemento de tareas
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro de cada elemento de página (este elemento es opcional). |
| Elementos principales | Page |
| Contenido | Tarea |
Atributos de elemento
En la Tabla 113 se enumeran los atributos del elemento Tasks y se proporciona una descripción de cada uno.
Tabla 113. Atributos y valores correspondientes para el elemento Tareas
| Atributo | Descripción |
|---|---|
| NombreTítulo | Especifica el subtítulo que aparece en la parte superior de la columna que contiene el nombre de las tareas en la página del asistente correspondiente. |
| Título de estado | Especifica el subtítulo que aparece en la parte superior de la columna que contiene el estado de las tareas en la página del asistente correspondiente. |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Validador
Este elemento especifica un validador para el control de campo que se especifica en el elemento Field principal.
Información de elementos
La Tabla 114 proporciona información sobre el elemento Validator .
Tabla 114. Información del elemento validador
| Atributo | Valor |
|---|---|
| Número de repeticiones | Cero o uno dentro de un elemento Campo |
| Elementos principales | Field |
| Contenido | Colocador |
Atributos de elemento
La Tabla 115 enumera el atributo del elemento Validator y proporciona una descripción del mismo.
Tabla 115. Atributos y valores correspondientes para el elemento validador
| Atributo | Descripción |
|---|---|
| Tipo | Especifica el tipo del validador, que se define en la DLL que contiene el validador |
Comentarios
Ninguno.
Ejemplo
Ninguno.
Asistente
Este elemento especifica la raíz de todos los demás elementos.
Información de elementos
En la tabla 116 se proporciona información sobre el elemento asistente .
Tabla 116. Información del elemento del asistente
| Atributo | Valor |
|---|---|
| Número de repeticiones | Un |
| Elementos principales | Ninguno |
| Contenido | DLL, páginas, grupos de fases, estilo |
Atributos de elemento
Este elemento no tiene atributos.
Comentarios
Ninguno.
Ejemplo
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>