Share via


Instalação orientada pelo utilizador - Guia de desenvolvedores

A Instalação Orientada para o Utilizador (UDI) ajuda a simplificar a implementação de sistemas operativos Windows® clientes, como Windows 8.1, para computadores que utilizam a funcionalidade de implementação do sistema operativo (OSD) na Microsoft® System Center Gestor de Configuração R2 de 2012. UDI faz parte do Microsoft Deployment Toolkit (MDT).

Introdução

Normalmente, ao implementar sistemas operativos utilizando a função OSD, deve fornecer todas as informações necessárias para a implementação do sistema operativo. A informação está configurada em ficheiros de configuração ou em bases de dados (como o ficheiro CustomSettings.ini ou a base de dados MDT [MDT DB]). Tem de fornecer todas as definições de configuração antes de iniciar a implementação.

A UDI fornece uma interface orientada por um assistente que lhe permite fornecer informações de configuração imediatamente antes de realizar a implementação. Este comportamento permite-lhe criar sequências genéricas de tarefas de OSD e, em seguida, fornecer informações específicas do computador no momento da implementação, o que proporciona uma maior flexibilidade no processo de implementação.

Público-alvo

Este guia é escrito para os desenvolvedores que criam páginas de assistente personalizadas para o Assistente UDI e editores de página de assistente personalizado para o UDI Wizard Designer. Este guia pressupõe que está familiarizado com o desenvolvimento de aplicações Windows utilizando:

  • C++, que é usado para criar páginas de assistentes personalizados

  • Microsoft .NET Framework, que é usado para criar editores de página de assistentes personalizados

  • Windows Presentation Foundation (WPF), que é usado para criar editores de página de assistente personalizado

  • Idiomas que o WPF suporta, tais como C#, C++, ou Microsoft Visual Basic® .NET, que são usados para criar editores de páginas de assistentes personalizados

Sobre Este Manual

Este guia fornece as informações de referência necessárias para ajudá-lo a personalizar uTI para a sua organização. Este guia não discute temas administrativos ou operacionais, tais como a instalação de MDT (que inclui UDI), configurar UDI para implantar sistemas operativos e aplicações, ou executar implementações utilizando o Assistente UDI. Para obter mais informações sobre estes tópicos, consulte os tópicos UDI na Utilização do Microsoft Deployment Toolkit, que está incluído no MDT.

Visão geral do desenvolvimento da UDI

O desenvolvimento da UDI permite-lhe alargar as funcionalidades que a UDI fornece. Normalmente, o desenvolvimento de UDI é necessário quando pretende recolher informações adicionais que o processo de implementação UDI consome. Estas informações adicionais são geralmente guardadas como variáveis de sequência de tarefa que seqüesta etapas numa sequência de tarefa UDI no Gestor de Configuração.

Arquitetura UDI

O objetivo de alto nível do desenvolvimento da UDI é criar páginas de assistente personalizadas que podem ser exibidas no Assistente UDI. Ao criar páginas de assistentes personalizadas, pode alargar as funcionalidades existentes da UDI para atender aos requisitos técnicos e empresariais da sua organização. Uma página de assistente personalizada recolhe informações para além ou no lugar das páginas de assistente que a UDI fornece.

A Figura 1 ilustra a relação entre o Designer de Feiticeiros UDI e o Feiticeiro UDI.

Figura 1. Relação entre o Assistente UDI e a Figura 1 do Assistente de UDI. Relação entre o Assistente UDI e o UDI Wizard Designer

Figura 1. Relação entre o Assistente UDI e o UDI Wizard Designer

A nível conceptual, o desenvolvimento da UDI inclui a criação de:

  • Páginas de assistente personalizadas. As páginas de assistente são apresentadas no Assistente UDI e recolhem as informações necessárias para completar o processo de implementação. Cria páginas de assistente usando C++ no Microsoft Visual Studio®. As páginas de assistente personalizadas são implementadas como DLLs que o Assistente UDI lê. O kit de desenvolvimento de software UDI (SDK) inclui um exemplo de como criar páginas de assistentes personalizadas.

  • Editores de página de assistente personalizado . Utiliza editores de página de assistente para configurar o comportamento da sua página de assistente personalizado. Os editores de página de assistente personalizado são implementados como DLLs que o UDI Wizard Designer lê. Cria editores de página de assistentes utilizando:

    • Versão WPF 4.0

    • Microsoft Prism versão 4.0

    • Microsoft Unitity Application Block (Unidade) versão 2.1

      O MDT inclui todos os conjuntos necessários para criar um editor de página de assistente personalizado para uso no UDI Wizard Designer. O UDI SDK inclui um exemplo de como criar editores de página de assistentes personalizados.

    Além disso, o UDI Wizard Designer consome ficheiros de configuração de editores de página de assistentes de suporte. Cria os ficheiros de configuração do editor de página de assistente como parte do processo para criar as suas páginas de assistente personalizadas e editores de páginas de assistentes personalizados. O UDI Wizard Designer cria as informações XML necessárias no ficheiro de configuração do Assistente UDI e no ficheiro .app correspondente.

Preparação do Ambiente de Desenvolvimento da UDI

Antes de começar a criar as suas próprias páginas de assistentes personalizadas e editores de páginas de assistentes, execute os seguintes passos para preparar o ambiente de desenvolvimento UDI:

  1. Preparar os pré-requisitos para o ambiente de desenvolvimento da UDI, tal como descritos na Preparação dos Pré-requisitos para o Ambiente de Desenvolvimento da UDI.

  2. Configure o ambiente de desenvolvimento da UDI, tal como descrito no Configure the UDI Development Environment.

  3. Verifique se o ambiente de desenvolvimento da UDI está configurado corretamente como descrito no "Verificar o Ambiente de Desenvolvimento udi ".

Preparar os Pré-requisitos do Ambiente de Desenvolvimento da UDI

Para preparar o ambiente de desenvolvimento udi pré-requisitos, execute os seguintes passos:

  1. Prepare os perquisites de hardware de ambiente de desenvolvimento UDI, conforme descrito no Prep The UDI Development Environment Prerequisites.

  2. Prepare os perquisites de software de ambiente udi development, conforme descrito no Prep the UDI Development Environment Software Prerequisites.

Preparar os Pré-requisitos de Hardware de Ambiente de Desenvolvimento UDI

Os pré-requisitos de hardware para o ambiente de desenvolvimento UDI são os mesmos requisitos de hardware para a edição do Microsoft Visual Studio que está a utilizar. Para obter mais informações sobre estes requisitos, consulte os requisitos do sistema para cada edição na documentação Visual Studio.

Preparar os Pré-requisitos do Software de Desenvolvimento UDI

O ambiente de desenvolvimento da UDI tem os seguintes pré-requisitos de software:

  • Qualquer sistema operativo Windows que Visual Studio suportes de 2010 (Windows 7 ou Windows Server® R2 de 2008 é recomendado.)

    Vai precisar de um sistema operativo Windows que suporte a arquitetura do processador para o qual pretende desenvolver-se. Pode realizar desenvolvimento udi de 32 bits e 64 bits utilizando um sistema operativo de 64 bits. Só se faz 32 bits de desenvolvimento udi em sistemas operativos de 32 bits. Por esta razão, deve utilizar um sistema operativo de 64 bits.

    Nota

    As versões IntelItanium (IA-64) do sistema operativo Windows não são suportadas em ambientes de desenvolvimento udi.

    Para obter mais informações sobre os sistemas operativos que Visual Studio suportes de 2010, consulte os requisitos do sistema para cada edição na Documentação Visual Studio.

  • Microsoft .NET Framework versão 4.0 (exigida por Visual Studio 2010)

  • Idioma C++ (a linguagem utilizada no alargamento das páginas do Assistente UDI)

  • Outras línguas que o WPF suporta, tais como C#, Visual Basic .NET ou C++/Common Language Infrastructure, que são usadas para estender editores de páginas de assistentes do UDI Wizard Designer

    Nota

    O código-fonte de amostra para os editores de página de assistentes do UDI Wizard Designer está escrito em C#. Instale o idioma C# se quiser utilizar o código-fonte da amostra.

Configure o Ambiente de Desenvolvimento da UDI

Após a reunião dos requisitos necessários para o desenvolvimento da UDI, execute os seguintes passos para configurar o ambiente de desenvolvimento da UDI:

  1. Instale Visual Studio 2010.

    Certifique-se de que instala o idioma C++ e qualquer outra língua que o WPF suporte.

    Nota

    O código-fonte de amostra para as páginas de editores do UDI Wizard Designer está escrito em C#. Instale o idioma C# se quiser utilizar o código-fonte da amostra.

    Para obter mais informações sobre a instalação Visual Studio 2010, consulte instalar Visual Studio.

  2. Instale o MDT.

    Para obter mais informações sobre como instalar o MDT, consulte a secção, "Instalar ou atualizar para MDT", no documento MDT Utilizando o Conjunto de Ferramentas de Implementação da Microsoft.

  3. Em Windows Explorer, crie local_folder (onde local_folder seja qualquer pasta localizada numa unidade local no computador de desenvolvimento).

  4. Copie a pasta installation_folder\SDK para local_folder (onde installation_folder é a pasta na qual instalou MDT e local_folder é qualquer pasta localizada numa unidade local no computador de desenvolvimento).

    Copia a pasta SDK para outro local porque o MDT está instalado na pasta Ficheiros de Programas, que não pode ser escrita sem permissões elevadas. Copiar a pasta SDK para outro local permite modificar os ficheiros da pasta SDK sem exigir permissões elevadas.

  5. Copie a pasta installation_folder\Modelos\Distribuição\Ferramentas para local_folder (onde installation_folder é a pasta em que instalou MDT e local_folder é a pasta que criou anteriormente no processo).

  6. Mude o nome da pasta local_folder\Tools para local_folder\OSDSetupWizard (onde local_folder é a pasta que criou anteriormente no processo).

    Quando concluída, a estrutura da pasta por baixo local_folder deve parecer a estrutura da pasta ilustrada na Figura 2 (onde local_folder é a pasta que criou anteriormente no processo e é mostrada como UDIDevelopment na figura).

    Figura 2. Estrutura de pasta para desenvolvimento UDI Figura 2. Estrutura de pasta para o desenvolvimento de UDI

    Figura 2. Estrutura de pasta para o desenvolvimento de UDI

Verifique o Ambiente de Desenvolvimento da UDI

Quando o ambiente de desenvolvimento da UDI estiver configurado, verifique se o ambiente de desenvolvimento da UDI está configurado corretamente, garantindo que os projetos de amostras se constroem corretamente em Visual Studio 2010.

Verifique se o ambiente de desenvolvimento da UDI está configurado corretamente, determinando se:

Verifique se o Project samplePage se constrói corretamente

O projeto SamplePage fornece um exemplo de como criar uma página de assistente personalizada para o Assistente UDI. Para obter mais informações sobre o projeto SamplePage, consulte rever a Solução de Visual Studio SamplePage.

Para verificar se o projeto SamplePage se constrói corretamente

  1. Comece Visual Studio 2010.

  2. Abra o projeto SamplePage.

    O projeto SamplePage reside na pasta local_folder\SDK\UDI\SamplePage (onde local_folder é a pasta que criou anteriormente no processo).

  3. Em Visual Studio 2010, no Solution Explorer, clique com o botão direito no projeto SamplePage e, em seguida, clique em Propriedades.

    Aparece a caixa de diálogo samplePage Property Pages.

  4. Na caixa de diálogo SamplePage Property Pages, vá para Configuration Properties/Depurgging.

  5. Nas propriedades de depurar, em Configuração, selecione Todas as Configurações.

  6. Nas propriedades de Debugging, sob comando, escreva $(TargetDir)\OSDSetupWizard.exe.

  7. Nas propriedades de Debugging, em Diretório de Trabalho, tipo $(TargetDir).

  8. Na caixa de diálogo samplePage Property Pages, vá a Configuration Properties/Build Events/Post-Build Event.

  9. Nas propriedades do Evento Pós-Construção, sob Linha de Comando, digite o seguinte:

    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\*.*" "$(TargetDir)"  
    xcopy /y /i "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\en-us" "$(TargetDir)en-us"  
    copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\OSDResults\Images\UDI_Wizard_Banner.bmp" "$(ProjectDir)header.bmp"  
    copy /y "$(ProjectDir)Config.xml" "$(TargetDir)"  
    copy /y "$(ProjectDir)header.bmp" "$(TargetDir)header.bmp"  
    
  10. Na caixa de diálogo SamplePage Property Pages, clique em OK.

  11. Salve o projeto.

  12. A partir do menu Debug, clique em Iniciar Debugging.

    A caixa de diálogo microsoft Visual Studio aparece indicando que a fonte está desatualizada e pergunta se pretende construir o projeto.

  13. Na caixa de diálogo microsoft Visual Studio, clique em Sim.

    A caixa de diálogo de informação sem depuração aparece informando-o de que não há informação de depuração disponível para OSDSetupWizard.exe.

  14. Na caixa de diálogo de informação de não depuração, clique em Sim.

    O Assistente UDI abre com a página de assistente personalizada exibida.

  15. Verifique se pode selecionar um valor em Escolha a sua localização.

  16. No Formulário de Página de Página de Amostra, clique em Cancelar.

    Aparece a caixa de diálogo 'Cancelar' '' 'Cancelar' ('Cancelar) de diálogo.

  17. Na caixa de diálogo 'Cancelar' 'Cancelar' 'Cancelar', clique em Sim.

  18. Perto Visual Studio 2010.

Verifique se o Project do SampleEditor constrói corretamente

O projeto SampleEditor fornece um exemplo de como criar um editor de página de assistente personalizado para o UDI Wizard Designer. Para obter mais informações sobre o projeto SampleEditor, consulte a Solução de Visual Studio SamplePage.

Para verificar se o projeto SampleEditor constrói corretamente

  1. Comece Visual Studio 2010.

  2. Abra o projeto SampleEditor.

    O projeto SampleEditor reside na pasta local_folder\SDK\UDI\SampleEditor (onde local_folder é a pasta que criou no início do processo).

  3. Em Visual Studio 2010, no Solution Explorer, selecione o projeto SampleEditor.

  4. A partir do menu Project, clique em Adicionar Referência.

    Abre-se a caixa de diálogo 'Adicionar Referência'.

  5. Na caixa de diálogo 'Adicionar Referência', clique no separador Procurar.

  6. No separador Procurar, vá a installation_folder\Bin (onde installation_folder é a pasta em que instalou MDT). Selecione os seguintes ficheiros e, em seguida, clique em OK:

    • Microsoft.Enterprise.UDIDesigner.Common.dll

    • Microsoft.Enterprise.UDIDesigner.DataService.dll

    • Microsoft.Enterprise.UDIDesigner.Infrastructure.dll

    • Microsoft.Practices.Prism.dll

    • Microsoft.Practices.ServiceLocation.dll

    • Microsoft.Practices.Unity.dll

    • RibbonControlsLibrary.dll

    Nota

    Pode selecionar vários ficheiros no separador Procurar, mantendo a tecla CTRL enquanto clica nos ficheiros.

  7. No Solution Explorer, aceda ao SampleEditor/References.

  8. Verifique se nenhuma das referências tem quaisquer avisos ou erros.

  9. No Solution Explorer, clique com o botão direito no projeto SampleEditor e, em seguida, clique em Propriedades.

    Aparece a caixa de diálogo SampleEditor Property Pages.

  10. Na caixa de diálogo SampleEditor Property Pages, clique no separador Debug.

  11. No separador Debug, clique em Iniciar programa externo.

  12. No programa externo Iniciar, escreva installation_folder\Bin\UDIDesigner.exe _ (onde _installation_folder é a pasta em que instalou MDT) e, em seguida, clique em OK.

    Dica

    Pode clicar no botão elipse (...) para navegar na pasta e selecionar UDIDesigner.exe.

  13. No menu Ficheiro, clique em Guardar Tudo.

  14. Copie o ficheiro local_folder\SDK\SamplePage\SamplePage.dll.config para a pasta installation_folder\Bin\Config (onde local_folder é a pasta que criou no computador de desenvolvimento anteriormente no processo de configuração e installation_folder é a pasta na qual instalou MDT).

  15. Em Visual Studio 2010, a partir do menu Debug, clique em Iniciar Debugging.

    O UDI Wizard Designer começa.

  16. No UDI Wizard Designer, na Fita, clique em Abrir.

    Aparece a caixa de diálogo Aberta.

  17. Na caixa de diálogo Open, abra o ficheiro \SDK\SamplePage\SamplePage\Config.xml local_folder (onde local_folder é a pasta que criou no computador de desenvolvimento anteriormente no processo de configuração).

    O ficheiro Config.xml abre e o Grupo de Estágios Personalizados é apresentado no painel de detalhes.

  18. No painel de detalhes, clique no separador Configurar.

  19. Reveja as informações de configuração da caixa de localização, incluindo as seguintes:

    • Botão desbloqueado, com o qual ativa ou desativa a caixa de localização

    • Caixa de valor predefinido, na qual introduz um valor predefinido a ser exibido na caixa de Localização

    • Nome de exibição amigável visível na página de resumo, na qual introduz a legenda para as informações exibidas na página Resumo

    • Caixa de lista de localização, que inclui uma lista de possíveis localizações

  20. Feche o Designer de Feiticeiros UDI.

  21. Perto Visual Studio 2010.

Rever os exemplos da UDI SDK

Antes de iniciar o desenvolvimento, reveja os exemplos fornecidos na UDI SDK. Utilize as informações deste guia e o código fonte nos exemplos para o ajudar a criar as suas próprias páginas de assistentes personalizadas UDI e editores de páginas de assistentes.

Ver os exemplos da UDI SDK, revendo os:

Reveja o Conteúdo da Pasta SDK

Durante a configuração do ambiente de desenvolvimento UDI, copiou a pasta SDK da pasta na qual instalou MDT para outra pasta que criou. A tabela 1 lista as pastas imediatamente abaixo da pasta SDK e fornece uma breve descrição de cada uma delas.

Tabela 1. Pastas no UDI SDK

Pasta Esta pasta contém
Inclusões Os ficheiros de cabeçalho C++ necessários para criar páginas de assistente personalizadas para o Assistente UDI
Bibliotecas Os ficheiros da biblioteca C++ que estarão ligados à sua página personalizada; há versões de 32 bits e 64 bits das bibliotecas de ligações estáticas. Nota: As versões itanium das bibliotecas (IA-64) não estão disponíveis.
Amostradoeditor Um projeto Visual Studio para a construção de um editor personalizado usado para editar a página SamplePage em UDI Wizard Designer, que está escrito em C #
Página de amostras Um projeto Visual Studio para a construção de uma página de assistente UDI personalizada, que está escrita em Visual C++

Rever a Solução de Visual Studio samplePage

Antes de começar a criar as suas páginas de assistentes personalizadas e editores de páginas de assistentes, execute as seguintes tarefas para preparar o ambiente de desenvolvimento UDI:

Reveja o ciclo de vida da página do assistente

Uma página de assistente UDI tem métodos que correspondem a cada fase (ou fase) do ciclo de vida da página. Como parte da criação da sua página de assistente personalizado, precisa de substituir estes métodos com o seu código. O quadro 2 lista os métodos que necessitará de substituir e fornece uma breve descrição de cada método, incluindo quando utilizar o método no ciclo de vida da página do assistente.

Tabela 2. Métodos em um ciclo de vida página de assistente

Método Descrição
OnWindowCreated Este método é chamado uma vez, após a criação da janela da página.

Para este método, escreva código que inicialize a página pela primeira vez e só precisa de ser executada uma vez. Por exemplo, utilize este método para inicializar campos ou para ler informações de configuração a partir dos elementos Setter no ficheiro de configuração do Assistente UDI.
OnWindowShown Este método é chamado de cada vez que a página é exibida (mostrada) no Assistente UDI. Chama-se a primeira vez que a página é exibida e cada vez que navega para a página clicando em Seguinte ou De volta no assistente.

Para este método, escreva código que prepare a página a ser exibida — por exemplo, ler variáveis de memória, variáveis de sequência de tarefas ou variáveis ambientais e, em seguida, atualizar a página com base em quaisquer alterações a essas variáveis.
Evento OnCommonControlEvent Este método pode ser chamado sempre que a página do assistente é exibida e recebe uma mensagem WM_NOTIFY de uma criança (normalmente, controlos comuns).

Para este método, escreva código que lida com WM_NOTIFY com base na mensagem de notificação. Por exemplo, pode querer responder a eventos de um controlo comum, como responder a cliques ou cliques duplos para um controlo TreeView.
OnUnhandledEvent Este método é chamado sempre que ocorre uma mensagem de janela não manipulada para a sua página de assistente. Este método proporciona a oportunidade de intercetar e lidar com estas mensagens de janela de outra forma não manipuladas.

Para este método, escreva código que manuseie as mensagens de janela que são pertinentes para a sua página de assistente. Normalmente, não precisará de anular este método.
OnNextClicked Este método é chamado quando clica em Seguinte no assistente.

Para este método, escreva código que execute as ações necessárias antes de passar para a página de assistente seguinte — por exemplo, realizando validação que pode demorar muito tempo. Se a validação falhar, pode cancelar o pedido seguinte e exibir uma mensagem.
OnWindowHidden Este método é chamado de cada vez que a página é ocultada quando a página de assistente anterior ou seguinte é mostrada.

Para este método, escreva código que execute quaisquer ações antes de a página ser ocultada, antes de outra página ser mostrada. Normalmente, não precisará de anular este método.

Reveja o exemplo de Amostragem

Reveja o exemplo samplePage utilizando a seguinte lista, que representa a sequência de eventos durante o ciclo de vida da página do assistente do exemplo SamplePage:

  1. O Assistente UDI, OSDSetupWizard.exe, lê as informações de configuração do ficheiro de configuração do Assistente UDI no exemplo (o ficheiro Config.xml) conforme descrito no Passo 1: O Assistente UDI (OSDSetupWizard.exe) Lê o ficheiro Config.xml.

  2. O Assistente UDI carrega os DLLs necessários para cada página de assistente listada no ficheiro de configuração do Assistente UDI, conforme descrito no Passo 2: O Assistente UDI carrega o DLL para a página de assistente personalizado.

  3. O Assistente UDI exibe a página de assistente personalizada e permite a interação de controlo desejada, tal como descrito no Passo 3: O Assistente UDI exibe a página de assistente personalizado.

  4. Quando a página de assistente personalizada tiver recolhido as informações, execute todas as tarefas necessárias antes de clicar em Seguinte para proceder ao próximo assistente, tal como descrito no Passo 4: O botão seguinte é clicado na página de assistente personalizado.

Passo 1: O Assistente UDI (OSDSetupWizard.exe) lê o ficheiro Config.xml

Quando o Assistente UDI (OSDSetupWizard.exe) começa, por predefinição lê o ficheiro de configuração do Feiticeiro UDI, que é o ficheiro UDIWizard_Config.xml — o ficheiro de configuração primária para o Assistente UDI.

Nota

O exemplo utiliza o ficheiro Config.xml como ficheiro de configuração. No MDT, o ficheiro de configuração predefinido é o ficheiro UDIWizard_Config.xml, que reside na pasta Scripts no pacote ficheiros MDT para configuração.

Pode anular o ficheiro de configuração predefinido que o Assistente UDI utiliza modificando o passo da sequência de tarefas UDI Wizard para utilizar o parâmetro /definição. Para obter mais informações sobre a substituição do ficheiro de configuração predefinido que o Assistente UDI utiliza, consulte "Override the Configuration File That the UDI Wizard Uses".

Os elementos de alto nível no ficheiro Config.xml são os

  • Elemento DLLs

  • Elemento de estilo

  • Elemento de páginas

  • Elemento de Grupos de Estágios

    Para obter mais informações sobre o esquema do ficheiro de configuração do Assistente UDI e cada um destes elementos, consulte o Esquema de Esquema de Configuração do Assistente UDI.

    O Assistente UDI analisa o elemento DLLs à procura do .dll ficheiros para carregar. No exemplo, estão listados dois ficheiros .dll: SamplePage.dll e SharedPages.dll. Estes ficheiros .dll devem residir na mesma pasta que OSDSetupWizard.exe — a pasta da plataforma Tools \ (onde a plataforma é x86 para a versão de 32 bits ou x64 para a versão de 64 bits).

    O Assistente UDI digitaliza o elemento Páginas à procura das páginas definidas. No exemplo, são definidas duas páginas: Custom e SummaryPage. O atributo Tipo do elemento Página é definido no ficheiro PageClassIDs.h e define de forma única o tipo de página personalizada.

    No exemplo, o tipo definido é Microsoft.SamplePage.LocationPage. Para a sua página personalizada, substitua o seguinte para evitar eventuais conflitos com outras páginas que possa criar no futuro:

  • O nome da sua organização no lugar da Microsoft.

  • O nome do seu projeto no lugar do SamplePage.

  • O nome da página do seu assistente personalizado no local do LocationPage.

Passo 2: O assistente UDI carrega o DLL para a página de assistente personalizado

Quando o Assistente UDI carrega o seu DLL, chama a função RegisterFactories, que deve ser implementada no seu ficheiro .dll. No exemplo, esta função é implementada no ficheiro dllmain.ccp. Cada página de assistente que criar deve implementar a função RegisterFactories.

A função RegisterFactories é utilizada para registar a classe de fábrica da sua página de assistente com o registo de fábrica de classe para o Assistente UDI. As fábricas de classe são classes que podem criar um exemplo de outra classe. A função RegisterFactories cria uma nova instância de uma classe de fábrica e passa essa classe para o registo de fábrica de classe para o Assistente UDI, o que torna essa classe de fábrica disponível para o assistente. O Assistente UDI procura uma classe de fábrica registada com um ID que corresponda ao atributo Tipo do elemento Página para a página de assistente personalizado.

No exemplo, o ID é definido como ID_Location no ficheiro PageClassIds.h como Microsoft.SamplePage.LocationPage, que corresponde ao atributo Tipo para o elemento Página no ficheiro Config.xml. ID_Location é aprovado como um parâmetro na função RegisterFactories implementado no ficheiro dllmain.ccp.

Pode criar uma função utilizando o modelo de função Register_ nome para simplificar a criação de uma nova instância de fábrica e registar o caso recém-criado. O valor do nome fornecido através do modelo de função Registar deve implementar a interface iClassFactory. A ClasseFactoryImpl trata da maioria dos detalhes para a implementação de uma fábrica de classe.

Também pode utilizar a função RegisterFactories para registar tipos de tarefas e tipos de validadores. Para obter mais informações, consulte o seguinte:

Nota

O exemplo contém e regista apenas a única página de assistente personalizado. O exemplo não inclui tarefas personalizadas ou validadores e por isso não regista quaisquer tarefas personalizadas ou validadores.

Passo 3: O assistente UDI exibe a página de assistente personalizado

A página de assistente personalizado no exemplo é definida no ficheiro .cpp LocationPage. As páginas de assistente são derivadas de classes de modelos que fornecem grande parte da funcionalidade que uma página tem. Todas as páginas de assistentes devem derivar da Classe modelo WizardPageImpl, que implementa a Interface IWizardPage. Cada página de assistente pode implementar outras classes de modelo opcionais e interfaces correspondentes com base nas necessidades da página.

A Classe Modelo WizardPageImpl tem várias interfaces úteis que podem ajudá-lo a escrever páginas de assistentes personalizadas. Implemente a Classe modelo WizardPageImpl como a classe base para a sua página de assistente personalizado.

Para uma lista dos disponíveis:

  • Aulas de modelo para páginas de assistente, ver classes de ajudante de página de assistente de assistente

  • Interfaces para as classes de modelo de página de assistente, ver Interfaces de Página de Assistente

    A página de assistente personalizada no exemplo é derivada da Classe modelo WizardPageImpl e implementa a Interface IWizardPage. Além disso, a página de assistente personalizada implementa a interface IFieldCallback. Ambos são implementados no ficheiro .cpp LocationPage.

    A página de assistente personalizada do exemplo sobrepõe-se aos seguintes métodos:

  • OnWindowCreated. O método OnWindowCreated na página de assistente de exemplo chama os seguintes métodos:

    • AddField. Este método relaciona o controlo de caixa IDC_COMBO_LOCATION no recurso IDD_LOCATION_PAGE com o elemento dado denominado Localização no ficheiro Config.xml.

      Além do método AddField, pode utilizar os métodos AddRadioGroup e AddToGroup para suportar outros controlos e comportamentos.

      Nota

      Certifique-se de que liga para o método AddField, AddRadioGroupou AddToGroup antes de ligar para o método InitFields.

    • InitFields. Utilize este método para inicializar os campos (controlos) que adicionou à forma. O ponteiro da página é um parâmetro. No exemplo, este ponteiro é passado, que se refere à página atual.

      Nota

      Para suportar a utilização deste ponteiro, tem de implementar a interface IFieldCallback para além das interfaces que a Classe de Modelo WizardPageImpl suporta.

      A interface IFieldCallback chama o método SetFieldDefault, que é usado para definir os valores padrão para controlos que não sejam a caixa de texto e controlos de caixa de verificação. No exemplo, o método SetFieldDefault define o índice inicial do controlo da caixa de combinação com base no valor predefinido especificado no elemento Predefinido para o elemento Campo no ficheiro Config.xml.

      O método OnWindowCreated configura o controlador de formulários utilizando a interface IFormController. Para obter mais informações sobre a configuração do controlador de formulários, consulte configurar o formulário.

  • InitLocations. Este método povoa a caixa de combinação da lista de locais no ficheiro Config.xml. Os elementos DataItem do elemento Data e crianças que o ficheiro Confg.xml fornecem a lista de valores possíveis.

  • OnNextClicked. Este método executa as seguintes tarefas:

    • Atualiza a variável da sequência de tarefas TSLocation com o valor selecionado na caixa de combinação utilizando o método SaveFields

    • Adiciona informações que serão mostradas na página Resumo usando o método SaveFields

Passo 4: O próximo botão é clicado na página do assistente personalizado

Quando o utilizador completa os campos na página de assistente personalizado, clica em Seguinte, que chama o método OnNextClicked. O método OnNextClicked executa todas as tarefas necessárias antes de avançar para a página de assistente seguinte, tal como registar quaisquer alterações de configuração efetuadas na página de assistente personalizada.

Para a página de assistente personalizado, a substituição do método OnNextClicked é implementada no ficheiro LocationPage.ccp. No método OnNextClicked na página de assistente personalizado, os seguintes métodos são chamados:

  1. InitSection. Este método inicializa o cabeçalho (legenda da etiqueta) para os dados resumidos apresentados na página Resumo. Normalmente, pode definir este valor utilizando a função DisplayName(). Os dados associados a esta legenda são guardados utilizando o método SaveFields.

  2. SaveFields. Este método guarda os valores de campo para variáveis de sequência de tarefas e para os dados apresentados na página Resumo.

Reveja a Solução de Visual Studio SampleEditor

Antes de começar a criar as suas próprias páginas de assistentes personalizadas e editores de páginas de assistentes, execute os seguintes passos para preparar o ambiente de desenvolvimento UDI:

Reveja a Arquitetura do Designer de Feiticeiros UDI

O UDI Wizard Designer foi desenvolvido usando WPF, Prism e Unity. O UDI Designer é utilizado para editar o ficheiro de configuração do Feiticeiro UDI (UDIWizard_Config.xml), que o Feiticeiro UDI (OSDSetupWizard.exe) lê em tempo de execução. O elemento Páginas no ficheiro de configuração do Assistente UDI contém uma lista de páginas que tem um elemento página separado para cada página de assistente.

Quando edita as definições de configuração para uma página de assistente, o UDI Wizard Designer carrega o editor de página personalizado que corresponde ao tipo de página de assistente. Os editores de página de assistente personalizado são desenvolvidos como controlos do utilizador WPF. As páginas de editores de página de assistente personalizado usam o padrão de design Model-ViewModel (MVVM) para WPF.

O padrão de design MVVM ajuda a separar a interface do utilizador (UI; apresentação) dos dados apresentados. Os dados são uma fachada sobre o elemento Página no ficheiro de configuração do Assistente UDI (o ficheiro Config.xml no exemplo), que é acedido utilizando a propriedade CurrentPage da interface IDataService.

O UDI Wizard Designer utiliza a DependencyAttribute para obter acesso à classe DataService com base no quadro de injeção de dependência na Unidade. Para obter mais informações sobre o quadro de interjeição de dependência em Unidade, consulte Injetar Alguma Vida nas Suas Aplicações — Conhecer o Bloco de Aplicações de Unidade.

Rever componentes configurais de uma página de assistente udi

À medida que cria a sua página de assistente personalizado, algumas das definições de configuração podem ser definidas em código e não podem ser alteradas depois de ter compilado a página. No entanto, para outras definições de configuração, será necessário permitir que essas definições de configuração sejam alteradas utilizando o UDI Wizard Designer.

Normalmente, as definições de configuração que pretende configurar utilizando o UDI Wizard Designer são guardadas no ficheiro de configuração do Assistente UDI (o ficheiro Config.xml no exemplo). No entanto, também pode criar o seu próprio ficheiro de configuração separado, se necessário. Um exemplo de utilização de um ficheiro de configuração separado é o ficheiro UDIWizard_Config.xml.app, que a tarefa De Descoberta de Aplicações e o tipo de página de assistente do ApplicationPage utilizam.

Segue-se uma lista das configurações típicas de configuração que pode gerir utilizando o UDI Wizard Designer:

  • Campo. Os campos de utilização permitem que os utilizadores forneçam informações. Os campos aparecem como elementos de Campo no ficheiro de configuração do Assistente UDI (UDIWizard_Config.xml), que contém as definições de configuração de cada campo. O editor de página de assistente correspondente precisa de fornecer um método para editar as definições de configuração de campo para o campo utilizando o FieldElementControl.

  • Propriedades. Os setters ajudam a criar propriedades para entidades na página, tais como páginas no elemento Página, campos no elemento Campo ou dados nos elementos Data ou DataItem. Configura propriedades nos elementos Setter. Adicione um elemento Setter separado para cada propriedade que pretende definir. Edita as propriedades utilizando o SetterControl e configura outros elementos Setter utilizando outros controlos.

  • Dados. Os dados são utilizados para armazenar informações para utilização pela página de assistente e outros componentes. Pode definir dados para páginas ou campos utilizando os elementos Data ou DataItem. Os dados podem ser definidos numa estrutura plana ou hierárquica através da utilização adequada dos elementos Data Ou DataItem. A Config.xml no exemplo do SDK mostra como construir estruturas de dados planas.

    O editor de página de assistente personalizado que cria deve ser capaz de gerir estas definições de configuração.

Reveja o Exemplo da Página do Editor

O exemplo do EditorPage é utilizado para configurar as definições de configuração da página de assistente do SamplePage no ficheiro de configuração do Assistente UDI. O exemplo do EditorPage tem os seguintes componentes primários:

  • UI para configurar as definições da caixa de combinação de localização

  • UI para adicionar ou editar uma localização na lista de possíveis localizações, que são mostradas na caixa de combinação localização

  • Definições de configuração lidas e guardadas no ficheiro de configuração do Assistente UDI

  • Código de suporte para os outros componentes

    Reveja o exemplo do EditorPage em Visual Studio executando os seguintes passos:

  1. Reveja como o editor de página de assistente sampleEditor é carregado e inicializado no UDI Wizard Designer, conforme descrito no Revisão Wizard Page Editor Loading and Initialization.

  2. Reveja o UI utilizado para editar a caixa de combinação de localização nos ficheiros LocationPageEditor.xaml e LocationPageEditor.xaml.cs tal como descrito no Review the User Interface Used to Configure the Location Combo Box.

  3. Reveja o UI utilizado para adicionar ou editar localizações à lista nos ficheiros AddEditLocationView.xaml e AddEditLocationView.xaml.cs tal como descrito no Review the User Interface Used to Modificar a Lista de Possíveis Localizações.

  4. Reveja o código utilizado para gerir as informações de configuração guardadas no ficheiro de configuração do Assistente UDI, tal como descrito na Revisão do Código Utilizado para Gerir informações de configuração.

Rever carregamento e inicialização do editor de página de assistentes

Os editores de página de assistente personalizado são carregados conforme exigido pelo UDI Wizard Designer. Os ficheiros de configuração do UDI Wizard Designer são carregados quando o UDI Wizard Designer começa. O UDI Wizard Designer analisa a pasta install_folder\Bin\Config (onde install_folder é o nome da pasta onde o MDT está instalado) para ficheiros que tenham uma extensão de ficheiro .config.

Durante a configuração do ambiente de desenvolvimento UDI, copiou o ficheiro SamplePage.dll.confg para a pasta install_folder\Bin\Config. Quando iniciar o UDI Wizard Designer, o ficheiro SamplePage.dll.confg é encontrado e carregado.

O UDI Wizard Designer utiliza os seguintes atributos do elemento Página no ficheiro SamplePage.dll.confg para carregar e rubricar o exemplo do EditorPage:

  • DesignerAssembly. Este atributo determina o nome do DLL a ser carregado. Este DLL tem de ser colocado na mesma pasta que o ficheiro UDIDesigner.exe, que é a pasta install_folder\Bin (onde install_folder é o nome da pasta na qual o MDT está instalado).

  • DesignerType. Este atributo é o nome do tipo Microsoft .NET da classe que contém o controlo do utilizador WPF.

  • Tipo. Utilize este atributo para configurar o tipo de página da página de assistente personalizada, que o Assistente UDI carrega. O UDI Wizard Designer utiliza este atributo para localizar o elemento página apropriado no ficheiro de configuração do Assistente UDI.

  • Dll. Utilize este atributo para configurar o elemento DLL no ficheiro de configuração do Assistente UDI, que o UDI Wizard Designer cria.

  • Descrição. Utilize este atributo para fornecer informações sobre o editor da página do assistente. O valor deste atributo é mostrado na caixa de diálogo Add New Page no UDI Wizard Designer, que é utilizado para adicionar a página de assistente à "Page Library".

  • DisplayName. Utilize este atributo para fornecer o nome da página de assistente personalizada que é exibida no UDI Wizard Designer. O valor deste atributo é mostrado na caixa de diálogo Add New Page no UDI Wizard Designer, que é utilizado para adicionar a página de assistente à "Page Library".

    No exemplo, o tipo de página de assistente personalizado samplePage é o Microsoft.SamplePage.LocationPage, que é guardado no ficheiro Config.xml. O ficheiro Config.xml reside na pasta local_folder\SDK\SamplePage\SamplePage (onde local_folder é a pasta que criou no computador de desenvolvimento anteriormente no processo de configuração).

Reveja a interface de utilizador utilizada para configurar a Caixa de Combo de Localização

Quando o editor da página de assistente é carregado e inicializado, o editor de página de assistente sampleEditor é carregado quando uma página com um tipo de Microsoft.SamplePage.LocationPage é editada. A UI para o editor de página está armazenada no ficheiro LocationPageEditor.xaml.

Se examinar a UI no separador Design e o código no separador XAML, poderá ver a relação entre a UI gráfica e os elementos e atributos no IDL extensível de marcação de aplicações (XAML).

Por exemplo, se rever o elemento Controls:FieldElementControl no XAML, poderá ver como isso se relaciona com o layout da UI correspondente. Utilize o elemento Controle de Controlo de Campo:FieldElement para definir o controlo FieldElementControl.

Os parâmetros de ligação no ficheiro XAML ligam os campos do editor da página de amostra com as informações no ficheiro de configuração do assistente UDI. Por exemplo, o código que se segue liga a caixa de texto de valor predefinido com o elemento Predefinido no ficheiro de configuração do assistente UDI (Config.xml no exemplo):

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

Para mais informações, consulte Como: Disponibilizar dados para encadernação em XAML.

Utilize o elemento Views:CollectionTControl.ColumnCollectionView no XAML para editar a lista de locais disponíveis na vista da grelha. Utiliza o controlo CollectionTControl para exibir a vista da grelha e ligar a vista da grelha ao elemento Data com o nome Localização no ficheiro de configuração UDI.

Reveja a interface de utilizador utilizada para modificar a lista de possíveis localizações

A UI para modificar a lista de possíveis localizações consiste em:

Rever menu sensível ao contexto e botões de fita para modificar a lista de locais

Quando clica à direita na caixa de listas que contém a lista de locais, é apresentado um menu sensível ao contexto. A Fita tem botões correspondentes que lhe permitem executar as mesmas tarefas. O elemento de controlo Views:CollectionsTControl no ficheiro LocationPageEditor.xaml define os métodos chamados com base na ação tomada e nas propriedades que definiu da seguinte forma:

  • SelectItem. Esta propriedade ligada a dados é ativada quando o utilizador seleciona um item da lista. Esta propriedade está ligada à propriedade CurrentLocation no modelo view, que está localizado no ficheiro LocationPageEditorViewModel.cs e utilizado pelo controlo CollectionTControl para passar o item selecionado quando edita ou remove um item existente.

  • AddItemAction. Esta ação é realizada quando o utilizador clica na opção Adicionar Item a partir do menu sensível ao contexto ou dos botões correspondentes na Fita. Existe uma ligação de dados a uma propriedade no modelo de visualização que devolve o objeto AddLocationAction. Este objeto é o método AddLocationCallback, localizado no ficheiro LocationPageEditorViewModel.cs e apresenta a caixa de diálogo no ficheiro AddEditLocationView.xaml.

  • EditItemAction. Esta ação é realizada quando o utilizador clica na opção Editar Item a partir do menu sensível ao contexto. Existe uma ligação de dados a uma propriedade no modelo de visualização que devolve o objeto EditLocationAction. Este objeto é o método EditLocationCallback, localizado no ficheiro LocationPageEditorViewModel.cs e apresenta a caixa de diálogo no ficheiro AddEditLocationView.xaml.

  • Remover Aacção. Esta ação é realizada quando o utilizador clica na opção 'Remover Item' a partir do menu sensível ao contexto. Existe uma ligação de dados a uma propriedade no modelo de visualização que devolve o objeto RemoveAction. Este objeto é o método EditLocationCallback, localizado no ficheiro LocationPageEditorViewModel.cs e mostra uma mensagem que confirma a eliminação da localização.

Reveja a Caixa de Diálogo para Adicionar ou Editar Localizações

Se adicionar uma nova localização à lista de locais ou editar uma localização existente, é apresentada uma mensagem que está no ficheiro AddEditLocationView.xaml. A mensagem é exibida utilizando o método da janela ShowDialogWindow no ficheiro LocationPageEditorViewModel.cs.

A UI no ficheiro AddEditLocationView.xaml consiste em:

  • Um quadro de diálogo chamado DialogFrame, que inclui os seguintes elementos:

    • Um título, que configura usando o atributo DialogTitle da moldura de diálogo

    • Um botão OK, que define o estado de devolução como para a propriedade aprovada para True (O estado de devolução é verificado no método AddLocationCallback no ficheiro LocationPageEditorViewModel.cs para determinar se o utilizador clicou OK.)

    • Um botão Cancelar, que define o estado de devolução como para a propriedade aprovada para falso (O estado de devolução é verificado no método AddLocationCallback no ficheiro LocationPageEditorViewModel.cs para determinar se o utilizador clicou em Cancelar.)

  • Um elemento WPF que contém:

    • Uma etiqueta, que configura usando o atributo Conteúdo

    • Uma caixa de texto, que está ligada ao elemento Dados com o nome Localização no ficheiro de configuração UDI (o ficheiro Config.xml no exemplo)

Rever o código utilizado para gerir informações de configuração

As informações de configuração da sua página de assistente personalizado são armazenadas no ficheiro de configuração do Assistente UDI, que é o seguinte:

  • Config.xml ficheiro no exemplo fornecido com o UDI SDK (este ficheiro contém apenas as definições de configuração para o exemplo.)

  • UDIWizard_Config.xml ficheiro fornecido com MDT, armazenado na pasta installation_folder\Modelos\Distribuição\Scripts (onde installation_folder é a pasta na qual instalou MDT); este ficheiro contém as definições de configuração para todas as páginas e estágios de assistente incorporado

    No exemplo do SampleEditor, a rotina de Localizações ajuda a gerir a informação de configuração e está localizada no ficheiro LocationPageEditorViewModel.cs. A rotina Desío locais retorna uma lista das localizações do ficheiro de configuração do Assistente UDI. Especificamente, a lista devolvida contém um item para cada elemento DataItem no ficheiro de configuração do Assistente UDI.

Criando páginas personalizadas de assistentes udi

O processo de alto nível para criar páginas de assistentes udi personalizadas é o seguinte:

  1. Faça uma cópia da solução SamplePage como ponto de partida.

  2. Coloque os controlos (campos) desejados no formulário.

  3. Escreva código para executar as tarefas apropriadas quando a página do assistente estiver carregada (substitui o método OnWindowCreated), incluindo os seguintes passos:

    1. Inicialize o formulário.

    2. Leia variáveis de memória, variáveis de sequência de tarefas, variáveis ambientais ou informações de ficheiros XML (tais como propriedades de Setter).

  4. Escreva qualquer código para executar as tarefas apropriadas quando a página for mostrada (substituições para o método OnWindowShown), incluindo os seguintes passos:

    1. Ative ou desative os controlos com base na informação lida quando a página foi carregada no passo 3.

    2. Atualizar os controlos com base na informação lida quando então página carregada no passo 3, como a população de controlos com base na informação lida.

  5. Escreva qualquer código para executar as tarefas apropriadas enquanto o utilizador interage com a página de assistente.

  6. Escreva qualquer código para executar as tarefas apropriadas quando o utilizador clicar em seguir no Assistente UDI (substitui o método OnNextClicked), incluindo os seguintes passos:

    1. Atualize quaisquer variáveis de memória, variáveis de sequência de tarefas, variáveis ambientais ou informações de ficheiros XML.

    2. Atualizar as informações da página do resumo (se não for realizada pelos campos na página).

  7. Compilar a solução.

    Certifique-se de que a versão do DLL que cria é a mesma plataforma de processador que a instalação de MDT — especificamente, a plataforma de processador para Windows Ambiente de Pré-instalação (Windows PE). O Assistente UDI pode correr em:

    • O sistema operativo existente no computador-alvo. Pode executar versões de 32 bits da sua página de assistente em sistemas operativos de Windows de 32 ou 64 bits. No entanto, só é possível executar versões de 64 bits da sua página de assistentes em sistemas operativos Windows de 64 bits.

    • Windows PE no computador-alvo. Windows A PE não suporta a execução de aplicações de 32 bits numa versão de 64 bits de Windows PE. Por isso, tens de ter construído uma versão para a tua página de assistente para cada arquitetura de processador de Windows PE que planeias usar.

  8. Copie o DLL para a sua página de assistente personalizada para installation_folder\Modelos\Distribuição\Tools\ pasta da plataforma (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 é para a versão de 64 bits).

  9. Complete os passos para criar editor de página personalizado.

Criando editores de página de assistente personalizado

O processo de alto nível para criar editores de página de assistentes udi personalizados é o seguinte:

  1. Faça uma cópia da solução SampleEditor como ponto de partida.

  2. Crie o UI editor de página primária num ficheiro .xaml.

  3. Adicione as instâncias do controlo FieldElementControl conforme exigido pela página do assistente para ser configurada (se necessário).

  4. Adicione as instâncias do controlo SetterControl conforme exigido pela página do assistente para ser configurada (se necessário).

  5. Adicione as instâncias do controlo CollectionTControl conforme exigido pela página do assistente para ser configurada (se necessário).

  6. Adicione a interface IDataService.

  7. Escreva o código apropriado para atualizar o ficheiro de configuração do Feiticeiro UDI com base nas definições de configuração a configurar utilizando o seu editor de página de assistente personalizado.

  8. Crie caixas de diálogo para crianças num ficheiro .xaml e ligue-as a partir do editor da página principal utilizando a interface IMessageBoxService, conforme exigido pela página do assistente a ser configurada.

  9. Adicione as interfaces apropriadas à Fita do Designer de Assistentes UDI com base nos requisitos da página do assistente a configurar.

  10. Compilar a solução.

    Nota

    Certifique-se de que a versão do DLL que cria é a mesma plataforma de processador que a instalação de MDT. Por exemplo, se instalar a versão de 64 bits do MDT, então construa uma versão de 64 bits do seu editor de página personalizado.

  11. Crie um ficheiro de configuração do UDI Wizard Designer para carregar os DLLs necessários e mapear o editor da página do assistente com a página de assistente correspondente (o ficheiro SamplePage.dll.config no exemplo).

    Para obter mais informações sobre os elementos necessários para realizar o mapeamento entre a página do assistente e o editor da página do assistente, consulte o elemento DesignerMappings, elementos infantis e atributos correspondentes.

  12. Copie o ficheiro de configuração do UDI Wizard Designer que criou no passo anterior para a pasta installation_folder\Bin\Config (onde installation_folder é a pasta na qual instalou a versão MDT).

  13. Copie o DLL para o seu editor de página de assistente personalizado para a pasta installation_folder\Bin (onde installation_folder é a pasta na qual instalou O MDT).

Criação de tarefas UDI personalizadas

As tarefas UDI são DLLs escritas em C++ que implementam a interface ITask. Regista o DLL com a biblioteca de tarefas UDI Wizard Designer criando um ficheiro de configuração do UDI Wizard Designer (.config ficheiro) e colocando-o na pasta installation_folder\Bin\Config (onde installation_folder é a pasta em que instalou O MDT).

Nota

Pode criar um DLL que contenha páginas de assistentes, tarefas e validadores dentro do mesmo ficheiro .dll. Também pode criar um único ficheiro de configuração do UDI Wizard Designer (.config) que contém as definições de configuração para as páginas, tarefas e validadores de assistentes no DLL.

Para criar tarefas UDI personalizadas

  1. Escreva código que implemente a Interface ITask e os seguintes métodos:

    • Nai. Este método é chamado para inicializar a sua tarefa.

    • Executar. Este método é chamado para executar a sua tarefa.

  2. Escreva código que registe a fábrica de classe tarefa personalizada com o registo de fábrica.

  3. Construa a solução para a sua tarefa personalizada.

    Nota

    Certifique-se de que a versão do DLL que cria é a mesma plataforma de processador que a instalação de MDT. Por exemplo, se instalar a versão de 64 bits de MDT, então construa uma versão de 64 bits da sua tarefa UDI personalizada.

  4. Criar um elemento de tarefa sob o elemento TaskLibrary no ficheiro de configuração do UDI Wizard Designer semelhante ao seguinte excerto:

    <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 os elementos de tarefa devem incluir o parâmetro BitmapFilename. Especifique todos os outros parâmetros conforme a tarefa requer. Por exemplo, no excerto anterior, o parâmetro de registo é utilizado para especificar um parâmetro para a localização de um ficheiro de registo.

  5. Copie o ficheiro de configuração do UDI Wizard Designer criado no passo anterior para a pasta installation_folder\Bin\Config (onde installation_folder é a pasta na qual instalou O MDT).

  6. Copie o DLL para a sua tarefa personalizada para a pasta da plataforma installation_folder \Modelos\Distribuição\Tools\ (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 é para a versão de 64 bits).

Criação de Validadores UDI personalizados

Os validadores UDI são DLLs escritos em C++ que implementam a interface IValidator. Regista o DLL com a biblioteca validador do UDI Wizard Designer criando um ficheiro de configuração UDI Wizard Designer (.config ficheiro) e colocando-o na pasta installation_folder\Bin\Config (onde installation_folder é a pasta em que instalou O MDT).

Para criar validadores UDI personalizados

  1. Escrever código que cria uma subclasse da classe BaseValidator e implementa os seguintes métodos:

    • Init(IControl * pControl, IWizardPageContainer * pContainer, IStringProperties * pProperties). O controlador de formulário chama o membro Init para inicializar o validador. Este método deve chamar o método Init para a classe BaseValidator. Normalmente lê quaisquer propriedades definidas para o validador a partir do ficheiro de configuração do Assistente UDI. Por exemplo, o validador InvalidCharactersValidator recupera o valor da propriedade InvalidChars utilizando este método.

    • IsValid. O controlador de formulários chama este método para ver se o controlo contém texto válido. Segue-se um exemplo do método IsValid para um validador que valida que o campo não está vazio:

      BOOL IsValid(LPBSTR pMessage)  
      {  
          __super::IsValid(pMessage);  
      
          _bstr_t text;  
          m_pText->GetText(text.GetAddress());  
          return (text.length() > 0);  
      }  
      
    • Init(IControl * pControl, mensagem LPCTSTR). O controlador de formulário chama este membro para cada toque de tecla e outros eventos para que o validador possa validar o conteúdo do controlo e mensagens atualizadas na parte inferior da página do assistente (ou limpá-las).

      Normalmente, estes são os únicos métodos que precisa de substituir. No entanto, dependendo do validador, poderá ser necessário anular outros métodos na subclasse da classe BaseValidator que cria. Para obter mais informações sobre estes outros métodos, consulte a classe BaseValidator.

  2. Escreva código que registe a classe de tarefa personalizada com a fábrica de registo.

  3. Construa a solução para a sua tarefa personalizada.

    Nota

    Certifique-se de que a versão do DLL que cria é a mesma plataforma de processador que a instalação de MDT. Por exemplo, se instalar a versão de 64 bits de MDT, então construa uma versão de 64 bits da sua tarefa UDI personalizada.

  4. Criar um elemento validador sob o elemento ValidatorLibrary no ficheiro de configuração do UDI Wizard Designer semelhante ao seguinte excerto:

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

    Aviso

    Todos os elementos validadores devem incluir o parâmetro Mensagem. Especifique todos os outros parâmetros conforme exigido pelo validador. Por exemplo, no excerto anterior, o parâmetro NamedPattern é usado para especificar um parâmetro para o nome de um padrão de expressão regular predefinido.

  5. Copie o ficheiro de configuração do UDI Wizard Designer criado no passo anterior para a pasta installation_folder\Bin\Config (onde installation_folder é a pasta na qual instalou O MDT).

  6. Copie o DLL para a sua tarefa personalizada para a pasta da plataforma installation_folder \Modelos\Distribuição\Tools\ (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 é para a versão de 64 bits).

Referência do assistente UDI

Componentes da página do assistente

Pode utilizar qualquer um dos vários componentes pré-construídos para construir as suas páginas personalizadas.

Criar instâncias de componentes

O Assistente UDI utiliza fábricas de classe para criar novos casos de objetos para si. Estas fábricas estão registadas com um registo de fábrica, usando uma corda como chave para a fábrica. Por exemplo, o componente WmiRepository é identificado pela cadeia "Microsoft.Wizard.WmiRepository", que está disponível no ficheiro de cabeçalho IWmiRepository como ID_WmiRepository.

Assumindo que escreveu a sua página como uma subclasse do WizardPageImpl, pode criar uma nova instância de um WmiRepoistory como este:

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

A função CreateInstance é uma função de modelo de tipo seguro para criar novos casos de componentes. PWmiRepository é um ponteiro inteligente, por isso lida com a contagem de referência para si.

Componentes Creatable

Há um conjunto de componentes que pode registar com o registo. O primeiro conjunto de componentes está sempre registado, porque o ficheiro executável principal do UDI Wizard fornece-o. Os outros dois conjuntos de componentes são fornecidos em DLLs "opcionais". Para que estes componentes estejam disponíveis, o DLL deve estar listado na secção DLLs do ficheiro .config XML. O seu código não precisa de saber qual é o executável que contém um componente específico.

A lista de componentes IDs para componentes (o nome do componente é o mesmo que o ID mas sem o ID_ inicial ) registada no registo de fábrica (definido em OSDSetupWizard) é mostrada no quadro 3.

Tabela 3. IDs de componentes

ID Descrição
ID_ACPowerTask (ITask, IWizardComponent) Uma tarefa de pré-voo que garante que o seu computador não está a funcionar sozinho na bateria
ID_AppDiscoveryTask (ITask, IWizardComponent) Uma tarefa especializada para descobrir que itens de software instalou no seu computador
ID_BackgroundTask (IBackgroundTask, IWizardComponent) Pode ser usado para executar uma tarefa em outro fio
ID_CopyFilesTask (ITask, IWizardComponent) Uma tarefa para copiar um ou mais ficheiros
ID_FormController (IFormController) Você vai gostar mais de não precisar de criar um caso por si mesmo, uma vez que a sua página recebe o seu próprio exemplo
ID_InvalidCharactersValidator (IValidator) Garante que nenhum campo de texto contém caracteres de uma lista fornecida ao validador
ID_Logger (ILogger) Você vai gostar mais de não precisar de criar um caso por si mesmo, uma vez que a sua página recebe um ponteiro para o caso compartilhado
ID_NonEmptyValidator (IValidator) Um validador que garante que nenhum campo está vazio
ID_PasswordValidator (IValidator) Um validador que garante que nenhum dois campos de texto têm o mesmo conteúdo
ID_Regex (IRegEx) Avalia expressões regulares, à procura de fósforos
ID_RegExValidator (IValidator) Um validador que valida contra uma expressão regular ou um padrão conhecido
ID_SimpleStringProperties (IStringProperties, ISimpleStringProperties) Fornece uma forma simples de enviar propriedades para tarefas sem usar XML
ID_ShellExecuteTask (ITask, IWizardComponent) Executar um programa externo
ID_SummaryBag (ISummaryBag) Disponível indiretamente a partir da sua página através do método Formulário
ID_TaskManager (ITaskManager, IBackgroundCallback, IWizardComponent) Gere a execução de um conjunto de tarefas e a UI
ID_WmiRepository (IWmiRepositório, IWizardComponent) Permite executar consultas de instrumentação de Windows gestão (WMI)
ID_IXmlDocument (IXmlDocument) Fornece uma fachada para ler e escrever documentos XML

As OSDRefreshWizard.dll definidas, páginas partilhadas e outros componentes de controlo são mostrados nos quadros 4 e 5.

Mesa 4. Controlos do Diretório

ID Descrição
ID_Directory (IDirectory) Uma fachada para obter informações de diretório do sistema de ficheiros

Tabela 5. SharedPages.dll definidos

ID Descrição
ID_ADHelper (IADHelper) Fornece uma fachada para um conjunto limitado de funcionalidades em Ative Directory® Domain Services (AD DS)
ID_CpuInfo (ICpuInfo) Determina se o seu CPU é de 32 ou 64 bits
ID_DomainJoinValidator (IDomainJoinValidator) Tem alguns métodos para verificar se um conjunto de credenciais é permitido aderir a um domínio
ID_DriveList (IDriveList, IBindableList, IWizardComponent) Usa o WMI para obter uma lista de unidades no seu computador
ID_WiredNetworkTask (ITask) Uma tarefa que verifica se está ligado à rede com um adaptador de rede com fios rígidos (em vez de sem fios)

Componentes de controlo

Interage com os controlos na sua página através da função do modelo GetControlWrapper, que dá acesso a um dos tipos de componentes listados no Quadro 6.

Tabela 6. Componentes

Tipos de controlo de diálogo Descrição
CONTROL_CHECK_BOX (ICheckBox) Uma fachada para trabalhar com controlos de caixa de verificação
CONTROL_COMBO_BOX (IComboBox) Uma fachada para comandos de caixas de combinação
CONTROL_GENERIC (IControl) Permite-lhe trabalhar com a maioria dos tipos de controlo para controlar e visível estado
CONTROL_LIST_VIEW (IListView) Uma fachada que fornece acesso às características de um controlo de visualização de lista
CONTROL_PROGRESS_BAR (IProgressBar) Uma fachada para trabalhar com a posição de um controlo de barras de progresso
CONTROL_RADIO_BUTTON (IRadioButton) Uma fachada para trabalhar com controlos de botões de rádio
CONTROL_STATIC_TEXT (IStaticText) Uma fachada que fornece permissão de leitura/escrita para o texto de um controlo, como uma etiqueta ou caixa de texto
CONTROL_TREE_VIEW (ItreeView) Uma fachada para trabalhar com um controle de vista de árvore

Componente da lista de imagens

Este componente é uma fachada para um controlo ImageList na sua página. Cria uma lista de imagens através da interface IListView ou ITreeView.

Componente de controlador de formulários

O assistente cria este componente para si e passa-o para a sua página. Acede-o a partir da sua página utilizando o método Formulário, que a classe base WizardPageImpl implementa.

Componente invalidCharacterValidator

Este é um tipo de validador que pode incluir numa página. O ID é ID_InvalidCharactersValidator (definido em IValidator.h), que tem um valor de texto de "Microsoft.Wizard.Validation.InvalidChars".

Este validador procura uma única propriedade (um elemento Setter no ficheiro .config) chamado InvalidChars, que é uma lista de caracteres que não são permitidos. Verifica os caracteres numa caixa de texto; se o texto contiver caracteres desta lista, o componente reporta falha.

Componente Não-Rivais

Este é um tipo de validador que pode incluir numa página. O ID é ID_NonEmptyValidator (definido em IValidator.h), que tem um valor de texto de "Microsoft.Wizard.Validation.NonEmpty".

Este validador reporta falha se a caixa de texto (ou qualquer outro controlo que suporte IStaticText) tiver um valor de cadeia vazio.

Componente do PasswordValidator

Este é um tipo de validador que pode incluir numa página. O ID é ID_PasswordValidator (definido em IValidator.h), que tem um valor de texto de "Microsoft.Wizard.Validation.Password".

Este validador funciona com dois controlos de texto diferentes (controla o IStaticText) e reporta falha se não contiverem os mesmos valores. Por outras palavras, falha se as caixas de texto password e de palavra-passe não corresponderem.

Como este validador requer dois controlos, precisa de mais configuração do que outros validadores. A configuração pode parecer algo assim:

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

Em primeiro lugar, define o controlo de Palavra-passe como uma "criança" do controlo da palavra-passe. Desta forma, se o controlador de formulário desativar o controlo da palavra-passe, também irá desativar o controlo de Palavras-Passe Confirmar. Em seguida, adicione um validador de palavra-passe ao formulário. Por fim, forneça o validador de palavra-passe com a interface para o controlo de Palavras-Passe Confirmar.

Devido à exigência de dois controlos, deve utilizar o código para configurar este validador em vez do ficheiro .config XML.

Componente RegExValidator

Este é um tipo de validador que pode incluir numa página. O ID é ID_RegExValidator (definido em IValidator.h), que tem um valor de texto de "Microsoft.Wizard.Validation.RegEx".

Este validador compara o conteúdo de um controlo de texto (que suporta o IStaticText) a uma expressão regular e falha se o texto não corresponder à expressão regular.

Em alternativa, pode utilizar este validador com um padrão de nome predefinido. Para utilizar uma expressão regular, o XML deve conter uma propriedade setter chamada Padrão. Se quiser utilizar um padrão nomeado, utilize um setter chamado NamedPattern definido para um dos valores da Tabela 7.

Mesa 7. Setters de padrões nomeados

Padrão Descrição
Nome de utilizador Verifica se o texto é um dos domínios do formulário\utilizador ou user@domain
ComputerName O nome deve ter entre 1 e 15 caracteres e não pode incluir um conjunto de caracteres (tais como: e ?)
Grupo de Trabalho O nome deve ter entre 1 e 15 caracteres e não pode conter um conjunto de caracteres (tais como =, +e ?)

Componente de Reregistria de Fábrica

Este componente acompanha todas as fábricas e serviços de classe. Implementa a interface IFactoryRegistry e está disponível indiretamente através do método do Contentor da sua página. Além disso, o registo carrega dLLs de extensão. Depois de carregar um DLL, o registo procura uma função exportada chamada RegisterFactories. Tem de implementar esta função e nele registar as fábricas de classe para as suas páginas, tarefas e validadores (e quaisquer outras fábricas de classe que pretenda registar). Aqui está um exemplo do projeto da amostra:

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

Componente logger

Este componente está disponível para a sua página através do método Logger (implementado por WizardPageImpl). Utilize este método para escrever entradas no ficheiro de registo. O conteúdo do ficheiro de registo é útil para diagnosticar problemas que os utilizadores podem ter a executar o Assistente UDI.

Componente PropertyBag

O saco de propriedade é um recipiente para variáveis de memória. Está disponível na sua página através do Container()->Properties(). As variáveis de memória são úteis para passar dados temporários entre diferentes páginas.

Componentes TSVariableBag e TSRepository

O componente TSVariableBag permite-lhe ler e escrever variáveis de sequência de tarefas. Mantém os valores na memória até que o utilizador clique em Terminar (por padrão). Pode aceder ao saco TSVariable através do método TSVariables da página (implementado pela classe base WizardPageImpl). Estes componentes registam todas as leituras e escritos de variáveis de sequência de tarefas.

Componente WmiRepository

Este componente fornece uma fachada para trabalhar com consultas de WMI. Pode ligar para a função de ajudante CreateInstance com ID_WmiRepository para obter uma instância deste componente, que suporta a interface IWmiRepository. Este componente devolve os registos de resultados através da interface IWmiIterator.

Aulas de ajudante de página de assistente

Pode criar páginas personalizadas de assistentes UDI utilizando aulas de ajuda incorporadas fornecidas com o UDI SDK. A tabela 8 lista as classes de ajudantes que pode utilizar para criar páginas de assistentes personalizadas.

Mesa 8. Aulas de Ajudante

Classe Ajudante Descrição
ClasseFactoryImpl Classe Esta é uma classe base útil para criar uma fábrica de classe que você pode então registrar com o registo de fábrica.
Classe de modelo de interface Utilize esta classe de modelo quando pretender construir um componente que implemente mais do que uma interface.
Classe Ajudante de Caminho Esta classe fornece operações comuns de arquivo/diretório.
Classe de modelo de ponteiro Esta classe fornece a contagem de referência para a gestão vitalícia em componentes COM. É importante lançar interfaces quando terminar com elas. Esta classe de modelo lida automaticamente com a vida útil.
Classe PUnknown Esta classe é um ponteiro inteligente especificamente para a interface IUnknown. Para todas as outras interfaces, utilize a classe de modelo de ponteiro.
Classe De Ajudante StringUtil Esta classe fornece métodos de ajuda que facilitam o trabalho com cordas.
Classe de modelo subInterface Esta classe base facilita a implementação de um componente que suporta uma interface que herda a partir de outra interface.
Classe de modelo deimplão desconhecido Esta classe lida com a maioria dos detalhes da criação de um componente COM.
Classe de modelo de assistente de feiticeiro Esta classe base é utilizada para criar componentes que necessitem de acesso aos serviços de assistente, como a criação de componentes e a exploração madeireira.
Classe de modelo WizardPageImpl Esta classe base deve ser usada como classe base para todas as páginas de assistentes personalizados

ClasseFactoryImpl Classe

Esta é uma classe base útil para criar uma fábrica de classe que você pode então registrar com o registo de fábrica.

Segue-se um excerto do ficheiro LocationPage.h no projeto de amostra para definir a classe ClassFactoryImpl.

#pragma once  

#include "ClassFactoryImpl.h"  

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

Segue-se um excerto do ficheiro LocationPage.cpp na página de assistente de amostra utilizada para definir a fábrica de classe para a página.

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

Classe de modelo de interface

Utilize esta classe de modelo quando pretender construir um componente que implemente mais do que uma interface — por exemplo:

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

Este código cria uma cadeia de classe base que suporta tanto o IFieldCalback como as interfaces que o WizardPageImpl suporta (que por acaso é IWizardPage).

Classe Ajudante de Caminho

Esta classe fornece operações comuns de arquivo/diretório:

static inline std::wstring GetModulePath(HINSTANCE hModule)  

Também devolve todo o caminho para o ficheiro .exe ou .dll com o manípulo de instância que fornece a este método:

static inline std::wstring GetModuleFilename(HINSTANCE hModule)  

A classe devolve o percurso completo e o nome do ficheiro do .exe e .dll ficheiro com o manípulo de instância que fornece a este método:

static inline std::wstring GetDirectoryName(LPCWSTR fullName)  

. . . ou apenas o caminho enquanto despoja o nome do ficheiro:

static inline std::wstring GetFileName(LPCWSTR fullName)  

Dado um caminho com um nome de ficheiro, a classe de ajudante de caminho devolve apenas o nome do ficheiro:

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

Finalmente, a classe devolve uma nova corda que é o caminho combinado e o nome do arquivo (ou outro caminho).

Classe de modelo de ponteiro

Esta aula é definida em Pointer.h. Como os componentes com a COM utilizam a contagem de referência para a gestão vitalícia, é importante que desbloqueie sempre as interfaces quando termina com elas. A Microsoft fornece uma classe de modelo que lida automaticamente com a vida útil. Por exemplo, se quiser um ponteiro inteligente para uma interface XML, pode escrever algo assim:

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

A primeira linha define o ponteiro inteligente. A segunda linha mostra a recuperação de um ponteiro inteligente através de outra chamada. O & operador liberta sempre uma interface existente se contiver uma e devolve o endereço para o ponteiro interno. Depois de ter recuperado um ponteiro como este, a instância pointer chama Release para si quando a variável fica fora de alcance. A Microsoft recomenda que utilize ponteiros inteligentes em vez de ligar para AddRef e Release manualmente.

Além disso, a classe pointer inteligente Pointer chama o QueryInterface para recuperar outras interfaces para si. Por exemplo, quando o registo de fábrica cria uma nova instância de um componente, tem um código como este:

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

A primeira linha chama o QueryInterface nos bastidores para solicitar a interface IWizardComponent. O ponteiro inteligente resultante será igual a nullptr se o componente não suportar essa interface.

Classe PUnknown

Esta classe é um ponteiro inteligente especificamente para a interface IUnknown. Para todas as outras interfaces, utilize a classe de modelo de ponteiro.

Classe De Ajudante StringUtil

Esta classe é definida em Utilities.h e fornece métodos de ajuda que facilitam o trabalho com cordas:

static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)  

Este método compara duas cordas ignorando o caso (ver quadro 9).

Mesa 9. Classe De Ajudante StringUtil

Devoluções Descrição
0 Cordas combinam, ignorando caso
<0 Primeiro < segundo
>0 Primeiro > segundo

Segue-se um exemplo:

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

Estes métodos são um pouco como os métodos do Formato Microsoft .NET no sentido de que os parâmetros estão na forma de {0} . No entanto, não realizam qualquer formatação da entrada — apenas substituição:

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)  

Estes são invólucros em torno do StringCchPrintf que devolvem um wstring para que você não tenha que alocar memória para cordas ou tampão si mesmo.

Classe de modelo subInterface

Esta classe base facilita a implementação de um componente que suporta uma interface que herda a partir de outra interface. Por exemplo, a interface ICheckBox herda do IControl. Eis como esta classe é usada para definir o CheckBoxWrapper:

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

A interface base é o primeiro parâmetro, enquanto a interface derivada é o segundo parâmetro.

Classe de modelo deimplão desconhecido

Esta classe é definida em UnknownImpl.h e lida com a maioria dos detalhes da criação de um componente COM. Aqui está um exemplo de como usaria esta classe base:

classDirectory :public UnknownImpl<IDirectory>  

Este código define uma classe que suporta a interface IDirectory.

Classe de modelo de assistente de feiticeiro

Esta classe é definida em IWizardComponent.h e é uma classe base útil para criar componentes que precisam de acesso aos serviços de assistente, como criação de componentes e registo.

Como exemplo, eis como é definido o componente CopyFilesTask:

classCopyFilesTask :public WizardComponent<ITask>  
{  
    ...  

O parâmetro para esta classe de modelo é a interface "principal" que pretende utilizar para o seu componente, que no caso de tarefas é ITask. A utilização do WizardComponent significa que o seu componente suporta tanto a interface que fornece (ITask neste exemplo) como a IWizardComponent.

Sempre que utiliza o registo de fábrica de classes para criar um novo componente, o registo chama o método IWizardComponent->SetContainer do componente para fornecer o acesso do seu componente aos serviços de assistente.

Classe de modelo WizardPageImpl

Utilize esta classe como classe base para as suas páginas personalizadas — por exemplo:

class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>  

O parâmetro é o ID de recurso para o seu modelo de caixa de diálogo.

Interfaces de página de assistente

O Assistente UDI utiliza interfaces para aceder aos diferentes controlos da sua página. Na sua página, utiliza a função GetControlWrapper para recuperar um invólucro de controlo. Segue-se um exemplo:

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

Aqui, o PStaticText é um ponteiro inteligente para a interface IStaticText. Os ponteiros inteligentes ligam automaticamente para o método de Libertação COM() quando eles ficam fora de alcance ou você passa o endereço de uma variável (como &pFormat) para um método.

IADHelper Interface

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

HRESULT Init (ILogger * pLogger)

Inicialize este componente, passando-o para o madeirão para que possa registar informações.

HRESULTValidLogon (nome de utilizador LPCTSTR, senha LPCTSTR, domínio LPCTSTR)

Este método verifica se um conjunto de credenciais é válido, como mostra o quadro 10.

Tabela 10. HResultValidLogon

Rio HResult Descrição
S_OK As credenciais são válidas
S_FALSE Credenciais não são válidas
E_FAIL Não foi possível localizar o controlador de domínio; verificar registos para mais detalhes
HRESULT HasAccess (nome de utilizador LPCTSTR, senha LPCTSTR, domínio LPCTSTR, nome de computador LPCTSTR, conta LPCTSTRDomain)

Este método verifica se um conjunto de credenciais leu/escreveu o acesso ao objeto do computador em DS AD, como mostrado na Tabela 11.

Mesa 11. HResult HasAccess

HRESULT Descrição
S_OK O utilizador tem acesso
E_FAIL O utilizador não tem acesso. Verifique o ficheiro de registo para obter informações adicionais.

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);  
};  
Descrição Geral

A página Progress utiliza esta classe para executar tarefas num fio separado. Também pode utilizar esta aula sempre que quiser realizar operações num fio separado. As tarefas são qualquer classe que suporte a interface ITask.

Esta interface é implementada pelo componente ID_BackgroundTask (Microsoft.Wizard.BackgroundTask"), definido na interface IBackgroundTask.h.

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

Esta interface inicializa o componente, como mostra o quadro 12.

Mesa 12. HRESULT Init

Parâmetro Descrição
pTask Ponteiro para a classe que contém o código que pretende executar em outro fio
ID Um número que pode utilizar no método acabado de fazer para saber qual a tarefa terminada em execução; útil se iniciar várias tarefas com o mesmo método de retorno
pCallback Uma classe que implementa o método Acabado, que é chamado sempre que uma tarefa termina em execução; a chamada para o método acabado estará no fio de fundo, não no fio da UI
início vazio (vazio)

Este método inicia a tarefa num fio de fundo e devolve os elementos indicados na Tabela 13.

Mesa 13. Linha de fundo de retorno

Devoluções Descrição
E_INVALIDARG A tarefa já está em andamento, por isso não podes reiniciá-la agora.
E_FAIL Houve um problema a começar o fio.
S_OK O fio foi iniciado.
CORRIDA BOOL()

Este método devolve TRUE se a tarefa de fundo estiver atualmente em execução e FALSA se não estiver a funcionar.

HRESULT Wait (DWORD waitMilliseconds)

Este método aguarda até que o fio pare de funcionar ou o número de milissegundos tenha decorrido.

Hresult Terminate (DWORD exitCode)

Este método elimina o fio que está em funcionamento (ver tabela 14 e tabela 15). Este processo pode demorar um pouco de tempo a terminar após o retorno deste método.

Mesa 14. Código de saída de fim de HRESULT

Parâmetro Descrição
saídaSDão O código de saída que será enviado para o método de chamada acabado, que também estará disponível a partir do método GetExitCode.

Mesa 15. Códigos de Rescisão

Devoluções Descrição
E_FAIL A chamada para terminar falhou.
S_OK O pedido de fim do fio foi bem sucedido.
HRESULT GetExitCode (LPDWORD pCode, HRESULT * pHresult)

Utilize este método para obter os resultados da execução da tarefa na linha de fundo (ver quadro 16).

Mesa 16. Códigos de resultados

Parâmetro Descrição
pCode Ponter para um DWORD que será definido no retorno ou no nulo se não precisar do valor de retorno. Na saída, este parâmetro é definido para STILL_ATIVE se o fio estiver em execução, o código devolvido pelo método executar da tarefa, ou o valor passado para o método Terminate se você chamar esse método.
pHresult Ponter para um HRESULT que será definido no retorno ou no nulo se não precisar do valor HRESULT.
HRESULT Close(vazio)

Este método liberta o fio de fundo. Retorna E_INVALIDARG se o fio estiver atualmente em funcionamento e S_OK de outra forma.

ICheckBox Interface

__interface ICheckBox : IControl  
{  
    void Check(BOOL check);  
    BOOL IsButtonChecked();  
};  
verificação do vazio (verificação BOOL)

Desa estale o estado verificado da caixa de verificação. Quando o método é VERDADEIRO, a caixa de verificação é selecionada; quando o método é FALSO, a caixa de verificação é apurada.

BOOL IsButtonChecked()

Este método informa o estado atual de verificação de uma caixa de verificação.

IComboBox Interface

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

Esta interface é implementada pelo componente CheckBoxWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_COMBO_BOX.

HRESULT Bind([in] IBindableList * pList)

Utilize este método quando tiver uma fonte de dados que implemente a interface IBindableList. A caixa de lista inicializa o conteúdo com as legendas desta lista.

HRESULT Select (índice int)

Selecione o item na caixa de combinação no índice.

int Selecionado(vazio)

Este método devolve o índice do item selecionado ou -1 se nada for selecionado.

void Add(in] legenda LPCTSTR)

Adicione manualmente um item à caixa de combinação.

HRESULT GetText ([out, retval] LPBSTR pText)

Recupere a cadeia do item atualmente selecionado na caixa de combinação.

vazio Claro()

Retire todos os itens da caixa de combinação.

IControl Interface

__interface IControl : IUnknown  
{  
    HRESULT SetEnable(BOOL enable);  
    BOOL IsEnabled(void);  
    HRESULT SetVisible(BOOL visible);  
};  
Descrição Geral

Esta interface é implementada pelo componente ControlWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_GENERIC.

HRESULT SetEnable (ativar BOOL)

Ativar ou desativar o controlo.

BOOL IsEnabled (vazio)

Retornas VERDADEIRAS Se o controlo estiver ativado, FALSO se não estiver.

HRESULT SetVisible (BOOL visível)

Mostrar ou esconder o controlo.

ICpuInfo Interface

__interface ICpuInfo : IUnknown  
{  
    BOOL Is64Bit(void);  
};  
Descrição Geral

Obtém-se esta interface criando um novo componente ID_CpuInfo. O método único informa se o CPU é de 32 ou 64 bits. Note que se tiver um sistema operativo de 32 bits num computador de 64 bits, este método devolve TRUE, porque está apenas a reportar a largura do CPU (não o sistema operativo).

IDirectory Interface
__interface IDirectory : IUnknown  
{  
    BOOL FileExists(LPCWSTR name);  
    BOOL FindFirst([in] LPCWSTR name);  
    HRESULT FoundName([out, retval] LPBSTR name);  
    DWORD FoundAttributes(void);  
    BOOL FindNext(void);  
    void FinishFind(void);  
};  
Descrição Geral

A componente diretório, que cria utilizando ID_Directory, fornece uma fachada para trabalhar com diretórios no sistema de ficheiros.

BooL FileExists (nome LPCWSTR)

Este método devolve TRUE se existir um ficheiro com o nome que fornece.

BOOL FindFirst ([em] nome LPCWSTR)

Este método encontra uma primeira correspondência para o nome que fornece. Suporta caracteres wildcard e devolve nomes de ficheiros e diretórios. O método retorna VERDADEIRO se uma correspondência foi encontrada, FALSO de outra forma.

HRESULT FoundName ([out, retval] NOME LPBSTR)

Este método recupera o nome do ficheiro encontrado com uma chamada para FindFirst ou FindNext.

DWORD FoundAttributes (vazio)

Este método devolve o atributo para o ficheiro ou diretório encontrado mais recente. Pode utilizar o código da seguinte forma para testar se se trata de um diretório:

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

Encontre o próximo. Este método retorna TRUE se outra partida foi encontrada, FALSO de outra forma.

Acabamento vazioFind(vazio)

Este método liberta os recursos utilizados para a operação Find.

IDomainJoinValidator Interface

__interface IDomainJoinValidator : IUnknown  
{  
    HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);  
    HRESULT IsUsernameValid(LPCWSTR domainName);  
    BOOL CanModifyComputerAdEntry(LPCWSTR domainName);  
};  
Descrição Geral

Obtém-se um exemplo desta interface utilizando o valor ID_DomainJoinValidator para a função do modelo CreateInstance.

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

Inicialize a instância, como mostra a tabela 17.

Mesa 17. HRESULT Init - Inição de exemplo

Parâmetro Descrição
pLogger A instância do madeireiro, que está disponível para a sua página através do método logger da página
pContainer Passa os resultados do método do Contentor da sua página
pUsername A caixa de texto que contém o nome de utilizador a ser validado
pPassword A caixa de texto que contém a palavra-passe a ser validada
PComputerName A caixa de texto que contém o nome do computador que eventualmente será unida ao domínio
HRESULT IsUsernameValid (LPCWSTR domínioName)

Este método utiliza o método ValidLogon >IADHelper-> para fazer o trabalho. Consulte este método para mais detalhes.

BOOL CanModifyComputerAdEntry (LPCWSTR domínioName)

Verifique se o utilizador tem direitos de modificar a entrada do computador. A maior parte do trabalho é feito pela IADHelper->HasAccess. Se este método voltar a ser FALSO, verifique se o ficheiro de registo é para obter mais detalhes.

IDriveList Interface

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

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

Ligue para este método antes de chamar quaisquer outros componentes. Terá de criar um novo WmiRepository antes de chamar este método.

Set HRESULTWhereClause (LPCTSTR whereClause)

Este método permite-lhe adicionar texto que aparecerá como uma cláusula "onde" na consulta. Por exemplo, a seguinte linha devolve apenas unidades USB:

pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");  
HRESULT SetMinimumDriveSize( _ _int64 tamanho)

Desagre o tamanho da unidade de minimização, em bytes, para unidades que serão devolvidas da consulta.

Atualização HRESULT(vazio)

Execute a consulta. A lista de unidades disponíveis após a chamada deste método é classificada por letra de unidade.

HRESULT AddProperty (secção ENUM_DISK_QUERY_SECTION, LPCTSTR propName, LPCTSTR propNameReturned)

Este método adiciona os nomes de propriedades adicionais que pretende disponibilizar nos resultados da consulta. Ligue para este método antes de ligar para a Atualização. A tabela 18 mostra três das propriedades úteis.

Mesa 18. HRESULT AddProperty: Propriedades Úteis

Section Propriedade Descrição
DISKQUERY_LOGICALDISK Tamanho O tamanho, em bytes, representado como uma corda
DISKQUERY_DISKPARTITION DiskIndex O número do disco como um inteiro, começando com 0
DISKQUERY_LOGICALDISK VolumeName A etiqueta de volume
size_t Conde (nulo)

O número de registos da consulta devolve. Ligue para Update antes de ligar para este método.

HRESULT GetProperty (índice size_t, LPCTSTR propName, valor LPVARIANT)

Este método recupera o valor de uma propriedade a partir dos resultados da consulta, como mostrado no Quadro 19.

Mesa 19. HRESULT GetProperty

Parâmetro Descrição
Índice Índice baseado em zero para o recorde de resultados
propName Nome da propriedade, como "Tamanho"
Valor Na devolução, este parâmetro contém um valor variante da propriedade
HRESULT GetCaption (índice size_t, pCaption LPBSTR)

Este método recupera a legenda para um registo que é o mesmo que a propriedade Caption.

IImageList Interface

__interface IImageList  
{  
    HRESULT CreateImageList(int width, int height, UINT flags);  
    HImageList GetImageList(void);  
    int AddImage(HInstance hInstance, int resourceId);  
};  
Descrição Geral

Esta interface é implementada pelo componente ImageList. Recupera uma instância deste componente a partir da interface IListView.

HRESULT CreateImageList (largura int, altura int, bandeiras UINT)

Crie uma nova lista de imagens, que este componente gere. Chame este método apenas uma vez.

HImageList GetImageList (vazio)

Este método devolve o manípulo para a lista de imagens no caso de precisar de realizar outras operações na lista de imagens.

int AddImage (HInstance hInstance, int resourceId)

Adicione uma nova imagem à lista de imagens a partir de um recurso, como mostra a Tabela 20.

Mesa 20. HRESULT IImageList Interface

Parâmetro Descrição
hInstance Cabo de exemplo do módulo que contém o recurso bitmap
resourceId ID do recurso para carregar na lista de imagens

IListView Interface

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

Esta interface é implementada pelo componente ControlWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_LIST_VIEW.

int AddItem([in] texto LPCTSTR)

Adicione uma nova linha à caixa de lista. O método devolve o índice do item acabado de ser adicionado.

int AddColumn (largura int, [in] texto LPCTSTR)

Adicione uma nova coluna à vista da lista.

HRESULT SetSubItem (índice int, coluna int, [in] texto LPCTSTR)

Coloque o texto numa coluna diferente da primeira coluna da caixa de lista, como indicado no quadro 21.

Mesa 21. Conjunto HRESULTSubItem

Parâmetro Descrição
índice O índice do item da lista que pretende modificar
coluna O índice da coluna que pretende atualizar; a primeira coluna é definida com AddItem, colunas dois e seguintes são definidas com este método
Texto A corda para mostrar na coluna
int GetWidth (vazio)

Este método devolve a largura de toda a caixa de texto.

SetExtendedStyle (estilo DWORD)

Este método permite-lhe definir estilos estendidos na caixa de listas , por exemplo:

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

Este método devolve o índice do item de visualização da lista atualmente selecionado.

HRESULT SelectItem (índice int)

Desa um item selecionado na lista para este índice.

BOOL IsItemChecked (índice int)

Este método devolve TRUE se um item da lista for selecionado. Este método requer que ligue para SetExtendedStyle para definir o estilo de caixa de verificação.

int GetItemCount (vazio)

Este método devolve o número de itens na vista da lista.

HRESULT CreateImageList (largura int, altura int, bandeiras UINT)

Crie uma nova lista de imagens e anexe-a à vista da lista.

int AddImage (HINSTANCE hInstance, int resourceId)

Adicione uma imagem à lista de imagens da lista. Primeiro, tem de ligar para a CreateImageList.

HRESULT SetImage (índice int, int imageIndex)

Desaça a imagem que será mostrada no lado esquerdo para um item de visualização de lista específica.

HRESULT Clear(vazio)

Remova todos os itens da vista da lista.

IProgressBar Interface

__interface IProgressBar : IControl  
{  
    HRESULT SetPercentage(int position);  
    int GetPercentage(void);  
};  
Descrição Geral

Esta interface é implementada pelo componente ProgressBarWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_PROGRESS_BAR.

Hresult SetPercentage (posição int)

Desa cimente a posição da barra de progresso utilizando um número entre 0 e 100. Por padrão, as novas barras de progresso ® Win32 têm um alcance máximo de 100.

int GetPercentage (vazio)

Este método devolve a posição atual da barra de progresso.

IRadioButton Interface

__interface IRadioButton : IControl  
{  
public:  
    void SetGroup(int firstId, int lastId);  
    void CheckRadio(int id);  
    BOOL IsButtonChecked(int id);  
    void EnableRadio(int id, BOOL enable);  
};  
Descrição Geral

Esta interface é implementada pelo componente RadioButtonWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_RADIO_BUTTON.

SetGroup vazio (int firstId, int lastId)

Forneça ao invólucro o alcance dos botões de rádio que devem ser tratados em grupo. Ligue para este método antes de ligar para CheckRadio.

Void CheckRadio (int id)

Desa estação de rádio específica para ser o único botão no grupo de botões de rádio selecionados. Ligue para o SetGroup antes de ligar para este método.

BOOL IsButtonChecked (int id)

Este método retorna TRUE se o botão de rádio estiver atualmente selecionado, FALSO caso contrário.

vazio EnableRadio (int id, BOOL enable)

Este método permite ou desativa um botão de rádio.

IStaticText Interface

__interface IStaticText : IControl  
{  
    HRESULT SetText([in] LPCTSTR pText);  
    HRESULT GetText([out, retval] LPBSTR pText);  
};  
Descrição Geral

Esta interface é implementada pelo componente StaticTextWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_STATIC_TEXT.

HRESULT SetText([in] LPCTSTR pText)

Desa estale o texto para o controlo.

HRESULT GetText ([out, retval] LPBSTR pText)

Este método devolve o valor atual do texto para o controlo.

ITask Interface

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

Implemente esta interface se quiser que o seu componente esteja disponível como uma tarefa na página de pré-voo ou se pretender utilizar o componente BackgroundTask para executar trabalhos num fio de fundo.

Aqui estão os componentes que implementam a interface ITask:

  • ID_ShellExecuteTask, L"Microsoft.Wizard.ShellExecuteTask"

  • ID_CopyFilesTask, L"Microsoft.Wizard.CopyFilesTask"

  • ID_ACPowerTask, L"Microsoft.OSDRefresh.ACPowerTask"

  • ID_WiredNetworkTask, L"Microsoft.SharedPages.WiredNetworkTask"

Init
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings)  

Se estiver a escrever uma tarefa para a página de pré-voo, ligue para este método para rubricar a sua tarefa. O ficheiro .config contém XML que pode parecer algo parecido:

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

O parâmetro pProperties proporciona acesso aos três valores de setter, enquanto que o parâmetro pTaskSettings proporciona acesso ao elemento Tarefa e às crianças. A maioria das tarefas só precisa de ler dados a partir do parâmetro pProperties.

Executar
HRESULT Execute(LPDWORD pReturnCode)  

Aqui é onde se escreve o código que executa a tarefa. Este método deve voltar S_OK se não houver erros, e pode devolver outro HRESULT se ocorrer um erro durante a tarefa. Valores que não S_OK que este método de retorno seja correspondido a elementos <Erro > na secção <Códigos de Saída se > estiver a utilizar a página de pré-voo.

O parâmetro pReturnCode deve ser atualizado com um número que reporte o estado da tarefa. Estes valores são acompanhados pela página de pré-voos com <> elementos ExitCode.

ITreeView Interface

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

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

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

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

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

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

    void SetSelectedBackColor(COLORREF color);  
};  
Descrição Geral

Esta interface é implementada pelo componente TreeViewWrapper. Recupera uma instância deste componente utilizando a função de ajudante GetControlWrapper com o tipo CONTROL_TREE_VIEW.

vazio EnableCheckboxes (vazio)

Este método liga as caixas de verificação no controlo da vista da árvore, definindo o estilo TVS_CHECKBOXES.

HRESULT CreateImageList (largura int, altura int, bandeiras UINT)

Adicione uma nova lista de imagens ao controlo da vista da árvore. O parâmetro das bandeiras é passado na chamada para a função ImageList_Create Win32.

int AddImage (HINSTANCE hInstance, int resourceId)

Adicione uma imagem à lista de imagens a partir de um recurso (resourceId) no módulo com o punho de instância hInstance.

HTREEITEM AddItem (texto LPCTSTR, HTREEITEM hParent = NULO)

Adicione um nó à vista da árvore. O novo nó será adicionado ao nível superior se hParent for NU. Caso contrário, forneça a pega ao item principal onde pretende que o novo item seja adicionado. Este método devolve a pega ao novo item.

SetImage vazio (item HTREEITEM, imagem int, int expandImage)

Desa estalade a imagem para um item de vista de árvore. Pode definir tanto a imagem normal como a expandida.

vazio Claro(vazio)

Retire todos os itens da vista da árvore.

BOOL SetFirstVisible (artigo HTREEITEM)

Certifique-se de que o item da vista para a árvore está visível. A vista da árvore deslocar-se-á se necessário para tornar este item visível.

BOOL SelectItem (artigo HTREEITEM)

Desa quando der o artigo selecionado para o item que fornece. Pode ligar para o SetFirstVisible depois disto para garantir que o item recentemente selecionado está visível.

CheckItem vazio (artigo HTREEITEM, Estado de verificação UINT)

O método basicamente define a imagem que será mostrada para a caixa de verificação na vista da árvore. Estas imagens estão num controlo separado da ImageList que a vista da árvore gere. Por predefinição, esta lista de imagens tem três imagens, mostradas na Tabela 22.

Tabela 22.void CheckItem Lista de Imagens Padrão

checkState Descrição
0 Vazio
1 Ilibado
2 Selecionado
HTREEITEM SelectItem (vazio)

Este método devolve a pega do item da vista da árvore atualmente selecionado.

int SetItemHeight (altura CURTA)

Este método define a altura de todos os itens no controlo da vista da árvore em pixels. Devolve a altura anterior em pixels.

HRESULT EnableItem (artigo HTREEITEM, ativação BOOL)

Este método permite ou desativa um único item na árvore. Desativar um item com crianças não irá incapacitar as crianças.

expansão do vazio (HTREEITEM hItem, EXPANSÃO BOOL)

Este método expande ou colapsa um nó na árvore.

HTREEITEM GetChild (HTREEITEM hParent)

Este método devolve o primeiro filho de um item de vista de árvore ou NULO se não houver crianças.

HTREEITEM GetParent (HTREEITEM hNode)

Este método devolve a pega do progenitor para um nó na vista da árvore ou NULO se o nó estiver no nível superior.

HTREEITEM GetNextItem (HTREEITEM hPrevious)

Pode chamar a este método com uma pega que a GetChild volta a iterar através de todas as crianças de um nó. Este método devolve o próximo irmão na árvore que partilha o mesmo progenitor.

UINT IsChecked (artigo HTREEITEM)

Este método devolve 0 se o nó de vista da árvore não for selecionado e 1 se for.

BOOL IsEnabled (artigo HTREEITEM)

Este método retorna VERDADEIRO se o nó de vista da árvore estiver ativado, FALSO de outra forma.

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

Este método destina-se apenas ao uso interno.

HRESULT SetEventHandler (ITreeViewEvent * pEventHandler)

Ligue para este método se quiser receber a notificação quando o item selecionado mudar ou o utilizador alterar o estado de verificação de um item de visualização de árvore. Tem de implementar o ITreeViewEvent no seu componente para receber estas chamadas.

conjunto vazioSelectedBackColor (cor COLORREF)

Desa parte a cor de fundo utilizada para o item selecionado.

IWmiIteration Interface

__interface IWmiIterator : IUnknown  
{  
    HRESULT Next(void);  
    HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);  
};  
Descrição Geral

Normalmente utiliza esta interface, juntamente com o IWmiRepository, quando se trabalha com chamadas de WMI. A interface IWmiIteration permite-lhe iterar através dos valores que uma consulta retorna.

HRESULT Next(vazio)

Passe para o próximo item nos resultados da consulta, como mostrado no quadro 23.

Mesa 23. HRESULT Next(vazio) Devoluções de consultas

HRRESULT Descrição
S_OK Passou para o resultado seguinte; pode utilizar a GetProperty para recuperar propriedades desse resultado.
S_FALSE Não há mais itens na lista.
E_NOT_SET Não há resultados de consulta
HRESULT GetProperty (LPCTSTR propertyName, [out] LPVARIANT pValue)

Este método recupera o valor de uma propriedade a partir do registo de resultados atual, como mostrado nos quadros 24 e 25.

Mesa 24. HRESULT GetProperty

Parâmetro Descrição
nome de propriedade Nome da propriedade que pretende recuperar
pValue Aponta para uma estrutura VARIANTE que na devolução contém o valor da propriedade

Mesa 25. Hresult GetProperty Resultado

HRESULT Descrição
S_OK O valor da propriedade foi recuperado.
WBEM_E_NOT_FOUND Não há nenhuma propriedade com o nome.
E_NOT_VALID_STATE Não há registo atual.

Nota

O método GetProperty pode devolver outros códigos de erro WMI que não os listados na Tabela 25. Os valores listados são os resultados comuns que são devolvidos.

IWmiRepository Interface

__interface IWmiRepository : IUnknown  
{  
    HRESULT SetNamespace(LPCWSTR namespaceName);  
    HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);  
};  
Descrição Geral

Esta interface é implementada pelo componente WmiRepository (ID_WmiRepository).

HRESULT SetNamespace (LPCWSTR namespaceName)

Este método define o espaço de nome WMI que será usado para a consulta. Ligue para este método antes de chamar O Tesouro. Se não chamar este método, o espaço de nome será raiz\cimv2. Este método volta sempre S_OK.

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

Execute uma consulta contra o espaço de identificação WMI definido com uma chamada para SetNamespace, como mostrado na tabela 26 e na tabela 27.

Mesa 26. HRESULT ExecQuery

Parâmetro Descrição
Query A cadeia para a consulta do WMI que quer executar
ppIterator Passe um ponteiro para um ponteiro de interface, que no retorno será preenchido com uma interface, dando-lhe acesso aos resultados da consulta

Mesa 27. Resultado da consulta hresult

HRESULT Descrição
S_OK Consulta conseguiu
Outro Se a consulta não tiver sido bem sucedida, devolve um WMI HRESULT

IFormController Interface

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

    Validate(void);  

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

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

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

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

    void ControlEvent(WORD eventId, WORD controlId);  
    BOOL IsValid(void);  
 };  
Descrição Geral

Cada página do Assistente UDI tem o seu próprio controlador de formulários que implementa esta interface. Utilize este controlador para ligar os dados de campo no ficheiro XML .config aos controlos da sua página. O controlador de formulários, em seguida, trata de muitos dos detalhes para si.

Configuração do Formulário

Em geral, erja o controlador de formulários no método OnWindowCreated da sua página. Fazê-lo geralmente envolve chamar os métodos mostrados na tabela 28.

Mesa 28. Método OnWindowCreated

Método Descrição
Init Inicializa o controlador de formulários
AddField Fornece uma ligação entre um campo no ficheiro XML .config que é um nome de corda e um controlo na caixa de diálogo da sua página que é um ID
Grupo AddRadio Usado para ligar um botão de rádio a um grupo e um controlo na sua caixa de diálogo
AddToGroup Permite-lhe controlos "infantis" que estejam ativados ou desativados juntamente com os seus pais ou com base no botão de rádio selecionado
Campos init Ligue depois de ter chamado todos os métodos Add para configurar o formulário
Validação Realiza a validação inicial
Eventos de formulário de processamento

Adicione a seguinte chamada ao seu método OnControlEvent:

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

Esta chamada transmite eventos para o controlador de formulários para que possa processar eventos relacionados com a forma.

Guardar dados de formulário

No método OnNextClicked, chame os métodos de forma indicados na tabela 29.

Mesa 29. Método OnNextClicked

Método Descrição
InitSecção Fornece o nome da secção que será mostrada na página resumo desta página
Campos de Salvamento Guardar valores de campo para variáveis de sequência de tarefas e para a página Resumo
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)  

Normalmente, ligue para este método perto do início do método OnWindowCreated da sua página. O comando deve ser parecido com isto:

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

Este método chama-se internamente, e não deve chamá-lo por si mesmo. Fornece o XML da página ao controlador de formulários.

Validação
HRESULT Validate(void)  

Este método executa todos os validadores ligados aos controlos. Se um validador não passar, o controlador do formulário apresenta uma mensagem de aviso e desativa o botão Seguinte e para de processar os validadores. Normalmente, só precisa de chamar este método no final do seu método OnWindowCreated; volta sempre S_OK.

AddToGroup
AddToGroup(int groupControlId, int controlId)  

Este método adiciona um controlo como "criança" de uma caixa de verificação ou botão de rádio, como mostrado na tabela 30. Todos estes controlos para crianças serão desativados quando o controlo dos pais não for selecionado. O método volta sempre S_OK.

Mesa 30. AddToGroup

Parâmetro Descrição
groupControlId O ID da caixa de verificação ou botão de rádio que controlará o estado de ativação do controlo da criança
Controlld O ID do controlo que quer adicionar em criança
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)  

Este método atualiza o estado de ativação ou desativação dos controlos infantis de um grupo com base no estado do controlo dos pais. Geralmente, você não precisa chamar este método por si mesmo, porque o controlador de formulários chama-o por si.

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

Ligue para este método apenas se tiver um validador que pretende criar em código em vez de com o XML. Este método volta sempre S_OK.

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

Ligue para este método apenas se tiver um validador que pretende criar em código em vez de com o XML.

Desativação Desativação
HRESULT DisableValidation(int controlId, BOOL disable)  

Ligue para este método para desativar explicitamente o validador para um controlo ou restaurar a validação normal, como mostrado no quadro 31. Este método é útil, por exemplo, quando tem regras de ativação/desativação para controlos que não estão cobertos com validação de formulários e é necessário desativar a validação para um controlo. Por outras palavras, normalmente não se chama este método. Este método volta sempre S_OK.

Mesa 31. HRESULT DisableValidation

Parâmetro Descrição
controlId O controlo para o qual pretende ativar ou desativar a validação
Desativar Definir para TRUE para desativar validação e para FALSO para restaurar a validação normal
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)  

Adicione um mapeamento de controlo entre o nome num elemento de campo do ficheiro XML .config e o ID de controlo na caixa de diálogo da sua página, como mostrado na tabela 32. Você deve chamar este método antes da chamada para InitFields, porque InitFields usa esta informação. Este método volta sempre S_OK.

Mesa 32. HRESULT AddField

Parâmetro Descrição
Nome de campo Nome do campo tal como aparece no XML da sua página
controlId O ID do controlo no modelo de caixa de diálogo da sua página
suprimir ologhá-lo Configurar para TRUE se não pretender os valores deste campo escritos no ficheiro de registo; sempre definir este parâmetro para TRUE para os campos de senha ou PIN
Tipo O tipo de controlo, que é um dos seguintes:

- CONTROL_STATIC_TEXT
- CONTROL_COMBO_BOX
- CONTROL_LIST_VIEW
- CONTROL_PROGRESS_BAR
- CONTROL_GENERIC
- CONTROL_RADIO_BUTTON
- CONTROL_CHECK_BOX
- CONTROL_TREE_VIEW
Grupo AddRadio
HRESULT AddRadioGroup(LPCWSTR groupName, int radioControlId)  

Este método adiciona um controlo a um grupo de botões de rádio nomeado, como mostrado na tabela 33. Deve chamar isto antes do método InitFields, porque este método utiliza atributos no elemento RadioGroup para controlar as definições de todos os comandos de botões de rádio do grupo. Os grupos de rádio podem ser bloqueados, por exemplo, de modo a que todos os botões de rádio sejam desativados, mas os controlos para crianças são ativados ou desativados apenas com base no botão de rádio selecionado. Este método volta sempre S_OK.

Mesa 33. HRESULT AddRadioGroup

Parâmetro Descrição
nome de grupoName Uma cadeia que define um grupo de botões de rádio nesta página
radioControlId O ID de um único botão de rádio para adicionar a este grupo
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)  

Este método permite-lhe ativar ou desativar um grupo inteiro de botões de rádio. Desativar um grupo de rádio desativa todos os comandos de botões de rádio do grupo, bem como quaisquer crianças daqueles botões de rádio que tenham sido adicionados ao AddToGroup. Consulte a tabela 34 e a tabela 35.

Mesa 34. EnableRadioGroup

Parâmetro Descrição
nome de grupoName Nome de um grupo de botões de rádio que já definiu com uma chamada para AddRadioGroup
Ativar Definir para TRUE para ativar o grupo de botões de rádio e FALSO para desativar o grupo

Mesa 35. HRESULT EnableRadioGroup

HRESULT Descrição
S_OK Grupo ativado ou desativado
E_INVALIDARG Não há nenhum grupo de botões de rádio com o nome que forneceu
Campos init
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)  

Antes de chamar este método, ligue para AddField para cada campo que o XML pode controlar. Este método volta sempre S_OK.

O parâmetro pFieldCallback é opcional. Se o fornecer, o controlador de formulários chama SetFieldDefault para controlos que não são CONTROL_STATIC_TEXT ou CONTROL_CHECK_BOX. Este comportamento permite-lhe recuperar um valor predefinido do XML e defini-lo no controlo.

Campos de Salvamento
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)  

Este método guarda os valores de campo para variáveis de sequência de tarefas e para os dados sumários que serão mostrados na página Resumo. Fornecer um ponteiro no pFieldCallback permite-lhe lidar com valores de poupança para controlos que não suportam CONTROL_STATIC_TEXT.

IsFieldDisabled
BOOL IsFieldDisabled(int controlId)  

Este método permite determinar se um campo foi desativado no XML.

InitSecção
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)  

Este método inicializa os dados resumidores que serão mostrados na página Resumo, como mostrado no Quadro 36. Ligue para este método no seu método OnNextClicked antes de ligar para SaveFields. Este método volta sempre S_OK.

Mesa 36. InitSecção HRESULT

Parâmetro Descrição
Chave Este parâmetro deve ser exclusivo da sua página. É utilizado para garantir que cada página tem as suas próprias informações sumárias.
secçãoCape O cabeçalho que será mostrado na página Resumo para as informações resumidas desta página. Normalmente, utiliza-se o DisplayName como o valor deste parâmetro.
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)  

Este método permite-lhe adicionar itens sumários à página Resumo acima e além dos itens definidos com o XML. Ver tabela 37.

Mesa 37. HRESULT AddSummaryItem

Parâmetro Descrição
Primeiro A legenda para o item resumo, que é mostrado no lado esquerdo
Segundo O valor que será mostrado no lado direito
SupressorValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)  

Chame este método para variáveis de sequência de tarefas para as quais não pretende que os valores sejam escritos no ficheiro de registo. Ligue para este método para variáveis de sequência de tarefas que armazenam senhas, PINs ou outros valores sensíveis que um utilizador possa introduzir.

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

Este método guarda o valor de um controlo de texto tanto para uma variável de sequência de tarefa como para a secção de resumo. Normalmente, você não precisará chamar este método por si mesmo, porque o controlador de formulários faz isso para todos os campos. Ver tabela 38.

Mesa 38. HRESULT SaveText

Parâmetro Descrição
controlId O ID da caixa de texto que contém o valor que pretende guardar (ou qualquer outro controlo que possa devolver texto)
nome tsVariableName Nome da variável de sequência de tarefa que pretende modificar
resumoCaption A legenda na página Resumo para este valor
Texto de carga
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)  

Este método lê o valor de uma variável de sequência de tarefa e define a caixa de texto para este valor.

Controlevent
void ControlEvent(WORD eventId, WORD controlId)  

Ligue para este método no seu método OnControlEvent para garantir que o controlador de formulário pode processar eventos de controlo, o que precisa de fazer para funcionar corretamente. Os valores que passa para este método são os mesmos valores passados para o método OnControlEvent.

IsValid
BOOL IsValid(void)  

Este método devolve o estado da validação mais recente do formulário. Se algum dos validadores de controlo tiver reportado um erro, este método devolve FALSO. Por outras palavras, só devolve TRUE se todos os controlos da página forem válidos.

IValidator Interface

__interface IValidator : IUnknown  
{  
    HRESULT Init(IControl *pControl, LPCTSTR message);  
    HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties);  
    BOOL, IsValid(LPBSTR pMessage);  
    HRESULT SetProperty(int propertyId, LPVARIANT pValue);  
    HRESULT SetProperty(int propertyId, IUnknown *pUnknown);  
    HRESULT SetProperty)(int propertyId, LPCTSTR pValue);  
};  
Descrição Geral

Os validadores são componentes que podem validar um único controlo na sua página. A forma mais fácil de implementar um validador é torná-lo uma subclasse da classe BaseValidator, que é definida no ficheiro baseValidator.h.

HRESULT Init (IControl * pControl, mensagem LPCTSTR)

Se criar um validador em código, pode ligar para este método para inicializar o validador. Ver tabela 39.

Mesa 39. HRESULT Init

Parâmetro Descrição
pControl O controlo que o seu validador deve validar
Mensagem A mensagem a exibir na página se o controlo não for válido
HRESULT Init (IControl * pControl, IWizardPageContainer * pContainer, IStringProperties * pProperties)

O controlador de formulários chama este método para inicializar os validadores que cria com base no XML da página. Ver tabela 40.

Mesa 40. Método HRESULT Init

Parâmetro Descrição
pControl O controlo que o seu validador deve validar
pContainer Caso o seu validador precise de acesso ao madeirão ou precise de criar outros componentes
pProperties Fornece acesso às propriedades (elementos setter) para o seu validador
BOOL, IsValid (LPBSTR pMessage)

Este método devolve TRUE se o controlo for válido ou FALSO se o controlo for inválido. No retorno, o pMessage deve ser preenchido com um novo BSTR que contenha a mensagem para visualizar quando o controlo não é válido.

HRESULT SetProperty (int propertyId, LPVARIANT pValue)

Pode implementar este método se precisar de valores extra que não são fornecidos no XML.

HRESULT SetProperty (int propertyId, IUnknown * pUnknown)

Pode implementar este método se precisar de valores extra que não são fornecidos no XML.

HRESULT SetProperty)(int propertyId, LPCTSTR pValue)

Pode implementar este método se precisar de valores extra que não são fornecidos no XML.

IRegEx Interface

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

Este método é implementado pelo componente ID_Regex (IRegex.h) e fornece suporte para o processamento regular de expressões.

BOOL MatchsRegex (entrada LPCTSTR, LPCTSTR regex)

Este método executa a expressão regular contra o texto de entrada. Utiliza a função de regex_match da biblioteca padrão C++ para fazer o trabalho real. O método retorna VERDADEIRO se houver fósforos, FALSO de outra forma.

HRESULT GetMatch (índice size_t, pValue LPBSTR)

Este método permite-lhe recuperar os fósforos da chamada mais recente do MatchesRegex. Note que não há processamento de erros neste método, e ou devolve S_OK ou lança uma exceção.

ISummaryInfo Interface

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

Não deverá utilizar esta interface diretamente. Em vez disso, utilize o IFormController.

ISummaryBag

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

Não deverá utilizar esta interface diretamente. Em vez disso, utilize o IFormController.

ITSVariableBag Interface

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

Esta interface fornece acesso a variáveis de sequência de tarefas. Pode aceder a esta interface utilizando o método TSVariables da sua página.

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

Este método lê o valor de uma variável de sequência de tarefa.

Nota

Os valores são em cache após a primeira leitura.

vazio SetValue ([in] LPCTSTR variávelName, [in] LPCTSTR pValue)

Este método define o valor de uma variável de sequência de tarefa. Este valor é guardado na memória. Os valores da sequência de tarefas são escritos assim que clicar em Terminar no Assistente UDI.

vazio Claro(vazio)

Este método remove todos os valores da sequência de tarefas que foram guardados na memória.

HRESULT Remover(in] LPCTSTR variableName)

Este método remove um valor específico da sequência de tarefas da memória. Da próxima vez que ligar para o GetValue com o mesmo nome de sequência de tarefas, o método tenta recuperá-lo da sequência de tarefas.

HRESULT SuppressLogValue([in] LPCTSTR variableName)

Sempre que as variáveis da sequência de tarefas são escritas, como quando clica em Terminar no Assistente UDI, os nomes e valores são escritos no ficheiro de registo. Ligue para este método para suprimir a registo de valores sensíveis, tais como palavras-passe ou PINs, para uma variável específica da sequência de tarefas.

vazio Salvar(vazio)

Este método guarda todos os valores da sequência de tarefas que foram definidos com chamadas para SetValue.

Interface Repositória Variavel

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

Esta interface destina-se a ser utilizada internamente pela TSVariableBag para variáveis de sequência de tarefas de leitura e escrita.

IWizardFinish Interface

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

Esta interface é útil em cenários avançados onde pretende realizar processamento adicional quando clicar em Terminar ou cancelar no Assistente UDI. O Assistente UDI contém uma tarefa Finish que guarda variáveis de sequência de tarefas quando clica em Terminar. Se cancelar o assistente, a tarefa apenas define a sequência de tarefas OSDSetupWizCancelled variável para TRUE e não guarda alterações em quaisquer outras variáveis de sequência de tarefas.

Se criar o seu próprio componente de acabamento, tem de registá-lo com um 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);  

IBindableList Interface

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

Implemente esta interface se tiver um componente de fonte de dados que pretende ligar a uma caixa de combinação, chamando o seu método Bind.

size_t Conde (nulo)

Este método devolve o número de itens na lista.

HRESULT GetCaption (índice size_t, pCaption LPBSTR)

Este método devolve a legenda do artigo a um índice específico.

IDataNodes Interface

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

Esta interface fornece acesso a dados hierárquicos que podem ser guardados numa página. Obtém esta interface através de métodos na interface ISettingsProperties, que está disponível para a sua página através do método Definições.

Os dados no XML de uma página podem parecer algo como este

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

Chamar Definições()->GetDataNode (L"Network", &pData) dá-lhe uma instância IDataNodes com dois itens de dados (cada um deles por sua vez tem duas propriedades).

size_t Conde()

Este método devolve o número de elementos DataItem.

HRESULT SetCaptionProperty (legenda LPCTSTRProperty)

O componente que suporta esta interface também suporta o IBindableList, o que facilita a preencha uma caixa de combinação com dados do XML da página. Este método controla qual a propriedade (setter) em cada elemento DataItem será utilizada para esta ligação. Por exemplo, pode chamar este método com DisplayName, e usaria essa propriedade setter para a ligação de dados. A caixa de combinação conteria então Public e Dev Team como itens.

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

Este método obtém uma propriedade de um dos elementos DataItem. Consulte a tabela 41 e a tabela 42.

Mesa 41. DataItem GetProperty

Parâmetro Descrição
Índice O valor do índice (a partir de 0) do DataItem para o qual pretende recuperar um valor patrimonial
nome de propriedade Nome da propriedade setter para a qual você quer recuperar um valor
propriedadeValue No retorno, contém o valor de cadeia de uma propriedade

Mesa 42. HRESULT GetProperty

HRESULT Descrição
S_OK A propriedade foi recuperada.
E_INVALIDARG O índice já passou do fim da matriz.
HRESULT GetNode (índice size_t, [out] ISettingsProperties **ppNode)

Este método é semelhante ao GetProperty, mas em vez de devolver um valor a partir de um DataItem, devolve todo o DataItem embrulhado numa interface ISettingsProperties. Consulte a tabela 43 e a tabela 44.

Mesa 43. HRESULT GetNode

Parâmetro Descrição
Índice O valor do índice (a partir de 0) do DataItem para o qual pretende recuperar um valor patrimonial
ppNode Na saída, a interface ISettingsProperties que envolve o nó DataItem

Mesa 44. Resultados do HrESULT GetNode

HRESULT Descrição
S_OK O nó foi recuperado.
E_INVALIDARG O índice já passou do fim da matriz.

IFactoryRegistry Interface

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

Quando cria uma nova página personalizada, no mínimo é necessário criar uma fábrica de páginas— uma classe que implementa o IClassFactory. (Pode utilizar o ClassFactoryImpl como classe base para a sua fábrica.)

Registo vazio (tipo LPCTSTR, * IClassFactory pFactory)

Este método regista uma fábrica de classe com o registo. Ver tabela 45.

Mesa 45. Registo de vazios IClassFactory

Parâmetro Descrição
Tipo Uma corda que identifica a fábrica que está a registar; geralmente, este parâmetro deve ter o nome da sua empresa na cadeia para garantir que é único
pFactory Um ponteiro para a sua instância de fábrica de classe
HRESULT LoadAndRegister (LPCTSTR dllName, ILogger * pLogger)

Este método destina-se apenas ao uso interno.

BOOL Contém (tipo LPCTSTR)

Este método é geralmente para uso interno. Verifica se uma fábrica de classe foi registada para um tipo.

HRESULT GetFactory (tipo LPCTSTR, IClassFactory **ppFactory)

Este método permite-lhe recuperar a fábrica de classes. Normalmente, chamaria CreateInstance. No entanto, se vai criar um grande número do mesmo componente, é mais eficiente recuperar a fábrica e, em seguida, pedir-lhe para criar os casos para si.

HRESULT CreateInstance (tipo LPCTSTR, IUnknown **ppInstance)

Este método cria uma nova instância de um componente, dado o seu tipo. Utilize o método do modelo CreateInstance, que permite a criação de objetos tipo-seguro.

Conjunto HRESULTContainer(IWizardPageContainer * pContainer)

Este método destina-se apenas ao uso interno.

HRESULT RegisterService (REFGUID iid, IUnknown * pService)

Os serviços são casos únicos de um componente que pode ser usado em vários locais. Pode utilizar este método para registar um serviço numa página e, em seguida, recuperar essa mesma instância a partir de outra página.

HRESULT GetService (REFGUID iid, IUnknown **ppService)

Este método recupera um serviço que foi previamente registado com uma chamada para o RegisterService.

HRESULT SetLanguage (LILANID)

Este método define a linguagem do Assistente UDI ao identificador de linguagem que forneceu no parâmetro languageId.

LANGID GetLanguage()

Este método devolve o valor do identificador de idioma que forneceu com o parâmetro da linha de comando /local para o Assistente UDI. O método devolve um dos seguintes valores:

  • Valor do identificador de idiomas fornecido com o parâmetro de linha de comando /local

  • 0, se não forneceu o parâmetro de linha de comando /local

ILogger Interface

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

O UDI Wizard regista informações num ficheiro de registo, o que ajuda a resolver problemas encontrados no campo. É uma boa ideia para as suas páginas registar informações. Pode obter um ponteiro para esta interface a partir da sua página utilizando o método Logger da página. As linhas no ficheiro de registo contêm um número de "nível" que representa mensagens de erro, normais, verbosas ou depuradas.

Nota

As mensagens Debug não são guardadas no ficheiro de registo a menos que o suporte de depurg seja ligado. Pode ligar o suporte ao depurar adicionando a seguinte linha ao elemento Estilo no ficheiro .config:

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

Este método destina-se apenas ao uso interno.

MoveLog
HRESULT MoveLog(LPCWSTR logFilename)  

Este método destina-se apenas ao uso interno.

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

Este método destina-se apenas ao uso interno.

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

Este método destina-se apenas ao uso interno.

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

Ligue para este método para registar informações sobre um erro. Ver tabela 46.

Mesa 46. Erro hresult

Parâmetro Descrição
Erro O código de erro devolvido por uma chamada (Este código será apresentado na entrada de registo como número.)
Componente Uma cadeia que identifica a origem do erro, que é geralmente a sua página ou o componente que escreveu
Mensagem A mensagem que explica o que causou o erro
Erro2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)  

Este método é como o método Erro, mas permite-lhe fornecer uma mensagem em duas partes. A mensagem final terá "mensagem", e depois "mensagem2" no ficheiro de saída. Este é simplesmente um método de conveniência.

Normal
HRESULT Normal(LPCTSTR component, LPCTSTR message)  

Este método regista uma mensagem normal. Consulte a descrição do método Erro para parâmetros.

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

Este método regista uma mensagem normal. Consulte a descrição do método Error2 para parâmetros.

Verboso
HRESULT Verbose(LPCTSTR component, LPCTSTR message)  

Este método regista uma mensagem verbosa. Consulte a descrição do método Erro para parâmetros.

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

Este método regista uma mensagem verbosa. Consulte a descrição do método Error2 para parâmetros.

Depurar
HRESULT Debug(LPCWSTR component, LPCWSTR message)  

Este método regista uma mensagem de depurar. Consulte a descrição do método Erro para parâmetros. As mensagens Debug não são guardadas no ficheiro a não ser que estejam ativadas. Consulte a secção Geral para mais informações.

EnableDebug
HRESULT EnableDebug(BOOL debug)  

Este método destina-se apenas ao uso interno.

Fechar
HRESULT Close(void)  

Este método destina-se apenas ao uso interno.

GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)  

Este método recupera o nome do ficheiro de registo.

IOrientation Interface

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

Esta interface destina-se apenas ao uso interno.

ISettings Interface

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

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

Esta interface destina-se apenas ao uso interno.

ISettingsProperties Interface

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

Esta interface fornece acesso aos dados da página. Para chegar ao nível superior dos dados da página, utilize o método Definições da página.

HRESULT GetAttribute (atributo LPCTSTRName, atributo LPBSTRValue)

Este método permite-lhe recuperar os valores dos atributos no nó principal, que é o nó página quando estiver a utilizar o método Definições da página.

IStringProperties * Propriedades()

Este método proporciona acesso aos valores de propriedade setter sob o nó principal. Para uma página, estas são as propriedades de alto nível.

HRESULT SelectNodes (LPCTSTR xPath, IXMLDOMNodeList **ppList)

Ligue para este método se quiser obter diretamente uma lista de nós XML usando uma expressão XPath. É melhor usar um dos outros métodos, se puder. Utilize este método apenas se não conseguir chegar a nós de outra forma.

HRESULT SelectSingleNode (LPCTSTR xPath, IXMLDOMNode **ppNode)

Ligue para este método se quiser obter diretamente um único nó XML utilizando uma expressão XPath. É melhor usar um dos outros métodos, se puder. Use este método apenas se não conseguir chegar a um nó de outra forma.

HRESULT GetDataNode (nome LPCTSTR, ISettingsProperties **ppNode)

Recupere um elemento de dados com base no atributo Nome desse elemento.

HRESULT GetDataNodes (IDataNodes **ppNodes)

Este método recupera uma lista de elementos DataItem sob o nó atual. A partir do nível de página, ligue para o GetDataNode para recuperar uma interface ISettingsProperty para os dados. Então, nesse caso, ligue para o GetDataNodes para recuperar a lista de registos. Por exemplo, 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 fornece uma maneira rápida de chegar ao conjunto de nós DataItem sob um nó de Dados específico. Utilizando o XML a partir do exemplo GetDataNodes, o seguinte código faz exatamente a mesma coisa que as quatro linhas de código no exemplo no GetDataNodes mas com verificação de erros:

ISimpleStringProperties Interface  

ISimpleStringProperties Interface

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

Por si só, esta interface pode não ser útil. No entanto, é implementado pela componente ID_SimpleStringProperties, que também implementa a interface IStringProperties. Pode utilizar este componente nos casos em que precisa de passar um conjunto de propriedades para outro componente, como uma tarefa, mas pretende adicionar valores programáticamente em vez de utilizar valores de XML. Aqui está um exemplo de como usaria esta interface:

PSimpleStringProperties *pProperties;  
CreateInstance(Container(), ID_SimpleStringProperties, &pProperties);  
pProperties->Add(L"filename", L"%windir%\\system32\\cscript.exe");  
pTask->Init(pProperties, nullptr);  
IStringProperties  
__interface IStringProperties : IUnknown  
{  
    HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue);  
};  

Esta interface proporciona um acesso simples a um conjunto de elementos setter que vêm de XML. Esta interface está disponível para as propriedades de uma página utilizando Definições()->Properties().

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

Este método recupera um único valor de propriedade. Consulte a tabela 47 e a tabela 48.

Mesa 47. IHRESULT Obter Valor Imobiliário

Parâmetro Descrição
nome de propriedade Nome da propriedade que quer ler
pPropValue Na saída, contém o valor da propriedade como uma cadeia (este valor será anulado se não existir tal propriedade.)

Mesa 48. IHRESULT Obtém resultados do valor da propriedade

HRESULT Descrição
S_OK O valor da propriedade é recuperado.
E_INVALIDARG Não há propriedade com o nome que forneceu.

ITaskManager Interface

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

    HRESULT Start(void);  

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

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

Esta interface é implementada pelo componente TaskManager (ID_TaskManager em ITaskManager.h), que é o componente que executa tarefas na página de pré-voo. Pode utilizar a página de pré-voo diretamente, que é o que faz na maior parte do tempo, ou construir a sua própria página, permitindo que este componente faça a maior parte do trabalho.

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

Deve chamar este método antes de chamar qualquer outro método. Inicializa o componente TaskManager. Ver tabela 49.

Mesa 49. HRESULT Init

Parâmetro Descrição
pPageView Fornece acesso à página que estará a executar tarefas (Esta página deve ter um conjunto específico de controlos, que são delineados nos próximos parâmetros.)
idListView O ID de controlo de um controlo ListView que apresentará a lista de tarefas e o estado dessas tarefas
idMessage O ID de controlo de uma caixa de texto que será usada para exibir uma mensagem para a tarefa que seleciona
idRetryButton O ID de controlo de um botão que pode clicar para executar as tarefas novamente
pPageInfo Um invólucro em torno do XML da página (TaskManager carrega o conjunto de tarefas a executar a partir deste XML.)
pCallback Pode ser nulo (Se este parâmetro não for nulo, TaskManager chama o método Iniciado quando inicia uma tarefa e o método acabado para cada tarefa que termina em execução.)
HRESULT SetFailMessage (mensagem LPCWSTR)

Este método define a mensagem que será exibida se uma ou mais tarefas falharem.

Início hresult(vazio)

Este método inicia todas as tarefas. Cada tarefa é iniciada num fio separado.

HRESULT GetTaskMessage (índice size_t, mensagem LPBSTR)

Este método destina-se apenas ao uso interno. Recupera a mensagem atual para uma tarefa baseada no seu índice na lista de tarefas.

HRESULT GetResultType)(índice size_t, tipo LPBSTR)

Este método recupera o "tipo" atual para uma tarefa. A tabela 50 mostra os tipos disponíveis.

Mesa 50. HRESULT GetResultType

Tipo Descrição
0 Representa uma tarefa que sucedeu
1 Representa uma tarefa que devolveu um aviso
-1 Representa uma tarefa falhada

O tipo é recuperado olhando para o código de saída ou erro da tarefa e encontrando uma correspondência no elemento <ExitCodes > XML da tarefa.

HRESULT GetProperty (índice size_t, LPCTSTR propertyName, lpbstr value)

Este método é utilizado pelas páginas de progresso e pré-voo para recuperar a propriedade do setter BitmapFilename para que possa exibir uma imagem ao lado da mensagem para a tarefa que realça. Por outras palavras, pode adicionar um setter personalizado ao XML da tarefa e, em seguida, recuperá-lo com este método.

int GetSelectedIndex (vazio)

Este método recupera o índice da tarefa atualmente selecionada, o que é útil se pretender obter informações adicionais sobre a tarefa (ver método GetProperty) para visualizar para a tarefa selecionada. As páginas de progresso e pré-voo utilizam este método para exibir uma imagem para a tarefa selecionada.

HRESULT Wait (DWORD waitMilliseconds)

Este método ajuda principalmente nos testes de unidade para que o teste possa garantir que as tarefas terminem antes da saída do teste da unidade. Normalmente não se chama este método. Retorna quando todas as tarefas terminam de execução ou o tempo de espera passou.

size_t FailedCount (vazio)

Este método devolve o número de tarefas atualmente marcadas como falhadas.

size_t WarningCount (vazio)

Este método devolve o número de tarefas atualmente marcadas como aviso.

size_t SucceedCount (vazio)

Este método devolve o número de tarefas atualmente marcadas como bem sucedidas.

size_t RunningCount (vazio)

Este método devolve o número de tarefas atualmente em execução.

onCommonControlEvent (WORD controlId, LPNMHDR pInfo)

Ligue para este método a partir do OnCommonControlEvent da sua página para que o TaskManager possa processar eventos de que necessita.

vazio OnControlEvent (WORD eventId, WORD controlId)

Ligue para este método a partir do OnControlEvent da sua página para que o TaskManager possa processar eventos de que necessita.

vazio EnableButtons (ATIVA BOOL)

Este método destina-se apenas ao uso interno.

IWizardComponent Interface

__interface IWizardComponent : IUnknown  
{  
    HRESULT SetContainer(IWizardPageContainer *pContainer);  
};  
Descrição Geral

Normalmente, não implementará esta interface diretamente, mas sim através da classe de modelo WizardComponent. Se o seu componente implementar esta interface e tiver registado uma fábrica de classe com o registo, o seu componente recebe um ponteiro para a instância IWizardPageContainer quando é criado. Isto ajuda-o, por exemplo, a aceder ao Madeireiro ou ao registo para criar outros componentes que o seu componente possa necessitar.

IWizardDialogController Interface

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

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

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

Esta interface destina-se apenas ao uso interno.

IWizardDialogView Interface

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

Esta interface destina-se apenas ao uso interno.

IWizardPage Interface

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

    HRESULT NextClicked(void);  
    void ControlEvent(WORD eventId, WORD controlId);  
    void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);  
    void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);  
};  
Descrição Geral

Esta interface é implementada pelo WizardPageImpl, pelo que não terá de implementá-la por si mesma. O assistente chama todos estes métodos para si quando interage com as suas páginas personalizadas.

IWizardPageContainer Interface

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

Esta interface está disponível para a sua página através do método Container (implementado pelo WizardPageImpl) e dá-lhe acesso a vários serviços do assistente.

ILogger * Logger (vazio)

Utilize este método para escrever mensagens no ficheiro de registo — por exemplo:

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

Este método fornece acesso a variáveis de "memória", que são propriedades que estão na memória apenas enquanto o Assistente UDI está em execução. Estas propriedades estão disponíveis para outras páginas, quer em código, quer no XML, utilizando a sintaxe $memoryVarName$.

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

Este método permite criar uma nova instância de qualquer componente que tenha sido registado. No entanto, é melhor utilizar a função de modelo CreateInstance, porque é fortemente dactilografado.

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

Este método permite-lhe recuperar um serviço que foi registado. No entanto, é melhor chamar a função de modelo GetService, que é fortemente dactilografada (em vez de usar IUnknown).

HRESULT SubstituiVariables (fonte LPCTSTR, [out] LPBSTR pDest)

Este método lida com o trabalho com variáveis dentro dos valores das cordas. Suporta os formatos indicados nos quadros 51 e 52.

Mesa 51. HRESULT Substitui Variabilidades

Formato Descrição
$Name$ Substitui o valor de uma variável de memória por este nome (Se não houver variável de memória com o nome, o "token" será removido.)
%Nome% Ou uma variável de sequência de tarefa ou uma variável ambiental. A ordem é a seguinte:

1. Utilize o valor de uma variável de sequência de tarefa, se estiver presente.
2. Utilize o valor de uma variável ambiental, se estiver presente.
3. Caso contrário, retire este texto da cadeia.

Mesa 52. Parâmetro HRESULT

Parâmetro Descrição
Origem A cadeia de entrada, que pode conter qualquer combinação de $ e % variáveis ou nenhuma em tudo
pDest No retorno, contém uma nova corda que tem todos os tokens substituídos de acordo com a Tabela 51
HRESULT GotoPage (nome de página LPCTSTR)

Este método não foi totalmente testado. A ideia é que possa alternar diretamente para uma página específica com base no nome da página tal como definido no ficheiro XML .config. Chamar este método ignora o OnNextClicked na sua página. Além disso, o comportamento deste método está sujeito a alterações, por isso use-o por sua conta e risco.

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

Este método exibe uma caixa de mensagens com o texto e a legenda que fornece. O parâmetro uType é qualquer valor que possa fornecer à função MessageBox Win32.

BOOL InPreview (vazio)

Este método devolve TRUE se tiver lançado o assistente no modo "pré-visualização", fornecendo o interruptor /pré-visualização. No modo de pré-visualização, o botão Seguinte nunca é desativado. Este método permite-lhe contornar código no modo de pré-visualização, por exemplo, que pode causar problemas quando não tem dados válidos na página.

HWND GetHwnd (vazio)

Este método devolve o HWND para a caixa de diálogo principal. Use este método com cuidado. Geralmente, a interface de programação da aplicação UDI Wizard foi concebida para que nunca trabalhe diretamente com as pegas das janelas.

IWizardPageView Interface

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

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

Esta interface está disponível para o código na sua página através do método Ver (implementado pelo WizardPageImpl).

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

O Assistente UDI utiliza invólucros, que são realmente fachadas para interagir com os controlos na sua página. A utilização destas fachadas em vez dos controlos reais torna muito mais fácil escrever testes para a sua página, pois pode fornecer fachadas falsas dos seus testes.

Em vez de utilizar este método diretamente, é melhor usar o método do modelo GetControlWrapper, que é fortemente dactilografado - por exemplo:

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

Este método devolve a pega da janela para a sua página. Geralmente, não deve precisar de acesso a esta pega da janela.

HWND GetControl (int itemId)

Se for preciso, pode ligar para este método para obter o cabo da janela para um controlo na sua página. (É melhor chamar a função de modelo GetControlWrapper).

HRESULT Show (vazio)

Este método destina-se apenas ao uso interno.

HRESULT Hide (vazio)

Este método destina-se apenas ao uso interno.

Foco HRESULT (int itemId)

Desa parte para um controlo específico.

IWizardPage * Página (vazio)

Este método destina-se apenas ao uso interno.

IFormController * Formulário (vazio)

Este método destina-se apenas ao uso interno.

HRESULT FocusWizardButton (botão WizardButtons)

Define o foco num dos botões do assistente. WizardButtons tem dois valores: BackButton e NextButton.

HRESULT SetEnable (Botão WizardButtons, ATIVAR BOOL)

Solicite que um dos botões de assistente seja ativado ou desativado. O botão pode não corresponder ao estado que pede. Por exemplo, se executar o Assistente UDI com o interruptor /pré-visualização, os botões estarão sempre ativados. WizardButtons tem dois valores: BackButton e NextButton.

void ShowWarningMessage (mensagem LPCTSTR)

Este método exibe uma mensagem de aviso na parte inferior da área de conteúdo da página. Esta mensagem pode ser a mensagem que quiser.

vazio HideWarningMessage (vazio)

Esconda uma mensagem de aviso que tenha exibido com uma chamada para ShowWarningMessage.

IXmlDocument Interface

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

Esta interface é implementada pelo componente ID_IXmlDocument, que é uma fachada projetada para facilitar o trabalho com documentos XML em C++.

HRESULT Load (nome de ficheiro LPCTSTR)

Este método carrega um documento XML a partir de um ficheiro externo. Devolve S_OK se o ficheiro foi carregado sem erros ou S_FALSE se ocorreu um erro. Quando há um erro, pode obter a mensagem de erro ligando para GetParseErrorMessage.

HRESULT LoadXml (LPCTSTR xml)

Este método carrega um documento XML a partir de uma cadeia em vez de um ficheiro externo. Além da fonte de leitura do XML, o comportamento é o mesmo que o método de Carga.

HRESULT Save (nome de arquivo LPCWSTR)

Este método guarda o documento XML que está na memória de um ficheiro externo.

HRESULT GetParseErrorMessage (LPBSTR pMessage)

Este método devolve uma nova cadeia com a mensagem de erro de carregar o documento XML, se houver. Volta sempre S_OK.

HRESULT SelectNodes (LPCTSTR xpath, IXMLDOMNodeList * *ppNodes)

Este método permite-lhe usar uma expressão XPath para recuperar uma coleção de nós do documento. Volta sempre S_OK.

HRESULT SelectSingleNode (LPCTSTR xpath, IXMLDOMNode * *ppNode)

Este método permite-lhe usar uma expressão XPath para recuperar um nó do documento. Volta sempre S_OK.

HRESULT AddSchema (nome de arquivo LPCTSTR, LPCTSTR ns)

Este método adiciona o nome de um ficheiro de esquema externo que será usado para validar o esquema do seu documento XML quando este estiver carregado. O espaço de nome que fornece é a cadeia que pode usar nas consultas XPath, embora esta não tenha sido testada.

HRESULT AddAttribute (IXMLDOMNode * pNode, nome LPCWSTR, valor LPCWSTR)

Este método adiciona um novo atributo a um nó existente no documento XML. Ver tabela 53.

Mesa 53. HRESULT AddAttribute

Parâmetro Descrição
pNode O nó ao qual pretende adicionar um atributo
Nome Nome do novo atributo
Valor O valor para o novo atributo
HRESULT CreateNode (tipo DOMNodeType, nome LPCWSTR, LPCWSTR ns, IXMLDOMNode * *ppNode)

Chame este método para criar um novo nó:

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

Uma vez criado um novo nó, pode adicioná-lo como uma criança a outro nó, chamando o método de apêndice dos pais.

Funções de auxílio

Criar Função de Modelo de Instância

HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)  

Esta função é definida em IWizardPageContainer.h e fornece um invólucro tipo-seguro sobre o método IWizardPageContainer->CreateInstance - por exemplo:

CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);  

Este código cria um novo componente ID_Directory para recuperar a interface IDirectory desse componente.

Obter Função de Modelo de Serviço

void GetService(IWizardPageContainer *pContainer, I **ppService)  

Esta função é definida em IWizardPageContainer.h e fornece um invólucro tipo-safe sobre o método IWizardPageContainer->GetService — por exemplo:

GetService<ITSVariableBag>(Container(), &pTsBag);  

Esta função recupera o componente da sequência de tarefas, que suporta a interface ITSVariableBag. (Para ITSVariableBag, pode utilizar o método TSVariables da classe WizardPageImpl, em vez disso.)

Referência de esquema de esquema de configuração de design de assistente de UDI

Este ficheiro é consumido pelo UDI Wizard Designer. Um ficheiro separado é criado para cada ficheiro .dll personalizado, que pode conter editores de página de assistentes personalizados, tarefas personalizadas ou validadores personalizados. O ficheiro deve terminar com .config e residir na pasta installation_folder\Bin\Config (onde installation_folder é a pasta em que instalou ODM).

A tabela 54 lista os elementos no ficheiro de configuração do UDI Wizard Designer e as suas descrições. O elemento DesignerConfig é o nó de raiz para esta referência.

Mesa 54. Elementos no ficheiro de configuração do designer de assistentes udi e suas descrições

Nome do Elemento Descrição
DesignerConfig Especifica a raiz para todos os outros elementos
DesignerMappings Agrum um conjunto de elementos de página
Página Especifica um editor de página de assistente a ser carregado no UDI Wizard Designer, que é usado para editar as definições de configuração para uma página de assistente
Param Especifica um parâmetro que é passado para o elemento tarefa ou validador principal e corresponde a um elemento Setter no ficheiro de configuração do Assistente UDI Nota: Os atributos para este elemento são diferentes se o progenitor for o elemento Tarefa ou Validador.
Tarefa Especifica uma tarefa dentro da biblioteca de tarefas
TaskItem Especifica um grupo de parâmetros que são passados para a tarefa
TaskLibrary Agrum um conjunto de elementos de tarefa
Validador Especifica um validador dentro da biblioteca validador
ValidorLibraria Agrum um conjunto de elementos validadores

DesignerConfig

Este elemento especifica a raiz para todos os outros elementos.

Informações do Elemento

A tabela 55 fornece informações sobre o elemento DesignerConfig.

Mesa 55. Informação do ElementoConfig do Designer

Atributo Valor
Número de ocorrências Primeiro: este elemento é necessário.
Elementos-mãe Nenhuma
Conteúdos DesignerMappings, TaskLibrary, ValidatorLibrary
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

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

DesignerMappings

Este elemento agru cria um conjunto de elementos de página.

Informações do Elemento

A tabela 56 fornece informações sobre o elemento DesignerMappings.

Mesa 56. Informação de elementos do DesignerMappings

Atributo Valor
Número de ocorrências Zero ou um dentro do elemento DesignerConfig (Este elemento é opcional se não houver uma página de assistente personalizada no DLL que corresponda a este ficheiro de configuração do UDI Wizard Designer.)
Elementos-mãe DesignerConfig
Conteúdos Página
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

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

Página

Este elemento especifica um editor de página de assistente a ser carregado no UDI Wizard Designer, que por sua vez é utilizado para editar as definições de configuração para uma página de assistente.

Informações do Elemento

A tabela 57 fornece informações sobre o elemento Página.

Mesa 57. Informação do Elemento de Página

Atributo Valor
Número de ocorrências Um ou mais para cada página de assistente definida no elemento DesignerMappings
Elementos-mãe DesignerMappings
Conteúdos Qualquer conteúdo XML bem formado
Atributos de elementos

A tabela 58 lista os atributos do elemento Página e uma descrição para cada um.

Mesa 58. Atributos e Valores Correspondentes para o Elemento página

Atributo Descrição
Descrição Especifica texto que fornece informações sobre o parâmetro, que é exibido no UDI Wizard Designer
Desmontagem de Designers Especifica o nome do ficheiro .dll associado ao editor da página do assistente (O ficheiro .dll deve existir na pasta installation_folder\Bin (onde installation_folder é a pasta na qual instalou O MDT.)
DesignerType Especifica o nome do editor da página de assistentes dentro do ficheiro .dll especificado no atributo DesignerAssembly (Este é o tipo Microsoft .NET para o editor de página de assistente, com o espaço de nome Microsoft .NET totalmente qualificado.)
DisplayName Especifica o nome fácil de utilizar do editor da página, que é exibido no UDI Wizard Designer
DLL Especifica o nome do ficheiro .dll associado à página de assistente (O ficheiro .dll deve existir na pasta installation_folder\Modelos\Distribuição\Ferramentas \ da plataforma (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 é para a versão de 64 bits.) Nota: Certifique-se de que a arquitetura do processador DLL corresponde à arquitetura do processador MDT instalada. Por exemplo, se instalou uma versão de 32 bits de MDT, certifique-se de que utiliza um DLL de 32 bits para a página de assistente.
Imagem Especifica o nome de uma imagem da página que se encontra no formato Gráficos de Rede Portátil (PNG) (O ficheiro .png deve existir na pasta installation_folder\Bin\Images (onde installation_folder é a pasta em que instalou MDT.)
Tipo Especifica o editor da página do assistente e deve corresponder ao nome usado quando a página personalizada foi registada
Observações

O UDI Wizard Designer utiliza o elemento Page como um modelo para criar o XML inicial para um novo assistente. O UDI Wizard Designer executa a validação do esquema para garantir que os elementos da Página e da criança têm um formato válido. Este elemento fornece um mapeamento entre o tipo de página UDI Wizard e as informações de que o UDI Wizard Designer precisa para editar e criar páginas deste tipo usando um editor de página personalizado.

Exemplo

Nenhum.

Param

Este elemento especifica um parâmetro que é passado para o elemento tarefa ou validador principal e corresponde a um elemento Setter no ficheiro de configuração do Assistente UDI.

Nota

Os atributos para este elemento são diferentes se o progenitor for o elemento Tarefa ou Validador.

Informações do Elemento

A tabela 59 fornece informações sobre o elemento Param.

Mesa 59. Informação sobre elementos de param

Atributo Valor
Número de ocorrências Um ou mais para cada elemento-mãe taskItem ou validador
Elementos-mãe TaskItem, Validador
Conteúdos Qualquer conteúdo XML bem formado
Atributos de elementos

A tabela 60 lista os atributos do elemento Param e fornece uma descrição de cada um.

Mesa 60. Atributos e Valores Correspondentes para o Elemento Param

Atributo Descrição
Descrição Especifica texto que fornece informações sobre o parâmetro, que é apresentado na Nota de Designer de Assistente UDI: Este atributo é válido apenas para o elemento Validador.
DisplayName Especifica o nome fácil de utilizar do parâmetro validador, que é apresentado para a página adequada do Assistente UDI no UDI Wizard Designer (este nome é geralmente mais descritivo do que o atributo Nome.) Nota: Este atributo é válido apenas para o elemento Validador.
Nome Especifica o nome do parâmetro que é passado para a tarefa ou validador, dependendo do elemento-mãe (este atributo tornar-se-á o atributo Propriedade num elemento Setter no ficheiro de configuração do Assistente UDI.) Nota: Este parâmetro é utilizado tanto para elementos parentais TaskItem como validadores.
Observações

Nenhum.

Exemplo

Nenhum.

Tarefa

Este elemento especifica uma tarefa dentro da biblioteca de tarefas.

Informações do Elemento

A tabela 61 fornece informações sobre o elemento Tarefa.

Mesa 61. Informação do Elemento de Tarefa

Atributo Valor
Número de ocorrências Um ou mais dentro do elemento TaskLibrary (este elemento não é opcional se o elemento TaskLibrary for especificado.)
Elementos-mãe TaskLibrary
Conteúdos TaskItem
Atributos de elementos

A tabela 62 lista os atributos do elemento Tarefa e fornece uma descrição de cada um.

Mesa 62. Atributos e Valores Correspondentes para o Elemento de Tarefa

Atributo Descrição
Descrição Especifica texto que fornece informações sobre a tarefa, que é exibida no UDI Wizard Designer
DLL Especifica o nome do ficheiro .dll associado à tarefa (O ficheiro .dll deve existir na pasta installation_folder\Modelos\Distribuição\Ferramentas \ da plataforma (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 para a versão de 64 bits.)
Nome Especifica o nome da tarefa, que é exibida na página adequada do Assistente UDI e no UDI Wizard Designer
Tipo Especifica o tipo de tarefa, que está registado no registo de fábrica e utilizado para chamar uma tarefa específica dentro de um ficheiro .dll
Observações

Nenhum.

Exemplo

Nenhum.

TaskItem

Este elemento especifica um grupo de parâmetros que são passados para a tarefa.

Informações do Elemento

O quadro 63 fornece informações sobre o elemento TaskItem.

Mesa 63. Informação do Elemento TaskItem

Atributo Valor
Número de ocorrências Um ou mais para cada elemento de Tarefa
Elementos-mãe Tarefa
Conteúdos Param
Atributos de elementos

A tabela 64 lista os atributos do elemento TaskItem e fornece uma descrição de cada um.

Mesa 64. Atributo e Valores Correspondentes para o Elemento TaskItem

Atributo Descrição
Tipo Especifica o tipo de elemento que será criado no ficheiro de configuração do Assistente UDI. Será criado um elemento XML que corresponda ao valor deste atributo. Por exemplo, se o valor deste atributo for 'Ficheiro',então será criado um elemento De ficheiro no ficheiro de configuração do Assistente UDI.

Atualmente, os únicos valores suportados são:

- Ficheiro, que requer dois elementos param criança (um elemento param child com o atributo Nome definido para Fonte e outro elemento param child com o atributo Nome definido para Dest)
- Setter, que requer um elemento param criança
Observações

Nenhum.

Exemplo

Nenhum.

TaskLibrary

Este elemento agruca um conjunto de elementos de Tarefa.

Informações do Elemento

O quadro 65 fornece informações sobre o elemento TaskLibrary.

Mesa 65. Informação do Elemento TaskLibrary

Atributo Valor
Número de ocorrências Zero ou um dentro do elemento DesignerConfig (Este elemento é opcional se não houver tarefas personalizadas no DLL que correspondam a este ficheiro de configuração do UDI Wizard Designer.)
Elementos-mãe DesignerConfig
Conteúdos Tarefa
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo
<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 um validador dentro da biblioteca validador.

Informações do Elemento

A tabela 66 fornece informações sobre o elemento Validador.

Mesa 66. Informação do Elemento Validador

Atributo Valor
Número de ocorrências Zero ou mais dentro do elemento ValidatorLibrary (este elemento é opcional.)
Elementos-mãe ValidorLibraria
Conteúdos Param
Atributos de elementos

A tabela 67 lista os atributos do elemento Validador e fornece uma descrição de cada um.

Mesa 67. Atributos e Valores Correspondentes para o Elemento Validador

Atributo Descrição
Descrição Especifica texto que fornece informações sobre o validador, que é exibido no UDI Wizard Designer
DisplayName Especifica o nome fácil de utilizar do validador apresentado no UDI Wizard Designer (este nome é geralmente mais descritivo do que o atributo Nome.)
DLL Especifica o nome do ficheiro .dll associado ao validador (O ficheiro .dll deve existir na pasta installation_folder\Modelos\Distribuição\Ferramentas \ da plataforma (onde installation_folder é a pasta em que instalou MDT e a plataforma é x86 para a versão de 32 bits ou x64 para a versão de 64 bits.)
Nome Especifica o nome do validador, que é apresentado na página adequada do Assistente UDI e no UDI Wizard Designer
Tipo Especifica o tipo de validador, que é registado com o fator de registo e utilizado para chamar um validador específico dentro de um ficheiro .dll
Observações

Nenhum.

Exemplo

Nenhum.

ValidorLibraria

Este elemento agru cria um conjunto de elementos validadores.

Informações do Elemento

O quadro 68 fornece informações sobre o elemento ValidatorLibrary.

Mesa 68. Informação do Elemento DeLíquia ValidorLibrary

Atributo Valor
Número de ocorrências Zero ou um dentro do elemento DesignerConfig (Este elemento é opcional se não houver validadores personalizados no DLL que correspondam a este ficheiro de configuração do UDI Wizard Designer.)
Elementos-mãe DesignerConfig
Conteúdos Validador
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

<DesignerConfig > + <TaskLibrary > - <ValidatorLibrary > +<Validator DLL="" Descrição="Requer texto num campo" Tipo="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty" > +<Validator DLL="Descrição="Não permite que certos caracteres estejam num campo" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars" > +<Validador DLL="Descrição="Deve seguir um padrão pré-definido" Tipo="Microsoft.Wizard.Validation.RegEx" Name="NamedPattern" > +<Validator DLL="Descrição="" Descrição=" Descrição=""Descrição="" Descrição=""Requerer que os conteúdos correspondam a uma expressão regular" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx" > </ValidatorLibrary > + <DesignerMappings ></DesignerConfig>

Referência do designer de assistentes udi

Controlos

Os controlos utilizados para criar editores de página de assistentes personalizados para utilização no UDI Wizard Designer são instâncias WPF UserControl. A tabela 69 lista os controlos que pode utilizar para criar editores de páginas de assistentes personalizados.

Mesa 69. Controlos que podem ser usados para criar editores de página de assistentes personalizados

Controlar Description
Controlo de Recolha Este controlo é utilizado para editar dados armazenados no elemento Data dentro de um elemento Page.
FieldElementControl Este controlo é utilizado para editar um campo, que está tipicamente ligado a um controlo TextBox na página .xaml.
SetterControl Este controlo é utilizado para modificar o valor de um elemento setter no ficheiro de configuração do Assistente UDI.

Controlo de Recolha

Este controlo fornece muitas capacidades para editar dados. A melhor maneira de aprender a usar este controlo é olhar para a amostra, que mostra como editar dados sob o elemento Dados de uma página. Em particular, a amostra mostra como adicionar, remover e editar itens neste controlo.

FieldElementControl

Utilize este controlo para editar um campo, que está tipicamente ligado a um controlo TextBox na página .xaml.

Exemplo

O seguinte excerto de um ficheiro .xaml ilustra a utilização do FieldElementControl para configurar o valor predefinido para um campo numa página de assistente utilizando um controlo de TextBox para crianças:

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

Esta propriedade de cadeia contém informações para ligar o FieldElementControl ao XML subjacente para o campo. A ligação é feita a uma propriedade da interface do editor de página. O seguinte excerto de um ficheiro .xaml ilustra a utilização da propriedade FieldData:

FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"  

Neste excerto, a interface do editor de página chama-se ControlRoot e é especificada no parâmetro ElementName. A ligação é realizada para a propriedade DataContext.Location da interface do editor de página ControlRoot. DataContext é um modelo de visualização que aponta para o elemento Página dentro do ficheiro de configuração do Assistente UDI. A localização é uma propriedade da vista que devolve uma lista das localizações possíveis e é definida por um elemento de Dados dentro do ficheiro de configuração do Assistente UDI. Cada local é definido por um elemento DataItem dentro do ficheiro de configuração do Assistente UDI.

Texto do cabeçalho

Esta propriedade de cadeia permite especificar um cabeçalho para o controlo FieldElementControl. O cabeçalho funciona como um título para o controlo e é formatado como texto cor-de-laranja arrojado imediatamente acima do controlo.

InstruçãoTexto

Esta propriedade de cadeia permite especificar texto informativo para o controlo FieldElementControl. Normalmente, o texto é utilizado para fornecer uma breve descrição do campo e explicar como configurar o campo afeta a página de assistente correspondente.

HideEnableButton

Esta propriedade Boolean permite controlar a visibilidade do botão que altera o estado entre Desbloqueado e Bloqueado (ativado ou desativado). Se definido para:

  • Verdade, o botão não é visível

  • Falso, o botão é visível (Este é o valor padrão.)

HideDefaultTab

Esta propriedade Boolean permite controlar a visibilidade da secção que contém o controlo utilizado para definir o valor padrão. Embora a propriedade se refira a um separador, não há separador no FieldElementControl, mas sim uma secção que pode ser escondida. Se definido para:

  • Verdade, a secção não é visível

  • Falso, a secção é visível (Este é o valor padrão.)

HideBorder

Esta propriedade Boolean permite controlar a visibilidade da fronteira em torno do controlo de campo. Se definido para:

  • Verdade, a fronteira não é visível

  • Falso, a fronteira é visível (Este é o valor padrão.)

HideImage

Esta propriedade Boolean permite controlar a visibilidade da imagem que a propriedade FieldImageSource configura. Se definido para:

  • Verdade, a imagem não é visível

  • Falso, a imagem é visível (Este é o valor padrão.)

HideValidationTab

Esta propriedade Boolean permite controlar a visibilidade da secção onde a lista de validadores é gerida. Embora a propriedade se refira a um separador, não há separador no FieldElementControl, mas sim uma secção que pode ser escondida. Se definido para:

  • Verdade, a secção não é visível

  • Falso, a secção é visível (Este é o valor padrão.)

Ocultação

Esta propriedade Boolean permite-lhe controlar a visibilidade da secção em que configura a legenda do resumo do campo. A legenda e o valor correspondente do campo são apresentados num tipo de página de assistente SumárioPage num fluxo de fase. Embora a propriedade se refira a um separador, não há separador no FieldElementControl, mas sim uma secção que pode ser escondida. Se definido para:

  • Verdade, a secção não é visível

  • Falso, a secção é visível (Este é o valor padrão.)

HideTaskSequenceTab

Esta propriedade Boolean permite-lhe controlar a visibilidade da secção na qual configura a variável de sequência de tarefa que corresponde ao campo. Embora a propriedade se refira a um separador, não há separador no FieldElementControl, mas sim uma secção que pode ser escondida. Se definido para:

  • Verdade, a secção não é visível

  • Falso, a secção é visível (Este é o valor padrão.)

SetterControl

Utilize este controlo para modificar o valor de um elemento Setter no ficheiro de configuração do Assistente UDI. Este controlo contém um controlo infantil utilizado para modificar o valor do elemento setter.

Exemplo

O seguinte excerto de um ficheiro .xaml ilustra a utilização do SetterControl para modificar um elemento Setter chamado KeyLocationSetter utilizando um controlo de TextBox para crianças.

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

Você precisa ligar isto a uma propriedade da sua vista ou modelo de visualização que se conecta ao setter. Fazê-lo é semelhante ao modo como se liga a um campo, como descrito para o FieldElementControl.

Texto do cabeçalho

Esta propriedade permite definir o texto que aparecerá no cabeçalho do controlo. Pense nesta propriedade como um título para o controlo; por padrão, aparece como texto cor-de-laranja ousado.

InstruçãoTexto

Desa esta propriedade ao texto que pretende aparecer abaixo do cabeçalho — normalmente texto de instrução que diz ao utilizador do seu editor personalizado quando e por que razão eles gostariam de modificar o comportamento do campo.

Interfaces

A tabela 70 lista as interfaces que pode utilizar para criar editores de páginas de assistentes personalizados.

Mesa 70. Interfaces que podem ser usadas para criar editores de página de assistentes personalizados

Interface Descrição
IDataService Utilize esta interface para ligar campos aos elementos data no ficheiro de configuração do Assistente UDI.
IMessageBoxService Esta interface fornece acesso a métodos que pode utilizar para exibir caixas de mensagens.

IDataService

Esta interface contém várias propriedades e métodos, mas há apenas uma propriedade que você gosta de precisar. Aquela propriedade é a única documentada aqui.

Pode utilizar a injeção de dependência para obter um ponteiro para esta interface utilizando código como este na sua classe:

[Dependency]  
public IDataService DataService { get; set; }  
Propriedades

A tabela 71 lista as propriedades da interface IDataService.

Mesa 71. Propriedades para a interface iDataService

Interface Descrição
Página atual Esta propriedade fornece acesso aos elementos, atributos e valores XML abaixo do contexto da página atual sendo editada no ficheiro de configuração do Assistente UDI
Página atual
XElement CurrentPage { get; set; }  

Esta propriedade fornece acesso ao XML para a página atual. Nunca deve definir esta propriedade, mas é livre de modificar o XML para a sua página. O editor da página de amostras mostra exemplos de modificação do XML. Você usa esta propriedade principalmente quando você tem dados personalizados. Para campos e propriedades (setters), você pode usar controlos pré-construídos que cuidam de todos os detalhes.

IMessageBoxService

Esta interface fornece acesso a métodos que pode utilizar para exibir caixas de mensagens. Pode estar a perguntar-se por que precisa de uma interface para exibir uma caixa de mensagens. A realidade é que não: a Microsoft usa esta interface com código, porque ajuda na escrita de testes automatizados para páginas de designers.

No entanto, a utilização destes métodos proporciona um benefício útil: As caixas de diálogo têm sempre o "proprietário" definido para o Assistente UDI, que garante que a caixa de diálogo é agrupada corretamente com a janela principal.

Pode utilizar a injeção de dependência para obter um ponteiro para esta interface utilizando código como este na sua classe:

[Dependency]  
public IMessageBoxService MessageBoxes { get; set; }  
Métodos

A tabela 72 lista os métodos para a interface IMessageBoxService.

Mesa 72. Métodos para a Interface IMessageBoxService

Método Descrição
ShowMessageBox Este método sobrecarregado é utilizado para exibir uma caixa de mensagens com os seguintes membros:

- ShowMessageBox (mensagem de corda, legenda de cordas, ícone messageBoxImage)
- ShowMessageBox (mensagem de cadeia, legenda de cordas, botão MessageBoxButton, ícone MessageBoxImage)
- ShowMessageBox (exceção de exceção)
ShowDialogWindow Utilize este método para criar uma nova caixa de diálogo.
ShowWizardWindow Utilize este método para exibir um editor personalizado dentro de uma caixa de diálogo que inclui botões Next e Back para navegação.
ShowMessageBox

Este método exibe uma caixa de mensagens que é uma criança do editor de página de assistente personalizado. Este membro está sobrecarregado: A tabela 73 contém uma lista dos membros e uma breve descrição de cada um. Para obter informações completas sobre cada membro (incluindo sintaxe, utilização e exemplos), consulte a secção que corresponde a cada membro.

Mesa 73. Membros sobrecarregados para o método ShowMessagBox

Membro Description
ShowMessageBox (mensagem de corda, legenda de cordas, ícone messageBoxImage) Exibe uma caixa de mensagens com um ícone e um botão OK
ShowMessageBox (mensagem de cadeia, legenda de cordas, botão MessageBoxButton, ícone MessageBoxImage) Exibe uma caixa de mensagens com um ícone e diferentes combinações possíveis de botões
ShowMessageBox (exceção de exceção) Exibe uma caixa de mensagens que fornece informações sobre uma exceção e tem um botão OK
ShowMessageBox (mensagem de corda, legenda de cordas, ícone messageBoxImage)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);  

Este método exibe uma caixa de mensagens com um botão OK. Ver a tabela 74.

Mesa 74. Parâmetros para o método ShowMessageBox (mensagem de corda, legenda de cordas, ícone messageBoxImage)

Parâmetro Descrição
Mensagem A mensagem a exibir na área de conteúdo da caixa de mensagens
legenda O texto para mostrar na barra de título da caixa de diálogo
ícone O tipo de ícone para mostrar na caixa de mensagens
ShowMessageBox (mensagem de cadeia, legenda de cordas, botão MessageBoxButton, ícone MessageBoxImage)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);  

Este método exibe uma caixa de mensagens com o conjunto de botões que deseja mostrados e relata qual o botão que clicou. Ver tabela 75.

Mesa 75. Parâmetros para o ShowMessageBox (mensagem de corda, legenda de cordas, botão MessageBoxButton, ícone MessageBoxImage)

Parâmetro Descrição
Mensagem A mensagem a exibir na área de conteúdo da caixa de mensagens
legenda O texto para mostrar na barra de título da caixa de diálogo
botão Que botões para mostrar
ícone O tipo de ícone para mostrar na caixa de mensagens
ShowMessageBox (exceção de exceção)
void ShowMessageBox(Exception exception);  

Este método exibe uma caixa de mensagens que informa informações sobre uma exceção. Esta caixa de mensagens tem um único botão OK. Ver a mesa 76.

Mesa 76. Parâmetros para o método ShowMessageBox (exceção exceção)

Parâmetro Descrição
exceção A exceção que pretende reportar (A caixa de diálogo utiliza exceção. Mensagem como o conteúdo.)
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);  

Este método cria uma nova caixa de diálogo, sendo o conteúdo do texto que fornece no parâmetro viewType. O UDI Designer cria uma nova instância deste tipo e envolve-o numa caixa de diálogo que tem botões OK e Cancel.

Transmite dados ao seu controlo utilizando o parâmetro dialogPayload. A solução SampleEditor no diretório SDK tem um exemplo de como utilizar esta funcionalidade.

ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);  

Este método permite-lhe exibir um editor personalizado dentro de uma caixa de diálogo que inclui botões Next e Back para navegação. A Microsoft não forneceu uma amostra para como utilizar este método.

Referência de esquema de esquema de configuração de assistente UDI

Este ficheiro é consumido pelo Assistente UDI e configurado pelo UDI Wizard Designer. Este ficheiro é utilizado para configurar o:

  • Páginas de assistente exibidas no Assistente UDI

  • A sequência das páginas de assistente no Assistente UDI

  • Definições para os campos em cada página de assistente

  • Grupos de estágio disponíveis no UDI Wizard Designer

  • Estágios disponíveis dentro de cada assistente de implantação no UDI Wizard Designer

    77 lista os elementos no Ficheiro de Configuração do Assistente UDI e as suas descrições. O elemento Assistente é o nó de raiz para esta referência.

Mesa 77. Elementos no ficheiro de configuração do assistente udi e suas descrições

Nome do elemento Descrição
Dados Agrum os elementos DataItem individuais dentro de um elemento Page e é nomeado pelo atributo Nome.
DataItem Agrupem os elementos setter individuais dentro de um elemento Page. Pode criar dados hierárquicos incluindo um ou mais elementos de Dados dentro de um elemento DataItem. Cada elemento DataItem representa um item individual. Por exemplo, uma lista de unidades disponíveis pode ter um DataItem para o nome de exibição e outro elemento DataItem para a letra de unidade correspondente.
Predefinição Especifica um valor predefinido para o campo especificado no campo-mãe ou no elemento RadioGroup. O padrão é definido para o valor agrupado por este elemento.
DLL Especifica um DLL que deve ser carregado e referenciado pelo Assistente UDI e pelo UDI Wizard Designer.
DLLs Agrum os elementos DLL individuais.
Erro Especifica um possível código de erro que pode uma tarefa pode retornar. O valor do código de erro é devolvido pelo HRESULT da tarefa e está preso por este elemento para fornecer informações de erro mais específicas.
Código de Saída Especifica um possível código de saída para uma tarefa. Os códigos de saída são códigos de devolução que a tarefa espera. Crie um elemento ExitCode para cada possível código de saída. Caso contrário, pode especificar um * asterisco () no atributo Valor para lidar com códigos de devolução não listados noutros elementos do ExitCode.
Códigos de Saída Agrum um conjunto de elementos ExitCode e Error para um elemento de tarefa ou um elemento de Erro.
Campo Especifica uma instância de um controlo num elemento page que é usado para fornecer personalização com XML. Nem todos os controlos permitem a personalização com XML — apenas controlos que utilizam o elemento Campo.
Campos Agrum os elementos de campo individuais dentro de um elemento page.
Ficheiro Especifica a origem e o destino para uma operação de cópia de ficheiros utilizando o tipo de tarefa Microsoft.Wizard.CopyFilesTask. Pode incluir um elemento ficheiro separado para copiar mais do que um ficheiro numa única tarefa.
Página Especifica uma instância de uma página e inclui todas as definições de configuração para a página.
PageRef Especifica uma referência a uma instância de uma página dentro de uma fase dentro de um StageGroup.
Páginas Agrum os elementos de página individual.
RadioGrupo Especifica um grupo de botões de rádio dentro de um elemento de campo.
Grupo de Palco Especifica um grupo de uma ou mais fases.
Grupos de Palco Agrucha um conjunto de grupos de palco dentro de um ficheiro de configuração do Feiticeiro UDI.
Setter Especifica uma definição de imóvel de um valor para um imóvel que está nomeado na propriedade.
Fase Especifica uma fase dentro de um StageGroup e contém um ou mais elementos PageRef.
Estilo Agrupam os elementos individuais do setter que configuram o olhar e a sensação do Feiticeiro UDI, incluindo o título mostrado no topo do assistente e a imagem de banner mostrada no Assistente UDI.
Tarefa Especifica uma tarefa que deve ser executada na página especificada no elemento página-mãe.
Tasks Agrum um conjunto de tarefas para um elemento page.
Validador Especifica um validador para o controlo de campo especificado no elemento campo-mãe.
Feiticeiro Especifica a raiz para todos os outros elementos.

Dados

Este elemento agruca os elementos DataItem individuais dentro de um elemento Page e é nomeado pelo atributo Nome.

Informações do Elemento

O quadro 78 fornece informações sobre o elemento Data.

Mesa 78. Informação sobre elementos de dados

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento page (este elemento é opcional.)
Elementos-mãe Página, DataItem
Conteúdos DataItem, Setter
Atributos de elementos

A tabela 79 lista os atributos do elemento Dados e fornece uma descrição de cada um.

Mesa 79. Atributos e Valores Correspondentes para o Elemento de Dados

Atributo Descrição
Nome Especifica o nome do elemento Dados
Observações

O atributo Nome permite que o código recupere um conjunto específico de dados.

Exemplo

Nenhum.

DataItem

Este elemento agrupam os elementos setter individuais dentro de um elemento Page. Pode criar dados hierárquicos incluindo um ou mais elementos de Dados dentro de um elemento DataItem. Cada elemento DataItem representa um item individual. Por exemplo, uma lista de unidades disponíveis pode ter um DataItem para o nome de exibição e outro elemento DataItem para a letra de unidade correspondente.

Informações do Elemento

O quadro 80 fornece informações sobre o elemento DataItem.

Mesa 80. Informação do Elemento DataItem

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento de Dados (este elemento é opcional.)
Elementos-mãe Dados
Conteúdos Dados, Setter
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

Nenhum.

Predefinição

Este elemento especifica um valor predefinido para o campo especificado no campo-mãe ou no elemento RadioGroup. O padrão é definido para o valor que este elemento se ajusta.

Informações do Elemento

A tabela 81 fornece informações sobre o elemento Predefinido.

Mesa 81. Informação do Elemento Predefinido

Atributo Valor
Número de ocorrências Zero ou mais dentro de um elemento field ou RadioGroup (este elemento é opcional.)
Elementos-mãe Field, RadioGroup
Conteúdos Pode ser qualquer conteúdo XML bem formado, mas é tipicamente texto padrão
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

No exemplo seguinte, o padrão para o campo TimeZone é definido como "Tempo Padrão do Pacífico":

<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">  
  <Default>Pacific Standard Time</Default>  

DLL

Este elemento especifica um DLL para o Assistente UDI e o UDI Wizard Designer carregar e fazer referência.

Informações do Elemento

A tabela 82 fornece informações sobre o elemento DLL.

Mesa 82. Informação sobre elementos DLL

Atributo Valor
Número de ocorrências Um ou mais dentro do elemento DLLs
Elemento-mãe DLLs
Conteúdos Nenhum conteúdo permitido para este elemento
Atributos de elementos

A tabela 83 lista os atributos do elemento DLL e fornece uma descrição de cada um.

Mesa 83. Atributos e Valores Correspondentes para o Elemento DLL

Atributo Descrição
Name Especifica o nome do DLL para o Assistente UDI e UDI Wizard Designer para referência
Observações

Nenhum.

Exemplo
<DLLs>  
  <DLL Name="OSDRefreshWizard.dll" />   
  <DLL Name="SharedPages.dll" />  
</DLLs>  

DLLs

Este elemento agru está agrum os elementos DLL individuais.

Informações do Elemento

O quadro 84 fornece informações sobre o elemento DLLs.

Mesa 84. Informação sobre elementos dLLs

Atributo Valor
Número de ocorrências Um
Elementos-mãe Feiticeiro
Conteúdos DLL
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo
<DLLs>  
   <DLL Name="OSDRefreshWizard.dll" />  
   <DLL Name="SharedPages.dll" />   
</DLLs>  

Erro

Este elemento especifica um possível código de erro que uma tarefa pode devolver. O valor do código de erro é devolvido e preso pelo HRESULT da tarefa para fornecer informações de erro mais específicas.

Informações do Elemento

A tabela 85 fornece informações sobre o elemento Erro.

Mesa 85. Informação do Elemento de Erro

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento ExitCode (este elemento é opcional.)
Elementos-mãe Códigos de Saída
Conteúdos Qualquer conteúdo XML bem formado
Atributos de elementos

A tabela 86 lista os atributos do elemento Erro e fornece uma descrição de cada um.

Atributo Descrição
Estado Especifica o estado de retorno de uma tarefa que encontrou um erro. Normalmente, o valor deste atributo é definido como Error. Este valor é apresentado na coluna State na página de assistente no Assistente UDI.
Texto Especifica o texto descritivo sobre a condição de erro que a tarefa encontrou.
Tipo Especifica se este elemento representa um erro, um aviso ou um sucesso. O valor especificado no Tipo deve ser único dentro de um elemento ExitCodes. São valores válidos para este elemento:

- 0.O elemento representa um sucesso.
- 1. O elemento representa um aviso.
- -1. O elemento representa um erro.
Valor Especifica o valor do código que a tarefa devolveu como valor numérico. Especificar o valor de um asterisco (*) indica o elemento padrão para códigos de devolução que não estão listados em outros elementos de Erro.
Observações

Nenhum.

Exemplo

Nenhum.

Código de Saída

Este elemento especifica um possível código de saída para uma tarefa. Os códigos de saída são códigos de devolução que a tarefa espera. Crie um elemento ExitCode para cada possível código de saída. Caso contrário, pode especificar um * asterisco () no atributo Valor para lidar com códigos de devolução não listados noutros elementos do ExitCode.

Informações do Elemento

A tabela 87 fornece informações sobre o elemento Código de Saída.

Mesa 87. Informações sobre elementos do Código de Saída

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento ExitCodes (este elemento é opcional.)
Elementos-mãe Códigos de Saída
Conteúdos Pelo menos um elemento ExitCode e zero ou mais elementos de erro
Atributos de elementos

A tabela 88 lista os atributos do elemento ExitCode e fornece uma descrição de cada um.

Mesa 88. Atributos e valores correspondentes para o elemento Código de Saída

Atributo Description
Estado Especifica o estado de retorno de uma tarefa. O valor deste atributo é apresentado na coluna State na página de assistente correspondente no Assistente UDI. Pode utilizar quaisquer valores para este atributo que sejam significativos para a sua tarefa. São valores típicos utilizados para este atributo:

- Sucesso
- Aviso
- Erro
Texto Especifica o texto descritivo sobre o código existente da tarefa.
Tipo Especifica se este elemento representa um erro, um aviso ou um sucesso. O valor especificado no tipo deve ser único dentro de um elemento ExitCodes. São valores válidos para este elemento:

- 0. O elemento representa um sucesso.
- 1. O elemento representa um aviso.
- -1. O elemento representa um erro.
Valor Especifica o valor do código que a tarefa devolveu como valor numérico. Especificar o valor de um asterisco (*) indica o elemento padrão para códigos de devolução que não estão listados em outros elementos do ExitCode.
Observações

Nenhum.

Exemplo

Nenhum.

Códigos de Saída

Este elemento agruca um conjunto de elementos ExitCode e Error para uma tarefa ou um elemento de Erro.

Informações do Elemento

O quadro 89 fornece informações sobre o elemento ExitCodes.

Mesa 89. Informações sobre elementos de saída Códigos

Atributo Valor
Número de ocorrências Um dentro de cada elemento de Tarefa
Elementos-mãe Tarefa
Conteúdos Erro, Código de Saída
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

Nenhum.

Campo

Este elemento especifica uma instância de um controlo num elemento page utilizado para fornecer personalização com XML. Nem todos os controlos permitem a personalização com XML — apenas controlos que utilizam o elemento Campo.

Informações do Elemento

A tabela 90 fornece informações sobre o elemento Campo.

Mesa 90. Informação sobre elementos de campo

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento de Campo (este elemento é opcional.)
Elementos-mãe Campos
Conteúdos Padrão, Validador
Atributos de elementos

A tabela 91 lista os atributos do elemento Campo e fornece uma descrição de cada um.

Mesa 91. Atributos e Valores Correspondentes para o Elemento de Campo

Atributo Descrição
Ativado Especifica se o campo está ativado para a entrada do utilizador (o atributo pode ser definido como Verdadeiro ou Falso.)
Nome Especifica o nome do campo
Resumo Especifica o texto descritivo exibido na página do assistente sumário para o valor que este campo define
VarName Especifica a sequência de tarefa de nome variável lido ou configurado usando o campo no elemento campo-mãe
Observações

Este elemento pode conter elementos padrão zero ou mais e elementos validadores zero ou mais.

Exemplo

Nenhum.

Campos

Este elemento agrum os elementos de campo individuais dentro de um elemento page.

Informações do Elemento

A tabela 92 fornece informações sobre o elemento Fields.

Mesa 92. Informação sobre elementos de campo

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento page (este elemento é opcional.)
Elementos-mãe Página
Conteúdos Field, RadioGroup
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

Nenhum.

Arquivo

Este elemento especifica a origem e o destino para uma operação de cópia de ficheiros utilizando o tipo de tarefa Microsoft.Wizard.CopyFilesTask. Pode incluir um elemento ficheiro separado para copiar mais do que um ficheiro numa única tarefa.

Informações do Elemento

A tabela 93 fornece informações sobre o elemento Ficheiro.

Mesa 93. Informação do Elemento de Arquivo

Atributo Valor
Número de ocorrências Um ou mais para cada tarefa que tem um tipo de tarefa de Microsoft.Wizard.CopyFilesTask
Elementos-mãe Tarefa
Conteúdos Nenhuma
Atributos de elementos

A tabela 94 lista os atributos do elemento Ficheiro e fornece uma descrição de cada um.

Mesa 94. Atributos e Valores Correspondentes para o Elemento Ficheiro

Atributo Descrição
Dest Especifica o caminho totalmente qualificado ou relativo para a pasta de destino para o ficheiro especificado no atributo Fonte. As variáveis ambientais são permitidas como parte do caminho.
Origem Especifica o caminho totalmente qualificado ou relativo ao ficheiro de origem que o tipo de tarefa Microsoft.Wizard.CopyFilesTask copia. Este atributo suporta caracteres wildcard para que vários ficheiros possam ser copiados usando um único elemento de Ficheiro. As variáveis ambientais são permitidas como parte do caminho.
Observações

Nenhum.

Exemplo

Nenhum.

Página

Este elemento especifica uma instância de uma página e inclui todas as definições de configuração para a página.

Informações do Elemento

A tabela 95 fornece informações sobre o elemento Página.

Mesa 95. Informação do Elemento de Página

Atributo Valor
Número de ocorrências Um ou mais dentro de cada elemento páginas
Elementos-mãe Páginas
Conteúdos Dados, Campos, Setter, Tarefas
Atributos de elementos

A tabela 96 lista os atributos do elemento Página e fornece uma descrição de cada um.

Mesa 96. Atributos e Valores Correspondentes para o Elemento página

Atributo Descrição
DisplayName Especifica o nome fácil de utilizar da página de assistente apresentada no UDI Wizard Designer. Este nome é geralmente mais descritivo do que o atributo Nome.
Nome Especifica o nome da página de assistente exibida no UDI Wizard Designer.
Tipo Especifica o tipo de página de assistente que se relaciona diretamente com uma página de assistente específica dentro de um DLL.
Observações

Nenhum.

Exemplo

Nenhum.

PageRef

Este elemento especifica uma referência a uma instância de uma página dentro de uma fase dentro de um StageGroup.

Informações do Elemento

A tabela 97 fornece informações sobre o elemento PageRef.

Mesa 97. Informações do elemento de páginaRef

Atributo Valor
Número de ocorrências Um ou mais dentro de um elemento de palco
Elementos-mãe Fase
Conteúdos Nenhuma
Atributos de elementos

A tabela 98 lista o atributo do elemento PageRef e fornece uma descrição do mesmo.

Mesa 98. Atributos e Valores Correspondentes para o Elemento PageRef

Atributo Descrição
Página Especifica a instância de uma página dentro de uma fase dentro de um StageGroup. Desa esta avaliação ao atributo Nome de um elemento página.
Observações

Nenhum.

Exemplo

Nenhum.

Páginas

Este elemento agru está agrum os elementos de página individual.

Informações do Elemento

A tabela 99 fornece informações sobre o elemento Páginas.

Mesa 99. Informação do elemento de página

Atributo Valor
Número de ocorrências Um
Elementos-mãe Feiticeiro
Conteúdos Página
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

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

RadioGrupo

Este elemento especifica um grupo de botões de rádio com um elemento de Campo.

Informações do Elemento

O quadro 100 fornece informações sobre o elemento RadioGroup.

Mesa 100. Informação do Elemento do RadioGroup

Atributo Valor
Número de ocorrências Zero ou mais dentro de um elemento Fields (este elemento é opcional.)
Elementos-mãe Campos
Conteúdos Predefinição
Atributos de elementos

A tabela 101 lista os atributos do elemento RadioGroup e fornece uma descrição de cada um.

Mesa 101. Atributos e Valores Correspondentes para o Elemento RadioGroup

Atributo Descrição
Bloqueado Especifica se o grupo de botões de rádio está ativado para a entrada do utilizador. O atributo pode ser definido para:

- É verdade. Especifica que os botões de rádio estão desactivdos e que os utilizadores não podem selecionar um botão de rádio no grupo.
- Falso. Especifica que os botões de rádio estão ativados e os utilizadores podem selecionar um botão de rádio no grupo.
Nome Especifica o nome do grupo de opções de rádio.
Observações

Nenhum.

Exemplo

Nenhum.

Grupo de Palco

Este elemento especifica um grupo de estágio de implantação.

Informações do Elemento

O quadro 102 fornece informações sobre o elemento StageGroup.

Mesa 102. Informação do Elemento do Grupo de Estágios

Atributo Valor
Número de ocorrências Um ou mais dentro de um elemento StageGroups
Elementos-mãe Grupos de Palco
Conteúdos Fase
Atributos de elementos

A tabela 103 lista os atributos do elemento StageGroup e uma descrição do atributo.

Mesa 103. Atributos e Valores Correspondentes para o Elemento Grupo de Estágio

Atributo Descrição
DisplayName Especifica o nome fácil de utilizar do grupo de palco apresentado no UDI Wizard Designer. Este nome é geralmente mais descritivo do que o atributo Nome.
Observações

Nenhum.

Exemplo

Nenhum.

Grupos de Palco

Este elemento agruma um conjunto de grupos de palco dentro de um ficheiro de configuração do Feiticeiro UDI.

Informações do Elemento

O quadro 104 fornece informações sobre o elemento StageGroups.

Mesa 104. Informação do Elemento de Grupos de Estágios

Atributo Valor
Número de ocorrências Zero ou um dentro de um elemento assistente
Elementos-mãe Feiticeiro
Conteúdos Grupo de Palco
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo

Nenhum.

Setter

Este elemento especifica uma definição de imóvel para o valor de um imóvel que está nomeado na propriedade.

Informações do Elemento

A tabela 105 fornece informações sobre o elemento Setter.

Mesa 105. Informação do Elemento Setter

Atributo Valor
Número de ocorrências Zero ou mais dentro de cada elemento-mãe (este elemento é opcional.)
Elementos-mãe Dados, DataItem, Página, Estilo, Tarefa, Validador
Conteúdos Contém um valor de cadeia no atributo Propriedade
Atributos de elementos

A tabela 106 lista o atributo do elemento Setter e apresenta uma descrição do mesmo.

Mesa 106. Atributos e Valores Correspondentes para o Elemento Setter

Atributo Descrição
Propriedade Especifica o nome da propriedade que está sendo definido. O nome da propriedade é definido para o valor que este atributo brackets.
Observações

Nenhum.

Exemplo

Nenhum.

Fase

Este elemento especifica um Estágio dentro de um Grupo de Palco e contém um ou mais elementos PageRef.

Informações do Elemento

A tabela 107 fornece informações sobre o elemento palco.

Mesa 107. Informação do Elemento de Palco

Atributo Valor
Número de ocorrências Um ou mais dentro de um elemento do StageGroup
Elementos-mãe Grupo de Palco
Conteúdos PageRef
Atributos de elementos

A tabela 108 lista os atributos do elemento Stage e fornece uma descrição de cada um.

Mesa 108. Atributos e Valores Correspondentes para o Elemento de Palco

Atributo Descrição
DisplayName Especifica o nome fácil de utilizar da página de assistente apresentada no UDI Wizard Designer. Este nome é geralmente mais descritivo do que o atributo Nome.
Nome Especifica o nome do palco. O valor deste elemento é utilizado ao iniciar o Assistente UDI com o parâmetro /fase: linha de comando do nome.
Observações

Nenhum.

Exemplo

Nenhum.

Estilo

Este elemento agrupam os elementos setter individuais que configuram o olhar e a sensação do Feiticeiro UDI, incluindo o título mostrado no topo do assistente e a imagem de banner mostrada no Assistente UDI.

Informações do Elemento

A tabela 109 fornece informações sobre o elemento Estilo.

Mesa 109. Informação de elementos de estilo

Atributo Valor
Número de ocorrências Um
Elementos-mãe Feiticeiro
Conteúdos Setter
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

Exemplo
<Style>  
  <Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>   
  <Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>   
</Style>  

Tarefa

Este elemento especifica uma tarefa que deve ser executada na página especificada no elemento página-mãe.

Informações do Elemento

A tabela 110 fornece informações sobre o elemento Tarefa.

Mesa 110. Informação do Elemento de Tarefa

Atributo Valor
Número de ocorrências Um ou mais dentro de um elemento de Tarefas
Elementos-mãe Tasks
Conteúdos Códigos de Saída, Arquivo, Setter
Atributos de elementos

A tabela 111 lista os atributos do elemento Tarefa e fornece uma descrição de cada um.

Mesa 111. Atributos e Valores Correspondentes para o Elemento de Tarefa

Atributo Descrição
Dependon Especifica se a tarefa depende de outra tarefa. O valor deste atributo é definido para o atributo Nome de outro elemento de Tarefa. Nota: Este atributo não pode ser configurado utilizando o UDI Wizard Designer. No entanto, pode adicionar manualmente este atributo a um elemento De tarefa modificando diretamente o ficheiro .xml.
DisplayName Especifica o nome fácil de utilizar da tarefa apresentada no UDI Wizard Designer. Este nome é geralmente mais descritivo do que o atributo Nome.
Nome Especifica o nome da tarefa. Este nome tem de ser exclusivo.
Tipo Especifica o tipo de tarefa para a tarefa a executar, que é definido no DLL que contém a tarefa.
Observações

Nenhum.

Exemplo

Nenhum.

Tarefas

Este elemento agruca um conjunto de tarefas para um elemento page.

Informações do Elemento

A tabela 112 fornece informações sobre o elemento Tarefas.

Mesa 112. Informação do Elemento de Tarefas

Atributo Valor
Número de ocorrências Zero ou um dentro de cada elemento page (este elemento é opcional.)
Elementos-mãe Página
Conteúdos Tarefa
Atributos de elementos

A tabela 113 lista os atributos do elemento Tarefas e fornece uma descrição de cada um.

Mesa 113. Atributos e Valores Correspondentes para o Elemento Tarefas

Atributo Descrição
Denominação de nome Especifica a legenda que aparece no topo da coluna que contém o nome das tarefas na página de assistente apropriada.
StatusTitle Especifica a legenda que aparece no topo da coluna que contém o estado das tarefas na página de assistente apropriada.
Observações

Nenhum.

Exemplo

Nenhum.

Validador

Este elemento especifica um validador para o controlo de campo especificado no elemento campo-mãe.

Informações do Elemento

A tabela 114 fornece informações sobre o elemento Validador.

Mesa 114. Informação do Elemento Validador

Atributo Valor
Número de ocorrências Zero ou um dentro de um elemento de campo
Elementos-mãe Campo
Conteúdos Setter
Atributos de elementos

A tabela 115 lista o atributo do elemento Validador e apresenta uma descrição do mesmo.

Mesa 115. Atributos e Valores Correspondentes para o Elemento Validador

Atributo Descrição
Tipo Especifica o tipo para o validador, que é definido no DLL que contém o validador
Observações

Nenhum.

Exemplo

Nenhum.

Feiticeiro

Este elemento especifica a raiz para todos os outros elementos.

Informações do Elemento

A tabela 116 fornece informações sobre o elemento Assistente.

Mesa 116. Informações do elemento de assistente

Atributo Valor
Número de ocorrências Um
Elementos-mãe Nenhuma
Conteúdos DLLs, Páginas, Grupos de Estágio, Estilo
Atributos de elementos

Este elemento não tem atributos.

Observações

Nenhum.

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