Instalacja sterowana przez użytkownika — przewodnik dla deweloperów
Instalacja oparta na użytkownikach (UDI) ułatwia wdrażanie systemów operacyjnych klienta systemu Windows®, takich jak Windows 8.1, na komputerach korzystających z funkcji wdrażania systemu operacyjnego (OSD) w programie Microsoft® System Center 2012 R2 Configuration Manager. UDI jest częścią zestawu narzędzi wdrażania firmy Microsoft (MDT).
Wprowadzenie
Zazwyczaj podczas wdrażania systemów operacyjnych przy użyciu funkcji OSD należy podać wszystkie informacje niezbędne do wdrożenia systemu operacyjnego. Informacje są konfigurowane w plikach konfiguracji lub w bazach danych (takich jak plik CustomSettings.ini lub baza danych MDT [MDT DB]). Przed zainicjowaniem wdrożenia należy podać wszystkie ustawienia konfiguracji.
Środowisko UDI udostępnia interfejs oparty na kreatorze, który umożliwia dostarczanie informacji o konfiguracji bezpośrednio przed wdrożeniem. To zachowanie pozwala tworzyć ogólne sekwencje zadań OSD, a następnie dostarczać informacje specyficzne dla komputera w czasie wdrażania, co zapewnia większą elastyczność w procesie wdrażania.
Docelowej
Ten przewodnik jest napisany dla deweloperów, którzy tworzą niestandardowe strony kreatora dla Kreatora UDI i niestandardowych edytorów stron kreatora dla Kreatora UDI Designer. W tym przewodniku założono, że znasz opracowywanie aplikacji systemu Windows przy użyciu następujących elementów:
C++, który służy do tworzenia niestandardowych stron kreatora
Microsoft .NET Framework, która służy do tworzenia niestandardowych edytorów stron kreatora
Windows Presentation Foundation (WPF), który służy do tworzenia niestandardowych edytorów stron kreatora
Języki obsługiwane przez WPF, takie jak C#, C++lub Microsoft Visual Basic® .NET, które są używane do tworzenia niestandardowych edytorów stron kreatora
Informacje o tym przewodniku
Ten przewodnik zawiera niezbędne informacje referencyjne ułatwiające dostosowanie czasu UTI dla organizacji. W tym przewodniku nie omówiono tematów administracyjnych ani operacyjnych, takich jak instalowanie mdt (w tym UDI), konfigurowanie UDI do wdrażania systemów operacyjnych i aplikacji lub wykonywanie wdrożeń przy użyciu Kreatora UDI. Aby uzyskać więcej informacji na te tematy, zobacz tematy UDI w using the Microsoft Deployment Toolkit, który jest dołączony do mdt.
Omówienie PROGRAMOWANIA UDI
Programowanie UDI pozwala rozszerzyć funkcje zapewniane przez UDI. Zazwyczaj programowanie UDI jest wymagane, gdy chcesz zebrać dodatkowe informacje, które wykorzystuje proces wdrażania UDI. Te dodatkowe informacje są zwykle zapisywane jako zmienne sekwencji zadań, które są krokami sekwencji zadań w sekwencji zadań UDI w Configuration Manager odczytu.
Architektura UDI
Ogólnym celem opracowywania UDI jest utworzenie niestandardowych stron kreatora, które mogą być wyświetlane w Kreatorze UDI. Tworząc niestandardowe strony kreatora, możesz rozszerzyć istniejące funkcje UDI w celu spełnienia wymagań biznesowych i technicznych organizacji. Niestandardowa strona kreatora zbiera informacje oprócz stron kreatora lub zamiast nich udostępnianych przez UDI.
Rysunek 1 przedstawia relację między Kreatorem UDI Designer i Kreatorem UDI.
Rysunek 1. Relacja między Kreatorem UDI i Kreatorem UDI Designer
Rysunek 1. Relacja między Kreatorem UDI i Kreatorem UDI Designer
Na poziomie koncepcyjnym programowanie UDI obejmuje tworzenie następujących elementów:
Niestandardowe strony kreatora. Strony kreatora są wyświetlane w Kreatorze UDI i zbierają informacje wymagane do ukończenia procesu wdrażania. Strony kreatora są tworzone przy użyciu języka C++ w programie Microsoft Visual Studio®. Niestandardowe strony kreatora są implementowane jako biblioteki DLL odczytane przez Kreatora UDI. Zestaw UDI software development kit (SDK) zawiera przykład tworzenia niestandardowych stron kreatora.
Edytory stron kreatora niestandardowego. Edytory stron kreatora umożliwiają skonfigurowanie zachowania strony kreatora niestandardowego. Edytory stron kreatora niestandardowego są implementowane jako biblioteki DLL odczytane przez Kreatora UDI Designer. Edytory stron kreatora są tworzone przy użyciu:
WPF w wersji 4.0
Microsoft Prism w wersji 4.0
Microsoft Unity Application Block (Unity) w wersji 2.1
Funkcja MDT zawiera wszystkie zestawy niezbędne do utworzenia niestandardowego edytora stron kreatora do użycia w Kreatorze UDI Designer. Zestaw UDI SDK zawiera przykład tworzenia niestandardowych edytorów stron kreatora.
Ponadto Kreator UDI Designer korzysta z plików konfiguracji edytora stron kreatora pomocniczego. Pliki konfiguracji edytora stron kreatora są tworzone w ramach procesu tworzenia niestandardowych stron kreatora i niestandardowych edytorów stron kreatora. Kreator UDI Designer tworzy niezbędne informacje XML w pliku konfiguracji Kreatora UDI i odpowiednim pliku .app.
Przygotowywanie środowiska deweloperskiego UDI
Przed rozpoczęciem tworzenia własnych niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące kroki, aby przygotować środowisko deweloperskie UDI:
Przygotuj wymagania wstępne środowiska deweloperskiego UDI zgodnie z opisem w artykule Przygotowywanie wymagań wstępnych środowiska deweloperskiego UDI.
Skonfiguruj środowisko programistyczne UDI zgodnie z opisem w temacie Konfigurowanie środowiska deweloperskiego UDI.
Sprawdź, czy środowisko deweloperskie UDI jest poprawnie skonfigurowane zgodnie z opisem w temacie Weryfikowanie środowiska deweloperskiego UDI.
Przygotowywanie wymagań wstępnych środowiska deweloperskiego UDI
Aby przygotować wymagania wstępne środowiska deweloperskiego UDI, wykonaj następujące kroki:
Przygotuj wymagania sprzętowe środowiska deweloperskiego UDI zgodnie z opisem w artykule Przygotowywanie wymagań wstępnych dotyczących sprzętu środowiska deweloperskiego UDI.
Przygotuj wymagania dotyczące oprogramowania środowiska deweloperskiego UDI zgodnie z opisem w artykule Przygotowywanie wymagań wstępnych środowiska deweloperskiego UDI.
Przygotowanie wymagań wstępnych dotyczących sprzętu środowiska deweloperskiego UDI
Wymagania wstępne dotyczące sprzętu środowiska deweloperskiego UDI są tymi samymi wymaganiami sprzętowymi dotyczącymi używanej wersji programu Microsoft Visual Studio. Aby uzyskać więcej informacji na temat tych wymagań, zobacz wymagania systemowe dla każdej wersji w dokumentacji programu Visual Studio.
Przygotowywanie wymagań wstępnych dotyczących oprogramowania środowiska deweloperskiego UDI
Środowisko deweloperskie UDI ma następujące wymagania wstępne dotyczące oprogramowania:
Każdy system operacyjny Windows obsługiwany przez program Visual Studio 2010 (zaleca się korzystanie z systemu Windows 7 lub Windows Server® 2008 R2).
Potrzebny będzie system operacyjny Windows, który obsługuje architekturę procesora, dla której chcesz tworzyć. Tworzenie 32-bitowych i 64-bitowych UDI można przeprowadzić przy użyciu 64-bitowego systemu operacyjnego. Programowanie 32-bitowego UDI jest obsługiwane tylko w 32-bitowych systemach operacyjnych. Z tego powodu należy użyć 64-bitowego systemu operacyjnego.
Uwaga
Wersje intelitanium (IA-64) systemu operacyjnego Windows nie są obsługiwane w środowiskach deweloperskich UDI.
Aby uzyskać więcej informacji na temat systemów operacyjnych obsługiwanych przez program Visual Studio 2010, zobacz wymagania systemowe dla każdej wersji w dokumentacji programu Visual Studio.
Microsoft .NET Framework wersji 4.0 (wymaganej przez program Visual Studio 2010)
Język C++ (język używany w rozszerzaniu stron Kreatora UDI)
Inne języki obsługiwane przez WPF, takie jak C#, Visual Basic .NET lub C++/Common Language Infrastructure, które służą do rozszerzania Kreatora UDI Designer edytorów stron kreatora
Uwaga
Przykładowy kod źródłowy kreatora UDI Designer edytorów stron kreatora jest napisany w języku C#. Zainstaluj język C#, jeśli chcesz użyć przykładowego kodu źródłowego.
Konfigurowanie środowiska deweloperskiego UDI
Po spełnieniu wymagań wstępnych środowiska deweloperskiego UDI wykonaj następujące kroki, aby skonfigurować środowisko deweloperskie UDI:
Zainstaluj program Visual Studio 2010.
Upewnij się, że zainstalowano język C++ i dowolny inny język obsługiwany przez WPF.
Uwaga
Przykładowy kod źródłowy kreatora UDI Designer stron edytora jest napisany w języku C#. Zainstaluj język C#, jeśli chcesz użyć przykładowego kodu źródłowego.
Aby uzyskać więcej informacji na temat instalowania programu Visual Studio 2010, zobacz Instalowanie programu Visual Studio.
Zainstaluj usługę MDT.
Aby uzyskać więcej informacji na temat sposobu instalowania oprogramowania MDT, zobacz sekcję "Instalowanie lub uaktualnianie do mdt" w dokumencie MDT Using the Microsoft Deployment Toolkit (Instalowanie lub uaktualnianie do mdt) w dokumencie MDT using the Microsoft Deployment Toolkit (Instalowanie lub uaktualnianie do mdt) w dokumencie MDT using the Microsoft Deployment Toolkit (Używanie zestawu narzędzi wdrażania firmy Microsoft).
W Eksploratorze Windows utwórz local_folder (gdzie local_folder jest dowolnym folderem znajdującym się na dysku lokalnym na komputerze deweloperskim).
Skopiuj folder installation_folder\SDK do local_folder (gdzie installation_folder jest folderem, w którym zainstalowano oprogramowanie MDT, a local_folder jest dowolnym folderem znajdującym się na dysku lokalnym na komputerze deweloperskim).
Folder zestawu SDK jest kopiowany do innej lokalizacji, ponieważ mdt jest zainstalowany w folderze Pliki programu, do którego nie można zapisać bez podwyższonego poziomu uprawnień. Skopiowanie folderu zestawu SDK do innej lokalizacji umożliwia modyfikowanie plików w folderze zestawu SDK bez konieczności używania uprawnień z podwyższonym poziomem uprawnień.
Skopiuj folder installation_folder\Templates\Distribution\Tools do local_folder (gdzie installation_folder jest folderem, w którym zainstalowano usługę MDT, a local_folder jest folderem utworzonym wcześniej w tym procesie).
Zmień nazwę folderu local_folder\Tools na local_folder\OSDSetupWizard (gdzie local_folder jest folderem utworzonym wcześniej w tym procesie).
Po zakończeniu struktura folderów pod local_folder powinna wyglądać podobnie do struktury folderów przedstawionej na rysunku 2 (gdzie local_folder jest folderem utworzonym wcześniej w procesie i jest wyświetlana jako UDIDevelopment na rysunku).
Rysunek 2. Struktura folderów na potrzeby programowania UDI
Rysunek 2. Struktura folderów na potrzeby programowania UDI
Weryfikowanie środowiska deweloperskiego UDI
Po skonfigurowaniu środowiska deweloperskiego UDI sprawdź, czy środowisko projektowe UDI jest poprawnie skonfigurowane, zapewniając, że przykładowe projekty są prawidłowo kompilowane w programie Visual Studio 2010.
Sprawdź, czy środowisko deweloperskie UDI jest poprawnie skonfigurowane, określając, czy:
Projekt SamplePage jest poprawnie kompilowany zgodnie z opisem w temacie Weryfikowanie, czy projekt SamplePage jest poprawnie kompilowany
Projekt SampleEditor jest poprawnie kompilowany zgodnie z opisem w temacie Weryfikowanie, czy projekt SampleEditor jest poprawnie kompilowany
Sprawdź, czy projekt SamplePage jest poprawnie kompilowany
Projekt SamplePage zawiera przykład tworzenia niestandardowej strony kreatora dla Kreatora UDI. Aby uzyskać więcej informacji na temat projektu SamplePage, zobacz Przeglądanie rozwiązania SamplePage Visual Studio.
Aby sprawdzić, czy projekt SamplePage jest poprawnie skompilowany
Uruchom program Visual Studio 2010.
Otwórz projekt SamplePage.
Projekt SamplePage znajduje się w folderze local_folder\SDK\UDI\SamplePage (gdzie local_folder jest folderem utworzonym wcześniej w procesie).
W programie Visual Studio 2010 w Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt SamplePage, a następnie wybierz pozycję Właściwości.
Zostanie wyświetlone okno dialogowe Strony właściwości SamplePage .
W oknie dialogowym SamplePage Property Pages (Strony właściwości samplepage ) przejdź do pozycji Właściwości konfiguracji/Debugowanie.
We właściwościach debugowania w obszarze Konfiguracja wybierz pozycję Wszystkie konfiguracje.
We właściwościach debugowania w obszarze Polecenie wpisz $(TargetDir)\OSDSetupWizard.exe.
We właściwościach debugowania w obszarze Katalog roboczy wpisz $(TargetDir).
W oknie dialogowym Strony właściwości SamplePage przejdź do pozycji Właściwości konfiguracji/Zdarzenia kompilacji/Zdarzenie po kompilacji.
We właściwościach zdarzenia po kompilacji w obszarze Wiersz polecenia wpisz następujące polecenie:
copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\*.*" "$(TargetDir)" xcopy /y /i "$(ProjectDir)..\..\..\..\OSDSetupWizard\x86\en-us" "$(TargetDir)en-us" copy /y "$(ProjectDir)..\..\..\..\OSDSetupWizard\OSDResults\Images\UDI_Wizard_Banner.bmp" "$(ProjectDir)header.bmp" copy /y "$(ProjectDir)Config.xml" "$(TargetDir)" copy /y "$(ProjectDir)header.bmp" "$(TargetDir)header.bmp"
W oknie dialogowym SamplePage Property Pages (Strony właściwości SamplePage ) wybierz przycisk OK.
Zapisz projekt.
Z menu Debugowanie wybierz pozycję Rozpocznij debugowanie.
Zostanie wyświetlone okno dialogowe Programu Microsoft Visual Studiowskazujące, że źródło jest nieaktualne i zostanie wyświetlone pytanie, czy chcesz skompilować projekt.
W oknie dialogowym Microsoft Visual Studio wybierz pozycję Tak.
Zostanie wyświetlone okno dialogowe Brak informacji debugowania informujące o tym, że żadne informacje debugowania nie są dostępne dla OSDSetupWizard.exe.
W oknie dialogowym Brak informacji debugowania wybierz pozycję Tak.
Zostanie otwarty Kreator UDI z wyświetloną stroną kreatora niestandardowego.
Sprawdź, czy możesz wybrać wartość w obszarze Wybierz lokalizację.
W kreatorze z formularzem przykładowej strony wybierz pozycję Anuluj.
Zostanie wyświetlone okno dialogowe Kreator anulowania .
W oknie dialogowym Kreator anulowania wybierz pozycję Tak.
Zamknij program Visual Studio 2010.
Sprawdź, czy projekt SampleEditor jest poprawnie kompilowany
Projekt SampleEditor zawiera przykład tworzenia niestandardowego edytora stron kreatora dla Kreatora UDI Designer. Aby uzyskać więcej informacji na temat projektu SampleEditor, zobacz Przeglądanie rozwiązania SamplePage Visual Studio.
Aby sprawdzić, czy projekt SampleEditor jest poprawnie skompilowany
Uruchom program Visual Studio 2010.
Otwórz projekt SampleEditor.
Projekt SampleEditor znajduje się w folderze local_folder\SDK\UDI\SampleEditor (gdzie local_folder jest folderem utworzonym wcześniej w procesie).
W programie Visual Studio 2010 w Eksplorator rozwiązań wybierz projekt SampleEditor.
Z menu Project (Projekt ) wybierz pozycję Dodaj odwołanie.
Zostanie otwarte okno dialogowe Dodawanie odwołania .
W oknie dialogowym Dodawanie odwołania wybierz kartę Przeglądaj .
Na karcie Przeglądaj przejdź do installation_folder\Bin (gdzie installation_folder jest folderem, w którym zainstalowano mdt). Wybierz następujące pliki, a następnie wybierz przycisk 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
Uwaga
Możesz wybrać wiele plików na karcie Przeglądaj , przytrzymując CTRL podczas wybierania plików.
W Eksplorator rozwiązań przejdź do pozycji SampleEditor/References.
Sprawdź, czy żadne odwołanie nie ma żadnych ostrzeżeń lub błędów.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt SampleEditor, a następnie wybierz pozycję Właściwości.
Zostanie wyświetlone okno dialogowe Strony właściwości SampleEditor .
W oknie dialogowym SampleEditor Property Pages (Przykładowe strony właściwości) wybierz kartę Debugowanie .
Na karcie Debugowanie wybierz pozycję Uruchom program zewnętrzny.
W obszarze Uruchom program zewnętrzny wpisz installation_folder\Bin\UDIDesigner.exe (gdzie installation_folder jest folderem, w którym zainstalowano mdt), a następnie wybierz przycisk OK.
Porada
Możesz wybrać przycisk wielokropka (...), aby przejść do folderu i wybrać pozycję UDIDesigner.exe.
Z menu Plik wybierz pozycję Zapisz wszystko.
Skopiuj plik \SDK\SamplePage\SamplePage.dll.config local_folder do folderu installation_folder\Bin\Config (gdzie local_folder jest folderem utworzonym na komputerze deweloperskim wcześniej w procesie konfiguracji, ainstallation_folder jest folderem, w którym zainstalowano mdt).
W programie Visual Studio 2010 z menu Debugowanie wybierz pozycję Rozpocznij debugowanie.
Zostanie uruchomiony kreator UDI Designer.
W Kreatorze UDI Designer na wstążce wybierz pozycję Otwórz.
Zostanie wyświetlone okno dialogowe Otwieranie .
W oknie dialogowym Otwieranie otwórz plik \SDK\SamplePage\SamplePage\Config.xml local_folder (gdzie local_folder jest folderem utworzonym na komputerze deweloperskim wcześniej w procesie konfiguracji).
Zostanie otwarty plik Config.xml, a w okienku szczegółów zostanie wyświetlona niestandardowa grupa etapów .
W okienku szczegółów wybierz kartę Konfiguruj .
Przejrzyj informacje o konfiguracji pola Lokalizacja , w tym następujące informacje:
Odblokowany przycisk, za pomocą którego można włączyć lub wyłączyć pole Lokalizacja
Pole wartości domyślnej, w którym wprowadź wartość domyślną, która ma być wyświetlana w polu Lokalizacja
Przyjazna nazwa wyświetlana widoczna na stronie podsumowania, w której wprowadza się podpis informacji wyświetlanych na stronie Podsumowanie
Pole listy lokalizacji , które zawiera listę możliwych lokalizacji
Zamknij Designer Kreatora UDI.
Zamknij program Visual Studio 2010.
Przeglądanie przykładów zestawu UDI SDK
Przed rozpoczęciem opracowywania zapoznaj się z przykładami podanymi w zestawie UDI SDK. Skorzystaj z informacji zawartych w tym przewodniku i kodu źródłowego w przykładach, aby ułatwić tworzenie własnych niestandardowych stron kreatora UDI i edytorów stron kreatora.
Zapoznaj się z przykładami zestawu UDI SDK, przeglądając następujące elementy:
Zawartość folderu zestawu SDK skopiowanego wcześniej w procesie instalacji zgodnie z opisem w artykule Przeglądanie zawartości folderu zestawu SDK
Przykład strony kreatora niestandardowego UDI zgodnie z opisem w temacie Przeglądanie rozwiązania SamplePage Visual Studio
Przykład edytora stron kreatora niestandardowego UDI zgodnie z opisem w temacie Przeglądanie przykładowego rozwiązania Visual Studio
Przejrzyj zawartość folderu zestawu SDK
Podczas konfiguracji środowiska deweloperskiego UDI skopiowano folder zestawu SDK z folderu, w którym zainstalowano mdt, do innego utworzonego folderu. Tabela 1 zawiera listę folderów znajdujących się bezpośrednio pod folderem zestawu SDK i zawiera krótki opis każdego z nich.
Tabela 1. Foldery w zestawie UDI SDK
Folder | Ten folder zawiera |
---|---|
Zawiera | Pliki nagłówka języka C++ niezbędne do utworzenia niestandardowych stron kreatora dla Kreatora UDI |
Libs | Pliki biblioteki języka C++, które zostaną połączone ze stroną niestandardową; Istnieją 32-bitowe i 64-bitowe wersje bibliotek łączy statycznych. Nuta: Wersje itanium bibliotek (IA-64) są niedostępne. |
SampleEditor | Projekt programu Visual Studio służący do tworzenia edytora niestandardowego służącego do edytowania strony SamplePage w Kreatorze UDI Designer, który jest napisany w języku C# |
SamplePage | Projekt programu Visual Studio służący do tworzenia niestandardowej strony kreatora UDI, która jest napisana w języku Visual C++ |
Przejrzyj rozwiązanie SamplePage Visual Studio
Przed rozpoczęciem tworzenia niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące zadania, aby przygotować środowisko projektowe UDI:
Przejrzyj etapy cyklu życia strony kreatora UDI zgodnie z opisem w artykule Przegląd cyklu życia strony kreatora.
Zapoznaj się z rozwiązaniem programu Visual Studio, aby zapoznać się z przykładem samplepage w zestawie UDI SDK, zgodnie z opisem w artykule Przeglądanie przykładu samplepage.
Przegląd cyklu życia strony kreatora
Strona kreatora UDI zawiera metody odpowiadające poszczególnym etapom (lub fazom) cyklu życia strony. W ramach tworzenia niestandardowej strony kreatora należy zastąpić te metody kodem. Tabela 2 zawiera listę metod, które należy zastąpić, i zawiera krótki opis każdej metody, w tym informacje o tym, kiedy używać metody w cyklu życia strony kreatora.
Tabela 2. Metody w cyklu życia strony kreatora
Metoda | Opis |
---|---|
OnWindowCreated | Ta metoda jest wywoływana raz po utworzeniu okna strony. W przypadku tej metody napisz kod, który inicjuje stronę po raz pierwszy i musi zostać wykonany tylko raz. Na przykład użyj tej metody, aby zainicjować pola lub odczytać informacje o konfiguracji z elementów Setter w pliku konfiguracji Kreatora UDI. |
OnWindowShown | Ta metoda jest wywoływana za każdym razem, gdy strona jest wyświetlana (pokazana) w Kreatorze UDI. Jest ona wywoływana przy pierwszym wyświetleniu strony i za każdym razem, gdy przechodzisz do strony, wybierając pozycję Dalej lub Wstecz w kreatorze. W przypadku tej metody napisz kod, który przygotowuje stronę do wyświetlenia — na przykład odczyt zmiennych pamięci, zmiennych sekwencji zadań lub zmiennych środowiskowych, a następnie aktualizuje stronę na podstawie wszelkich zmian w tych zmiennych. |
OnCommonControlEvent | Tę metodę można wywołać za każdym razem, gdy zostanie wyświetlona strona kreatora i otrzyma komunikat WM_NOTIFY od elementu podrzędnego (zazwyczaj typowe kontrolki). Dla tej metody napisz kod, który obsługuje WM_NOTIFY na podstawie komunikatu powiadomienia. Na przykład możesz chcieć reagować na zdarzenia ze wspólnej kontrolki, takie jak reagowanie na zdarzenia wybierania lub dwukrotnego kliknięcia kontrolki TreeView . |
OnUnhandledEvent | Ta metoda jest wywoływana za każdym razem, gdy dla strony kreatora wystąpi nieobsługiwany komunikat okna. Ta metoda zapewnia możliwość przechwycenia i obsługi tych nieobsługiwanych komunikatów okien. W przypadku tej metody napisz kod, który obsługuje komunikaty okien, które są odpowiednie dla strony kreatora. Zazwyczaj nie trzeba zastępować tej metody. |
OnNextSelected | Ta metoda jest wywoływana po wybraniu przycisku Dalej w kreatorze. W przypadku tej metody napisz kod, który wykonuje wszelkie niezbędne akcje przed przejściem do następnej strony kreatora — na przykład wykonywanie walidacji, która może zająć dużo czasu. Jeśli weryfikacja nie powiedzie się, możesz anulować następne żądanie i wyświetlić komunikat. |
OnWindowHidden | Ta metoda jest wywoływana za każdym razem, gdy strona jest ukryta po wyświetleniu poprzedniej lub następnej strony kreatora. W przypadku tej metody napisz kod, który wykonuje wszelkie akcje przed ukryciem strony przed wyświetleniem innej strony. Zazwyczaj nie trzeba zastępować tej metody. |
Przejrzyj przykład samplepage
Przejrzyj przykład samplepage, korzystając z poniższej listy, która reprezentuje sekwencję zdarzeń podczas cyklu życia strony kreatora przykładu SamplePage:
Kreator UDI, OSDSetupWizard.exe, odczytuje informacje o konfiguracji z pliku konfiguracji Kreatora UDI w przykładzie (pliku Config.xml) zgodnie z opisem w kroku 1: Kreator UDI (OSDSetupWizard.exe) odczytuje plik Config.xml.
Kreator UDI ładuje biblioteki DLL wymagane dla każdej strony kreatora wymienionej w pliku konfiguracji Kreatora UDI zgodnie z opisem w kroku 2: Kreator UDI ładuje bibliotekę DLL dla strony Kreatora niestandardowego.
Kreator UDI wyświetla stronę kreatora niestandardowego i umożliwia żądaną interakcję sterowania zgodnie z opisem w kroku 3. Kreator UDI wyświetla stronę Kreatora niestandardowego.
Gdy strona kreatora niestandardowego zbierze informacje, przed wybraniem przycisku Dalej wykonaj wszelkie niezbędne zadania, aby przejść do następnego kreatora zgodnie z opisem w sekcji Krok 4: Następny przycisk jest zaznaczony na stronie Kreatora niestandardowego.
Krok 1. Kreator UDI (OSDSetupWizard.exe) odczytuje plik Config.xml
Po uruchomieniu Kreatora UDI (OSDSetupWizard.exe) domyślnie odczytuje plik konfiguracji Kreatora UDI, który jest plikiem UDIWizard_Config.xml — podstawowym plikiem konfiguracji Kreatora UDI.
Uwaga
W przykładzie użyto pliku Config.xml jako pliku konfiguracji. W rozwiązaniu MDT domyślnym plikiem konfiguracji jest plik UDIWizard_Config.xml, który znajduje się w folderze Scripts w pakiecie MDT Files na potrzeby konfiguracji.
Domyślny plik konfiguracji używany przez Kreatora UDI można zastąpić, modyfikując krok sekwencji zadań Kreatora UDI w celu użycia parametru /definition . Aby uzyskać więcej informacji na temat zastępowania domyślnego pliku konfiguracji używanego przez Kreatora UDI, zobacz "Zastępowanie pliku konfiguracji używanego przez Kreatora UDI".
Elementy najwyższego poziomu w pliku Config.xml są
DLL , element
Styl , element
StageGroups , element
Aby uzyskać więcej informacji na temat schematu pliku konfiguracji Kreatora UDI i każdego z tych elementów, zobacz Dokumentacja schematu pliku konfiguracji kreatora UDI.
Kreator UDI skanuje element biblioteki DLL w poszukiwaniu plików .dll do załadowania. W tym przykładzie są wyświetlane dwa pliki .dll: SamplePage.dll i SharedPages.dll. Te pliki .dll muszą znajdować się w tym samym folderze co OSDSetupWizard.exe — folder Tools\platform (gdzie platforma jest x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej).
Kreator UDI skanuje element Pages w poszukiwaniu zdefiniowanych stron. W tym przykładzie zdefiniowano dwie strony: Custom i SummaryPage. Atrybut Typ elementu Page jest zdefiniowany w pliku PageClassIDs.h i jednoznacznie definiuje typ strony niestandardowej.
W tym przykładzie zdefiniowany typ to Microsoft.SamplePage.LocationPage. Na stronie niestandardowej zastąp następujące elementy, aby uniknąć potencjalnych konfliktów z innymi stronami, które można utworzyć w przyszłości:
Nazwa organizacji w miejscu firmy Microsoft.
Nazwa projektu w miejscu samplePage.
Nazwa strony kreatora niestandardowego w miejscu LocationPage.
Krok 2. Kreator UDI ładuje bibliotekę DLL dla strony Kreatora niestandardowego
Gdy Kreator UDI ładuje bibliotekę DLL, wywołuje funkcję RegisterFactories , która musi zostać zaimplementowana w pliku .dll. W tym przykładzie ta funkcja jest implementowana w pliku dllmain.ccp. Każda utworzona strona kreatora musi zaimplementować funkcję RegisterFactories .
Funkcja RegisterFactories służy do rejestrowania klasy fabryki strony kreatora w rejestrze fabryki klas dla Kreatora UDI. Fabryki klas to klasy, które mogą tworzyć wystąpienie innej klasy. Funkcja RegisterFactories tworzy nowe wystąpienie klasy factory i przekazuje tę klasę do rejestru fabryki klas dla Kreatora UDI, co udostępnia tę klasę fabryki kreatorowi. Kreator UDI szuka klasy fabryki zarejestrowanej przy użyciu identyfikatora zgodnego z atrybutem Type elementu Page dla strony kreatora niestandardowego.
W tym przykładzie identyfikator jest definiowany jako ID_Location w pliku PageClassIds.h jako Microsoft.SamplePage.LocationPage, który jest zgodny z atrybutem Type elementu Page w pliku Config.xml. ID_Location jest przekazywana jako parametr w funkcji RegisterFactories zaimplementowanego w pliku dllmain.ccp.
Funkcję można utworzyć przy użyciu szablonu funkcji Register_name , aby uprościć tworzenie nowego wystąpienia fabryki i zarejestrować nowo utworzone wystąpienie. Wartość nazwy podana przy użyciu szablonu funkcji Register musi zaimplementować interfejs iClassFactory . Klasa ClassFactoryImpl obsługuje większość szczegółów dotyczących implementowania fabryki klas.
Można również użyć funkcji RegisterFactories do rejestrowania typów zadań i typów modułów walidatora. Aby uzyskać więcej informacji, zobacz następujące artykuły:
Uwaga
Przykład zawiera i rejestruje tylko jedną niestandardową stronę kreatora. Przykład nie obejmuje zadań niestandardowych ani modułów walidatorów, dlatego nie rejestruje żadnych niestandardowych zadań ani modułów walidatorów.
Krok 3. Kreator UDI wyświetla stronę Kreatora niestandardowego
Strona kreatora niestandardowego w przykładzie jest zdefiniowana w pliku LocationPage.cpp. Strony kreatora pochodzą z klas szablonów, które zapewniają wiele funkcji dostępnych na stronie. Wszystkie strony kreatora powinny pochodzić z klasy szablonu WizardPageImpl, która implementuje interfejs IWizardPage. Każda strona kreatora może implementować inne opcjonalne klasy szablonów i odpowiednie interfejsy w zależności od potrzeb strony.
Klasa szablonu WizardPageImpl ma kilka przydatnych interfejsów, które mogą ułatwić pisanie niestandardowych stron kreatora. Zaimplementuj klasę szablonu WizardPageImpl jako klasę podstawową dla strony kreatora niestandardowego.
Aby uzyskać listę dostępnych elementów:
Klasy szablonów dla stron kreatora, zobacz Wizard Page Helper Classes (Klasy pomocników stron kreatora)
Interfejsy dla klas szablonów stron kreatora można znaleźć w temacie Wizard Page Interfaces (Interfejsy stron kreatora)
Strona kreatora niestandardowego w przykładzie pochodzi z klasy szablonu WizardPageImpl i implementuje interfejs IWizardPage. Ponadto niestandardowa strona kreatora implementuje interfejs IFieldCallback . Oba te elementy są implementowane w pliku LocationPage.cpp.
Przykładowa strona kreatora niestandardowego zastępuje następujące metody:
OnWindowCreated. Metoda OnWindowCreated na przykładowej stronie kreatora wywołuje następujące metody:
AddField. Ta metoda wiąże kontrolkę pola IDC_COMBO_LOCATION w zasobie IDD_LOCATION_PAGE z elementem Dane o nazwie Location w pliku Config.xml.
Oprócz metody AddField można użyć metod AddRadioGroup i AddToGroup do obsługi innych kontrolek i zachowań.
Uwaga
Przed wywołaniem metody InitFields upewnij się, że wywołujesz metodę AddField, AddRadioGroup lub AddToGroup.
InitFields. Ta metoda służy do inicjowania pól (kontrolek), które zostały dodane do formularza. Wskaźnik strony jest parametrem. W tym przykładzie ten wskaźnik jest przekazywany, co odnosi się do bieżącej strony.
Uwaga
Aby obsługiwać użycie tego wskaźnika, należy zaimplementować interfejs IFieldCallback oprócz interfejsów obsługiwanych przez klasę szablonów WizardPageImpl .
Interfejs IFieldCallback wywołuje metodę SetFieldDefault , która służy do ustawiania wartości domyślnych kontrolek innych niż pola tekstowe i kontrolek pól wyboru. W tym przykładzie metoda SetFieldDefault ustawia początkowy indeks kontrolki pola kombi na podstawie wartości domyślnej określonej w elemencie Default elementu Field w pliku Config.xml.
Metoda OnWindowCreated konfiguruje kontroler formularzy przy użyciu interfejsu IFormController. Aby uzyskać więcej informacji na temat konfigurowania kontrolera formularzy, zobacz Konfigurowanie formularza.
InitLocations. Ta metoda wypełnia pole kombi z listy lokalizacji w pliku Config.xml. Element Dane i podrzędne elementy DataItem w pliku Confg.xml zawierają listę możliwych wartości.
OnNextSelected. Ta metoda wykonuje następujące zadania:
Aktualizacje zmiennej sekwencji zadań TSLocation z wartością wybraną w polu kombi przy użyciu metody SaveFields
Dodaje informacje, które będą wyświetlane na stronie Podsumowanie przy użyciu metody SaveFields
Krok 4. Na stronie Kreatora niestandardowego wybrano następny przycisk
Gdy użytkownik ukończy pola na stronie kreatora niestandardowego, wybierz przycisk Dalej, który wywołuje metodę OnNextSelected . Metoda OnNextSelected wykonuje wszelkie niezbędne zadania przed przejściem do następnej strony kreatora, takie jak rejestrowanie wszelkich zmian konfiguracji wprowadzonych na stronie kreatora niestandardowego.
Na przykładowej stronie kreatora niestandardowego zastąpienie metody OnNextSelected jest implementowane w pliku LocationPage.ccp. W metodzie OnNextSelected na przykładowej stronie kreatora niestandardowego są wywoływane następujące metody:
InitSection. Ta metoda inicjuje nagłówek (etykieta podpis) dla danych podsumowania wyświetlanych na stronie Podsumowanie. Zazwyczaj można ustawić tę wartość przy użyciu funkcji DisplayName( ). Dane skojarzone z tym podpis są zapisywane przy użyciu metody SaveFields.
SaveFields. Ta metoda zapisuje wartości pól w zmiennych sekwencji zadań i w danych wyświetlanych na stronie Podsumowanie .
Zapoznaj się z rozwiązaniem SampleEditor Visual Studio
Przed rozpoczęciem tworzenia własnych niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące kroki, aby przygotować środowisko deweloperskie UDI:
Zapoznaj się z architekturą Kreatora UDI Designer zgodnie z opisem w temacie Przeglądanie Kreatora UDI Designer Architektura.
Przejrzyj składniki strony Kreatora UDI, które można dostosować przy użyciu pliku konfiguracji Kreatora UDI, zgodnie z opisem w temacie Przeglądanie konfigurowalnych składników strony Kreatora UDI.
Zapoznaj się z przykładem editorpage podanym w zestawie UDI SDK zgodnie z opisem w temacie Review the EditorPage Example (Przejrzyj przykład strony editorpage).
Przejrzyj architekturę Designer Kreatora UDI
Kreator UDI Designer został opracowany przy użyciu WPF, Prism i Unity. Designer UDI służy do edytowania pliku konfiguracji Kreatora UDI (UDIWizard_Config.xml), który Kreator UDI (OSDSetupWizard.exe) odczytuje w czasie wykonywania. Element Pages w pliku konfiguracji Kreatora UDI zawiera listę stron, które mają oddzielny element Page dla każdej strony kreatora.
Podczas edytowania ustawień konfiguracji strony kreatora Kreator UDI Designer ładuje edytor stron niestandardowych odpowiadający typowi strony kreatora. Edytory stron kreatora niestandardowego są opracowywane jako kontrolki użytkownika WPF. Niestandardowe strony edytora stron kreatora używają wzorca projektu Model-View-ViewModel (MVVM) dla platformy WPF.
Wzorzec projektu MVVM pomaga oddzielić interfejs użytkownika (interfejs użytkownika; prezentację) od prezentowanych danych. Dane są fasadą elementu Page w pliku konfiguracji Kreatora UDI (pliku Config.xml w przykładzie), do którego uzyskuje się dostęp przy użyciu właściwości CurrentPage interfejsu IDataService .
Kreator UDI Designer używa elementu DependencyAttribute w celu uzyskania dostępu do klasy DataService na podstawie struktury wstrzykiwania zależności w środowisku Unity. Aby uzyskać więcej informacji na temat struktury wstawiania zależności w środowisku Unity, zobacz Wstrzykiwanie pewnego życia do aplikacji — poznawanie bloku aplikacji aparatu Unity.
Przejrzyj konfigurowalne składniki strony Kreatora UDI
Podczas tworzenia strony kreatora niestandardowego niektóre ustawienia konfiguracji mogą być ustawione w kodzie i nie można ich zmienić po skompilowaniu strony. Jednak w przypadku innych ustawień konfiguracji należy zezwolić na zmianę tych ustawień konfiguracji przy użyciu Kreatora UDI Designer.
Zazwyczaj ustawienia konfiguracji, które chcesz skonfigurować przy użyciu Kreatora UDI, Designer są zapisywane w pliku konfiguracji Kreatora UDI (pliku Config.xml w przykładzie). W razie potrzeby można jednak również utworzyć własny oddzielny plik konfiguracji. Jednym z przykładów użycia oddzielnego pliku konfiguracji jest plik UDIWizard_Config.xml.app, którego używają zadanie odnajdywania aplikacji i typ strony kreatora applicationpage .
Poniżej przedstawiono listę typowych ustawień konfiguracji, które można zarządzać przy użyciu Kreatora UDI Designer:
Pole. Użyj pól, aby umożliwić użytkownikom podanie danych wejściowych. Pola są wyświetlane jako elementy pola w pliku konfiguracji Kreatora UDI (UDIWizard_Config.xml), który zawiera ustawienia konfiguracji dla każdego pola. Odpowiedni edytor stron kreatora musi podać metodę edytowania ustawień konfiguracji pola przy użyciu kontrolki FieldElementControl.
Właściwości. Elementy ustawiące ułatwiają tworzenie właściwości jednostek na stronie, takich jak strony w elemencie Page , pola w elemencie Field lub dane w elementach Data lub DataItem . Właściwości można skonfigurować w elementach Setter . Dodaj oddzielny element Setter dla każdej właściwości, którą chcesz zdefiniować. Właściwości można edytować przy użyciu kontrolki SetterControl i konfigurować inne elementy Setter przy użyciu innych kontrolek.
Dane. Dane są używane do przechowywania informacji do użycia przez stronę kreatora i inne składniki. Dane dla stron lub pól można zdefiniować przy użyciu elementów Data lub DataItem . Dane można zdefiniować w strukturze płaskiej lub hierarchicznej dzięki prawidłowemu użyciu elementów Data lub DataItem . Config.xml w przykładzie w zestawie SDK pokazuje, jak tworzyć płaskie struktury danych.
Utworzony niestandardowy edytor stron kreatora musi mieć możliwość zarządzania tymi ustawieniami konfiguracji.
Przejrzyj przykład editorpage
Przykład EditorPage służy do konfigurowania ustawień konfiguracji strony kreatora SamplePage w pliku konfiguracji Kreatora UDI. Przykład editorpage zawiera następujące składniki podstawowe:
Interfejs użytkownika do konfigurowania ustawień pola kombi Lokalizacja
Interfejs użytkownika służący do dodawania lub edytowania lokalizacji na liście możliwych lokalizacji, które są wyświetlane w polu kombi Lokalizacja
Ustawienia konfiguracji odczytane i zapisane w pliku konfiguracji Kreatora UDI
Kod pomocniczy dla innych składników
Przejrzyj przykład editorpage w programie Visual Studio, wykonując następujące kroki:
Zapoznaj się ze sposobem ładowania i inicjowania edytora stron kreatora SampleEditor w Kreatorze UDI Designer zgodnie z opisem w temacie Przeglądanie strony Kreatora Redaktor ładowanie i inicjowanie.
Przejrzyj interfejs użytkownika używany do edytowania pola kombi Lokalizacja w pliku LocationPageEditor.xaml i LocationPageEditor.xaml.cs plików zgodnie z opisem w artykule Przeglądanie interfejsu użytkownika używanego do konfigurowania pola kombi lokalizacji.
Przejrzyj interfejs użytkownika używany do dodawania lub edytowania lokalizacji do listy w plikach AddEditLocationView.xaml i AddEditLocationView.xaml.cs zgodnie z opisem w artykule Przeglądanie interfejsu użytkownika używanego do modyfikowania listy możliwych lokalizacji.
Przejrzyj kod używany do zarządzania informacjami o konfiguracji zapisanymi w pliku konfiguracji Kreatora UDI, zgodnie z opisem w artykule Przeglądanie kodu używanego do zarządzania informacjami o konfiguracji.
Przeglądanie strony Kreatora Redaktor ładowanie i inicjowanie
Niestandardowe edytory stron kreatora są ładowane zgodnie z wymaganiami Kreatora UDI Designer. Kreator UDI Designer pliki konfiguracji są ładowane po uruchomieniu Kreatora UDI Designer. Kreator UDI Designer skanuje folder install_folder\Bin\Config (gdzie install_folder jest nazwą folderu, w którym zainstalowano mdt) w poszukiwaniu plików z rozszerzeniem .config pliku.
Podczas konfiguracji środowiska deweloperskiego UDI skopiowano plik SamplePage.dll.confg do folderu install_folder\Bin\Config. Po uruchomieniu Kreatora UDI Designer plik SamplePage.dll.confg zostanie znaleziony i załadowany.
Kreator UDI Designer używa następujących atrybutów elementu Page w pliku SamplePage.dll.confg do załadowania i zainicjowania przykładu editorpage:
DesignerAssembly. Ten atrybut określa nazwę biblioteki DLL do załadowania. Ta bibliotekę DLL należy umieścić w tym samym folderze co plik UDIDesigner.exe, który jest folderem install_folder\Bin (gdzie install_folder jest nazwą folderu, w którym zainstalowano funkcję MDT).
Typ projektanta. Ten atrybut jest nazwą typu Microsoft .NET klasy, która zawiera kontrolkę użytkownika WPF.
Wpisz. Ten atrybut służy do konfigurowania typu strony niestandardowej strony kreatora, którą ładuje Kreator UDI. Kreator UDI Designer używa tego atrybutu do zlokalizowania odpowiedniego elementu Page w pliku konfiguracji Kreatora UDI.
Dll. Użyj tego atrybutu, aby skonfigurować element DLL w pliku konfiguracji Kreatora UDI, który tworzy Kreator UDI Designer.
opis. Użyj tego atrybutu, aby podać informacje o edytorze stron kreatora. Wartość tego atrybutu jest wyświetlana w oknie dialogowym Dodawanie nowej strony w Kreatorze UDI Designer, który służy do dodawania strony kreatora do "Biblioteki stron".
DisplayName. Użyj tego atrybutu, aby podać nazwę niestandardowej strony kreatora, która jest wyświetlana w Kreatorze UDI Designer. Wartość tego atrybutu jest wyświetlana w oknie dialogowym Dodawanie nowej strony w Kreatorze UDI Designer, który służy do dodawania strony kreatora do "Biblioteki stron".
W tym przykładzie typ strony kreatora niestandardowego SamplePage to Microsoft.SamplePage.LocationPage, który jest zapisywany w pliku Config.xml. Plik Config.xml znajduje się w folderze local_folder\SDK\SamplePage\SamplePage do folderu (gdzie local_folder jest folderem utworzonym na komputerze deweloperskim wcześniej w procesie konfiguracji).
Zapoznaj się z interfejsem użytkownika używanym do konfigurowania pola kombi lokalizacji
Po załadowaniu i zainicjowaniu edytora stron kreatora edytor stron kreatora SampleEditor jest ładowany po edycji strony o typie Microsoft.SamplePage.LocationPage . Interfejs użytkownika edytora stron jest przechowywany w pliku LocationPageEditor.xaml.
Jeśli sprawdzisz interfejs użytkownika na karcie Projektowanie i kod na karcie XAML , zobaczysz relację między graficznym interfejsem użytkownika a elementami i atrybutami w języku XAML (Extensible Application Markup Language).
Jeśli na przykład przejrzysz element Controls:FieldElementControl w języku XAML, zobaczysz, jak odnosi się to do układu odpowiedniego interfejsu użytkownika. Użyj elementu Controls:FieldElementControl , aby zdefiniować kontrolkę FieldElementControl .
Parametry powiązania w pliku XAML wiążą pola w edytorze przykładowych stron z informacjami w pliku konfiguracji kreatora UDI. Na przykład poniższy kod wiąże pole tekstowe Wartość domyślna z elementem Default w pliku konfiguracji kreatora UDI (Config.xml w przykładzie):
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
Aby uzyskać więcej informacji, zobacz Instrukcje: udostępnianie danych do powiązania w języku XAML.
Użyj elementu Views:CollectionTControl.ColumnCollectionView w języku XAML, aby edytować listę dostępnych lokalizacji w widoku siatki. Kontrolka CollectionTControl służy do wyświetlania widoku siatki i powiązania widoku siatki z elementem Dane o nazwie Lokalizacja w pliku konfiguracji UDI.
Przejrzyj interfejs użytkownika używany do modyfikowania listy możliwych lokalizacji
Interfejs użytkownika do modyfikowania listy możliwych lokalizacji składa się z następujących elementów:
Menu kontekstowe i przyciski wstążki, które umożliwiają dodawanie, edytowanie, usuwanie lub zmienianie kolejności elementów na liście lokalizacji zgodnie z opisem w temacie Przeglądanie menu kontekstowego i przycisków wstążki do modyfikowania listy lokalizacji
Okno dialogowe inicjowane po wybraniu opcji dodawania lub edytowania elementu na liście lokalizacji zgodnie z opisem w temacie Przeglądanie okna dialogowego dodawania lub edytowania lokalizacji
Przejrzyj menu kontekstowe i przyciski wstążki, aby zmodyfikować listę lokalizacji
Po kliknięciu prawym przyciskiem myszy w polu listy zawierającym listę lokalizacji zostanie wyświetlone menu kontekstowe. Wstążka zawiera odpowiednie przyciski, które umożliwiają wykonywanie tych samych zadań. Element kontrolki Views:CollectionsTControl w pliku LocationPageEditor.xaml definiuje metody wywoływane na podstawie podjętej akcji i właściwości ustawionych w następujący sposób:
SelectedItem. Ta właściwość powiązana z danymi jest aktywowana, gdy użytkownik wybierze element z listy. Ta właściwość jest powiązana z właściwością CurrentLocation w modelu widoku, która znajduje się w pliku LocationPageEditorViewModel.cs i jest używana przez kontrolkę CollectionTControl do przekazania elementu wybranego podczas edytowania lub usuwania istniejącego elementu.
AddItemAction. Ta akcja jest wykonywana, gdy użytkownik wybierze opcję Dodaj element z menu kontekstowego lub odpowiednich przycisków na Wstążce. Istnieje powiązanie danych z właściwością w modelu widoku, które zwraca obiekt AddLocationAction . Ten obiekt jest metodą AddLocationCallback znajdującą się w pliku LocationPageEditorViewModel.cs i wyświetla okno dialogowe w pliku AddEditLocationView.xaml.
EditItemAction. Ta akcja jest wykonywana, gdy użytkownik wybierze opcję Edytuj element z menu kontekstowego. Istnieje powiązanie danych z właściwością w modelu widoku, które zwraca obiekt EditLocationAction . Ten obiekt jest metodą EditLocationCallback znajdującą się w pliku LocationPageEditorViewModel.cs i wyświetla okno dialogowe w pliku AddEditLocationView.xaml.
RemoveAction. Ta akcja jest wykonywana, gdy użytkownik wybierze opcję Usuń element z menu kontekstowego. Istnieje powiązanie danych z właściwością w modelu widoku, które zwraca obiekt RemoveAction . Ten obiekt jest metodą EditLocationCallback znajdującą się w pliku LocationPageEditorViewModel.cs i wyświetla komunikat potwierdzający usunięcie lokalizacji.
Przejrzyj okno dialogowe dodawania lub edytowania lokalizacji
Jeśli dodasz nową lokalizację do listy lokalizacji lub zmodyfikujesz istniejącą lokalizację, zostanie wyświetlony komunikat w pliku AddEditLocationView.xaml. Komunikat jest wyświetlany przy użyciu metody okna ShowDialogWindow w pliku LocationPageEditorViewModel.cs.
Interfejs użytkownika w pliku AddEditLocationView.xaml składa się z następujących elementów:
Ramka okna dialogowego o nazwie DialogFrame zawierająca następujące elementy:
Tytuł konfigurowany przy użyciu atrybutu DialogTitle ramki okna dialogowego
Przycisk OK , który ustawia stan zwracany dla właściwości Approved na wartość True (Stan zwracany jest sprawdzany w metodzie AddLocationCallback w pliku LocationPageEditorViewModel.cs, aby określić, czy użytkownik wybrał przycisk OK).
Przycisk Anuluj , który ustawia stan zwracany dla właściwości Approved na wartość False (stan zwracany jest sprawdzany w metodzie AddLocationCallback w pliku LocationPageEditorViewModel.cs, aby określić, czy użytkownik wybrał opcję Anuluj).
Element WPF, który zawiera:
Etykieta skonfigurowana przy użyciu atrybutu Zawartość
Pole tekstowe powiązane z elementem Dane o nazwie Location w pliku konfiguracji UDI (plik Config.xml w przykładzie)
Przejrzyj kod używany do zarządzania informacjami o konfiguracji
Informacje o konfiguracji strony kreatora niestandardowego są przechowywane w pliku konfiguracji Kreatora UDI, który jest następujący:
Config.xml pliku w przykładzie dostarczonym z zestawem UDI SDK (ten plik zawiera tylko ustawienia konfiguracji dla przykładu).
UDIWizard_Config.xml plik dostarczony z mdt, przechowywane w folderze installation_folder\Templates\Distribution\Scripts (gdzie installation_folder jest folderem, w którym zainstalowano mdt); ten plik zawiera ustawienia konfiguracji dla wszystkich wbudowanych stron kreatora i etapów
W przykładzie SampleEditor procedura Lokalizacje ułatwia zarządzanie informacjami o konfiguracji i znajduje się w pliku LocationPageEditorViewModel.cs. Procedura Lokalizacje zwraca listę lokalizacji z pliku konfiguracji Kreatora UDI. W szczególności zwracana lista zawiera element dla każdego elementu DataItem w pliku konfiguracji Kreatora UDI.
Tworzenie niestandardowych stron Kreatora UDI
Proces wysokiego poziomu tworzenia niestandardowych stron kreatora UDI jest następujący:
Utwórz kopię rozwiązania SamplePage jako punkt początkowy.
Umieść żądane kontrolki (pola) w formularzu.
Napisz kod, aby wykonać odpowiednie zadania podczas ładowania strony kreatora (zastępuje metodę OnWindowCreated ), w tym następujące kroki:
Inicjowanie formularza.
Odczytywanie zmiennych pamięci, zmiennych sekwencji zadań, zmiennych środowiskowych lub informacji o pliku XML (takich jak właściwości settera ).
Napisz dowolny kod, aby wykonać odpowiednie zadania, gdy zostanie wyświetlona strona (zastąpi metodę OnWindowShown ), w tym następujące kroki:
Włącz lub wyłącz kontrolki na podstawie informacji odczytanej po załadowaniu strony w kroku 3.
Zaktualizuj kontrolki na podstawie informacji odczytanych po załadowaniu strony w kroku 3, takich jak populacja kontrolek na podstawie odczytanych informacji.
Napisz dowolny kod, aby wykonać odpowiednie zadania, gdy użytkownik wchodzi w interakcję ze stroną kreatora.
Napisz dowolny kod, aby wykonać odpowiednie zadania, gdy użytkownik wybierze pozycję Dalej w Kreatorze UDI (zastępuje metodę OnNextSelected ), w tym następujące kroki:
Zaktualizuj wszelkie zmienne pamięci, zmienne sekwencji zadań, zmienne środowiskowe lub informacje o pliku XML.
Zaktualizuj informacje o stronie podsumowania (jeśli nie są wykonywane przez pola na stronie).
Skompiluj rozwiązanie.
Upewnij się, że utworzona wersja biblioteki DLL jest tą samą platformą procesora co instalacja mdt — w szczególności platforma procesora dla środowiska preinstalacji systemu Windows (Windows PE). Kreator UDI może działać w:
Istniejący system operacyjny na komputerze docelowym. 32-bitowe wersje strony kreatora można uruchamiać w 32-bitowych lub 64-bitowych systemach operacyjnych Windows. Można jednak uruchamiać tylko 64-bitowe wersje strony kreatora w 64-bitowych systemach operacyjnych Windows.
Windows PE na komputerze docelowym. System Windows PE nie obsługuje uruchamiania aplikacji 32-bitowych w 64-bitowej wersji środowiska Windows PE. Dlatego musisz utworzyć wersję strony kreatora dla każdej architektury procesora systemu Windows PE, która ma być używana.
Skopiuj bibliotekę DLL dla strony kreatora niestandardowego do folderu installation_folder\Templates\Distribution\Tools\ platform (gdzie installation_folder jest folderem, w którym zainstalowano oprogramowanie MDT, a platforma to x86 dla wersji 32-bitowej lub x64 jest w wersji 64-bitowej).
Wykonaj kroki tworzenia niestandardowego edytora stron.
Tworzenie edytorów stron kreatora niestandardowego
Proces wysokiego poziomu tworzenia niestandardowych edytorów stron kreatora UDI jest następujący:
Utwórz kopię rozwiązania SampleEditor jako punkt początkowy.
Utwórz interfejs użytkownika edytora stron podstawowych w pliku xaml.
Dodaj wystąpienia kontrolki FieldElementControl zgodnie z wymaganiami strony kreatora do skonfigurowania (jeśli jest to wymagane).
Dodaj wystąpienia kontrolki SetterControl zgodnie z wymaganiami strony kreatora do skonfigurowania (jeśli jest to wymagane).
Dodaj wystąpienia kontrolki CollectionTControl zgodnie z wymaganiami strony kreatora do skonfigurowania (jeśli jest to wymagane).
Dodaj interfejs IDataService .
Napisz odpowiedni kod, aby zaktualizować plik konfiguracji Kreatora UDI na podstawie ustawień konfiguracji, które mają zostać skonfigurowane przy użyciu niestandardowego edytora stron kreatora.
Utwórz okna dialogowe podrzędne w pliku xaml i wywołaj je z edytora stron podstawowych przy użyciu interfejsu IMessageBoxService zgodnie z wymaganiami strony kreatora do skonfigurowania.
Dodaj odpowiednie interfejsy do Kreatora UDI Designer Wstążki na podstawie wymagań strony kreatora do skonfigurowania.
Skompiluj rozwiązanie.
Uwaga
Upewnij się, że utworzona wersja biblioteki DLL jest tą samą platformą procesora co instalacja mdt. Jeśli na przykład zainstalujesz 64-bitową wersję mdt, skompiluj 64-bitową wersję niestandardowego edytora stron.
Utwórz Kreatora UDI Designer pliku konfiguracji, aby załadować niezbędne biblioteki DLL i zamapować edytor stron kreatora na odpowiednią stronę kreatora (plik SamplePage.dll.config w przykładzie).
Aby uzyskać więcej informacji o elementach wymaganych do wykonania mapowania między stroną kreatora a edytorem stron kreatora, zobacz element DesignerMappings , elementy podrzędne i odpowiednie atrybuty.
Skopiuj plik konfiguracji kreatora UDI Designer utworzony w poprzednim kroku do folderu installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano wersję MDT).
Skopiuj bibliotekę DLL dla niestandardowego edytora stron kreatora do folderu installation_folder\Bin (gdzie installation_folder jest folderem, w którym zainstalowano funkcję MDT).
Tworzenie niestandardowych zadań UDI
Zadania UDI to biblioteki DLL napisane w języku C++, które implementują interfejs ITask. Bibliotekę DLL można zarejestrować za pomocą Kreatora UDI Designer biblioteki zadań, tworząc Kreatora UDI Designer pliku konfiguracji (plik .config) i umieszczając go w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano funkcję MDT).
Uwaga
Możesz utworzyć bibliotekę DLL zawierającą strony kreatora, zadania i moduły sprawdzania poprawności w tym samym pliku .dll. Można również utworzyć jeden kreator UDI Designer pliku konfiguracji (.config), który zawiera ustawienia konfiguracji stron kreatora, zadań i modułów walidatorów w bibliotekę DLL.
Aby utworzyć niestandardowe zadania UDI
Napisz kod, który implementuje interfejs ITask i następujące metody:
Napisz kod, który rejestruje niestandardową fabrykę klas zadań w rejestrze fabryki.
Skompiluj rozwiązanie dla zadania niestandardowego.
Uwaga
Upewnij się, że utworzona wersja biblioteki DLL jest tą samą platformą procesora co instalacja mdt. Jeśli na przykład zainstalujesz 64-bitową wersję mdt, skompiluj 64-bitową wersję niestandardowego zadania UDI.
Utwórz element Task w elemencie TaskLibrary w Kreatorze UDI Designer pliku konfiguracji podobny do następującego fragmentu:
<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>
Uwaga
Wszystkie elementy zadania powinny zawierać parametr BitmapFilename . Określ wszystkie inne parametry zgodnie z wymaganiami zadania. Na przykład w poprzednim fragmencie parametr dziennika służy do określania parametru lokalizacji pliku dziennika.
Skopiuj kreatora UDI Designer plik konfiguracji utworzony w poprzednim kroku do folderu installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano mdt).
Skopiuj bibliotekę DLL zadania niestandardowego do folderu platformy installation_folder\Templates\Distribution\Tools\ (gdzie installation_folder jest folderem, w którym zainstalowano oprogramowanie MDT, a platforma to x86 dla wersji 32-bitowej lub x64 jest przeznaczony dla wersji 64-bitowej).
Tworzenie niestandardowych modułów sprawdzania poprawności UDI
Moduły sprawdzania poprawności UDI to biblioteki DLL napisane w języku C++, które implementują interfejs IValidator . Bibliotekę DLL można zarejestrować za pomocą kreatora UDI Designer biblioteki modułu sprawdzania poprawności, tworząc Kreatora UDI Designer pliku konfiguracji (plik .config) i umieszczając go w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano funkcję MDT).
Aby utworzyć niestandardowe moduły sprawdzania poprawności UDI
Napisz kod, który tworzy podklasę klasy BaseValidator i implementuje następujące metody:
Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Kontroler formularzy wywołuje element członkowski Init w celu zainicjowania modułu sprawdzania poprawności. Ta metoda musi wywołać metodę Init dla klasy BaseValidator . Zazwyczaj odczytuje wszystkie właściwości ustawione dla modułu sprawdzania poprawności z pliku konfiguracji Kreatora UDI. Na przykład moduł sprawdzania poprawności InvalidCharactersValidator pobiera wartość właściwości InvalidChars przy użyciu tej metody.
IsValid. Kontroler formularzy wywołuje tę metodę, aby sprawdzić, czy kontrolka zawiera prawidłowy tekst. Poniżej przedstawiono przykład metody IsValid dla modułu sprawdzania poprawności, który sprawdza, czy pole nie jest puste:
BOOL IsValid(LPBSTR pMessage) { __super::IsValid(pMessage); _bstr_t text; m_pText->GetText(text.GetAddress()); return (text.length() > 0); }
Init(IControl *pControl, komunikat LPCTSTR). Kontroler formularzy wywołuje ten element członkowski dla każdego naciśnięcia i innych zdarzeń, aby moduł sprawdzania poprawności mógł zweryfikować zawartość kontrolki i zaktualizować komunikaty w dolnej części strony kreatora (lub wyczyścić je).
Zazwyczaj są to jedyne metody, które należy zastąpić. Jednak w zależności od modułu sprawdzania poprawności może być konieczne zastąpienie innych metod w podklasie tworzonej klasy BaseValidator . Aby uzyskać więcej informacji na temat tych innych metod, zobacz BaseValidator , klasa.
Napisz kod, który rejestruje niestandardową klasę zadań w fabryce rejestru.
Skompiluj rozwiązanie dla zadania niestandardowego.
Uwaga
Upewnij się, że utworzona wersja biblioteki DLL jest tą samą platformą procesora co instalacja mdt. Jeśli na przykład zainstalujesz 64-bitową wersję mdt, skompiluj 64-bitową wersję niestandardowego zadania UDI.
Utwórz element Validator w elemencie ValidatorLibrary w kreatorze UDI Designer plik konfiguracji podobny do następującego fragmentu:
<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>
Ostrzeżenie
Wszystkie elementy modułu sprawdzania poprawności powinny zawierać parametr Komunikat . Określ wszystkie inne parametry zgodnie z wymaganiami modułu weryfikatora. Na przykład w poprzednim fragmencie parametr NamedPattern jest używany do określania parametru dla nazwy wstępnie zdefiniowanego wzorca wyrażenia regularnego.
Skopiuj kreatora UDI Designer plik konfiguracji utworzony w poprzednim kroku do folderu installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano mdt).
Skopiuj bibliotekę DLL zadania niestandardowego do folderu platformy installation_folder\Templates\Distribution\Tools\ (gdzie installation_folder jest folderem, w którym zainstalowano oprogramowanie MDT, a platforma to x86 dla wersji 32-bitowej lub x64 jest przeznaczony dla wersji 64-bitowej).
Dokumentacja kreatora UDI
Składniki strony Kreatora
Do tworzenia stron niestandardowych można użyć dowolnego z kilku wstępnie utworzonych składników.
Tworzenie wystąpień składników
Kreator UDI używa fabryk klas do tworzenia nowych wystąpień obiektów. Te fabryki są rejestrowane w rejestrze fabryki przy użyciu ciągu jako klucza do fabryki. Na przykład składnik WmiRepository jest identyfikowany przez ciąg "Microsoft.Wizard.WmiRepository", który jest dostępny w pliku nagłówka IWmiRepository jako ID_WmiRepository.
Zakładając, że strona została napisana jako podklasa WizardPageImpl, możesz utworzyć nowe wystąpienie obiektu WmiRepoistory w następujący sposób:
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
Funkcja CreateInstance jest funkcją bezpiecznego dla typu szablonu do tworzenia nowych wystąpień składników. PWmiRepository to inteligentny wskaźnik, który obsługuje zliczanie odwołań.
Składniki creatable
Istnieje zestaw składników, które można zarejestrować w rejestrze. Pierwszy zestaw składników jest zawsze zarejestrowany, ponieważ udostępnia go główny plik wykonywalny Kreatora UDI. Pozostałe dwa zestawy składników są dostępne w "opcjonalnych" bibliotekach DLL. Aby te składniki były dostępne, biblioteka DLL musi być wymieniona w sekcji biblioteki DLL pliku XML .config. Kod nie musi wiedzieć, który plik wykonywalny zawiera określony składnik.
Lista identyfikatorów składników dla składników (nazwa składnika jest taka sama jak identyfikator, ale bez początkowej ID_) zarejestrowana w rejestrze fabryki (zdefiniowana w OSDSetupWizard) jest wyświetlana w tabeli 3.
Tabela 3. Identyfikatory składników
ID | Opis |
---|---|
ID_ACPowerTask | (ITask, IWizardComponent) Zadanie wstępne, które gwarantuje, że komputer nie jest uruchomiony tylko na baterii |
ID_AppDiscoveryTask | (ITask, IWizardComponent) Wyspecjalizowane zadanie do odnajdywania elementów oprogramowania zainstalowanych na komputerze |
ID_BackgroundTask | (IBackgroundTask, IWizardComponent) Może służyć do uruchamiania zadania w innym wątku |
ID_CopyFilesTask | (ITask, IWizardComponent) Zadanie kopiowania co najmniej jednego pliku |
ID_FormController | (IFormController) Najbardziej lubisz, aby nie trzeba było samodzielnie tworzyć wystąpienia, ponieważ strona otrzymuje własne wystąpienie |
ID_InvalidCharactersValidator | (IValidator) Zapewnia, że żadne pole tekstowe nie zawiera znaków z listy dostarczonej do modułu sprawdzania poprawności |
ID_Logger | (ILogger) Najbardziej lubisz, aby nie trzeba było samodzielnie tworzyć wystąpienia, ponieważ strona otrzymuje wskaźnik do udostępnionego wystąpienia |
ID_NonEmptyValidator | (IValidator) Moduł sprawdzania poprawności, który zapewnia, że żadne pole nie jest puste |
ID_PasswordValidator | (IValidator) Moduł sprawdzania poprawności, który zapewnia, że żadne dwa pola tekstowe nie mają tej samej zawartości |
ID_Regex | (IRegEx) Ocenia wyrażenia regularne w poszukiwaniu dopasowań |
ID_RegExValidator | (IValidator) Moduł sprawdzania poprawności, który sprawdza poprawność względem wyrażenia regularnego lub znanego wzorca |
ID_SimpleStringProperties | (IStringProperties, ISimpleStringProperties) Zapewnia prosty sposób wysyłania właściwości do zadań bez użycia kodu XML |
ID_ShellExecuteTask | (ITask, IWizardComponent) Wykonywanie programu zewnętrznego |
ID_SummaryBag | (ISummaryBag) Dostępne pośrednio na stronie za pośrednictwem metody Form |
ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent) Zarządza uruchamianiem zestawu zadań i interfejsu użytkownika |
ID_WmiRepository | (IWmiRepository, IWizardComponent) Umożliwia uruchamianie zapytań instrumentacji zarządzania windows (WMI) |
ID_IXmlDocument | (IXmlDocument) Zapewnia fasadę do odczytywania i pisania dokumentów XML |
Zdefiniowane OSDRefreshWizard.dll, strony udostępnione i inne składniki kontrolek są wyświetlane w tabelach 4 i 5.
Tabela 4. Kontrolki katalogów
ID | Opis |
---|---|
ID_Directory | (IDirectory) Fasada do uzyskiwania informacji o katalogu z systemu plików |
Tabela 5. Zdefiniowane SharedPages.dll
ID | Opis |
---|---|
ID_ADHelper | (IADHelper) Zapewnia fasadę dla ograniczonego zestawu funkcji w usłudze Active Directory® Domain Services (AD DS) |
ID_CpuInfo | (ICpuInfo) Określa, czy procesor CPU ma 32 czy 64 bity |
ID_DomainJoinValidator | (IDomainJoinValidator) Ma kilka metod sprawdzania, czy zestaw poświadczeń może dołączyć do domeny |
ID_DriveList | (IDriveList, IBindableList, IWizardComponent) Używa usługi WMI do uzyskania listy dysków na komputerze |
ID_WiredNetworkTask | (ITask) Zadania, które sprawdzają, czy masz połączenie z siecią za pomocą przewodowej (zamiast bezprzewodowej) karty sieciowej |
Składniki kontrolki
Kontrolki na stronie są używane za pomocą funkcji szablonu GetControlWrapper , która zapewnia dostęp do jednego z typów składników wymienionych w tabeli 6.
Tabela 6. Składniki
Typy kontrolek okien dialogowych | Opis |
---|---|
CONTROL_CHECK_BOX | (ICheckBox) Fasada do pracy z kontrolkami pól wyboru |
CONTROL_COMBO_BOX | (IComboBox) Fasada kontrolek pola kombi |
CONTROL_GENERIC | (IControl) Umożliwia pracę z większością typów kontrolek w celu kontrolowania stanu włączania i widocznego |
CONTROL_LIST_VIEW | (IListView) Fasada zapewniająca dostęp do funkcji kontrolki widoku listy |
CONTROL_PROGRESS_BAR | (IProgressBar) Fasada do pracy z położeniem kontrolki paska postępu |
CONTROL_RADIO_BUTTON | (IRadioButton) Fasada do pracy z kontrolkami przycisków radiowych |
CONTROL_STATIC_TEXT | (IStaticText) Fasada, która zapewnia uprawnienie do odczytu/zapisu do tekstu kontrolki, na przykład etykiety lub pola tekstowego |
CONTROL_TREE_VIEW | (ItreeView) Fasada do pracy z kontrolką widoku drzewa |
Składnik listy obrazów
Ten składnik jest fasadą kontrolki ImageList na stronie. Listę obrazów można utworzyć za pośrednictwem interfejsu IListView lub ITreeView .
Składnik FormController
Kreator tworzy ten składnik i przekazuje go do strony. Dostęp do niej można uzyskać ze strony przy użyciu metody Form , którą implementuje klasa bazowa WizardPageImpl .
InvalidCharacterValidator, składnik
Jest to typ modułu weryfikatora, który można uwzględnić na stronie. Identyfikator jest ID_InvalidCharactersValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.InvalidChars".
Ten moduł sprawdzania poprawności szuka pojedynczej właściwości (elementu Setter w pliku .config) o nazwie InvalidChars, która jest listą niedozwolonych znaków. Sprawdza znaki w polu tekstowym; Jeśli tekst zawiera znaki z tej listy, składnik zgłasza błąd.
NonEmptyValidator, składnik
Jest to typ modułu weryfikatora, który można uwzględnić na stronie. Identyfikator jest ID_NonEmptyValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.NonEmpty".
Ten moduł sprawdzania poprawności zgłasza błąd, jeśli pole tekstowe (lub dowolna inna kontrolka obsługujące tekst IStaticText) ma pustą wartość ciągu.
PasswordValidator, składnik
Jest to typ modułu weryfikatora, który można uwzględnić na stronie. Identyfikator jest ID_PasswordValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.Password".
Ten moduł sprawdzania poprawności współpracuje z dwoma różnymi kontrolkami tekstowymi (kontrolkami obsługują funkcję IStaticText) i zgłasza błąd, jeśli nie zawierają tych samych wartości. Innymi słowy, niepowodzenie kończy się niepowodzeniem, jeśli pola tekstowe Hasło i Potwierdź hasło nie są zgodne.
Ponieważ ten moduł sprawdzania poprawności wymaga dwóch kontrolek, wymaga większej konfiguracji niż inne moduły sprawdzania poprawności. Konfiguracja może wyglądać mniej więcej tak:
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);
Najpierw należy zdefiniować kontrolkę Potwierdź hasło jako "podrzędną" kontrolki Hasło . Dzięki temu, jeśli kontroler formularza wyłączy kontrolkę Hasło , wyłączy również kontrolkę Potwierdź hasło . Następnie dodaj moduł sprawdzania poprawności haseł do formularza. Na koniec podaj moduł sprawdzania poprawności haseł z interfejsem do kontrolki Potwierdź hasło .
Ze względu na wymagania dotyczące dwóch kontrolek należy użyć kodu do skonfigurowania tego modułu sprawdzania poprawności, a nie .config pliku XML.
RegExValidator, składnik
Jest to typ modułu weryfikatora, który można uwzględnić na stronie. Identyfikator jest ID_RegExValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.RegEx".
Ten moduł sprawdzania poprawności porównuje zawartość kontrolki tekstu (która obsługuje tekst IStaticText) z wyrażeniem regularnym i kończy się niepowodzeniem, jeśli tekst nie jest zgodny z wyrażeniem regularnym.
Możesz też użyć tego modułu weryfikatora ze wstępnie zdefiniowanym wzorcem nazwanym. Aby używać wyrażenia regularnego, kod XML musi zawierać właściwość setter o nazwie Pattern. Jeśli chcesz zamiast tego użyć nazwanego wzorca, użyj settera o nazwie NamedPattern ustawionego na jedną z wartości w tabeli 7.
Tabela 7. Nazwane settery wzorców
Wzorzec | Opis |
---|---|
Nazwa użytkownika | Sprawdza, czy tekst ma postać domain\user lub user@domain |
Nazwa komputera | Nazwa musi mieć długość od 1 do 15 znaków i nie może zawierać zestawu znaków (takich jak : i ?) |
Workgroup | Nazwa musi mieć długość od 1 do 15 znaków i nie może zawierać zestawu znaków (takich jak =, +i ?) |
FactoryRegistry, składnik
Ten składnik śledzi wszystkie fabryki i usługi klasy. Implementuje interfejs IFactoryRegistry i jest dostępny pośrednio za pośrednictwem metody kontenera strony. Ponadto rejestr ładuje biblioteki DLL rozszerzeń. Po załadowaniu biblioteki DLL rejestr szuka wyeksportowanych funkcji o nazwie RegisterFactories. Należy zaimplementować tę funkcję i w niej zarejestrować fabryki klas dla stron, zadań i walidatorów (i innych fabryk klas, które chcesz zarejestrować). Oto przykład z przykładowego projektu:
extern "C" __declspec(dllexport) void RegisterFactories(IFactoryRegistry *factories)
{
Register<LocationPageFactory>(ID_LocationPage, factories);
}
Składnik rejestratora
Ten składnik jest dostępny na stronie za pośrednictwem metody Logger (implementowane przez WizardPageImpl). Ta metoda służy do zapisywania wpisów w pliku dziennika. Zawartość pliku dziennika jest przydatna do diagnozowania problemów, w których użytkownicy mogą uruchamiać Kreatora UDI.
PropertyBag, składnik
Worek właściwości jest kontenerem dla zmiennych pamięci. Jest ona dostępna na twojej stronie przy użyciu polecenia Container()->Properties(). Zmienne pamięci są przydatne do przekazywania danych tymczasowych między różnymi stronami.
Składniki TSVariableBag i TSRepository
Składnik TSVariableBag umożliwia odczytywanie i zapisywanie zmiennych sekwencji zadań. Przechowuje wartości w pamięci, dopóki użytkownik nie wybierze opcji Zakończ (domyślnie). Dostęp do torby TSVariable można uzyskać za pomocą metody TSVariables strony (wdrożonej przez klasę bazową WizardPageImpl ). Te składniki rejestrują wszystkie operacje odczytu i zapisu zmiennych sekwencji zadań.
Składnik WmiRepository
Ten składnik zapewnia fasadę do pracy z zapytaniami WMI. Aby uzyskać wystąpienie tego składnika, które obsługuje interfejs IWmiRepository, można wywołać funkcję pomocnika CreateInstance z ID_WmiRepository. Ten składnik zwraca rekordy wyników za pośrednictwem interfejsu IWmiIterator .
Klasy pomocników stron kreatora
Niestandardowe strony kreatora UDI można tworzyć przy użyciu wbudowanych klas pomocniczych dostarczanych z zestawem UDI SDK. Tabela 8 zawiera listę klas pomocniczych, których można użyć do tworzenia niestandardowych stron kreatora.
Tabela 8. Klasy pomocnika
Klasa pomocnika | Opis |
---|---|
ClassFactoryImpl, klasa | Jest to przydatna klasa podstawowa do tworzenia fabryki klas, którą można następnie zarejestrować w rejestrze fabryki. |
Klasa szablonu interfejsu | Ta klasa szablonu służy do tworzenia składnika implementującego więcej niż jeden interfejs. |
Klasa pomocnika ścieżki | Ta klasa udostępnia typowe operacje na plikach/katalogach. |
Klasa szablonu wskaźnika | Ta klasa zapewnia zliczanie odwołań do zarządzania okresem istnienia w składnikach COM. Ważne jest, aby wydawać interfejsy, gdy skończysz z nimi korzystać. Ta klasa szablonu automatycznie obsługuje okres istnienia. |
Klasa PUnknown | Ta klasa jest inteligentnym wskaźnikiem przeznaczonym specjalnie dla interfejsu IUnknown. W przypadku wszystkich innych interfejsów użyj klasy Szablon wskaźnika. |
StringUtil, klasa pomocnika | Ta klasa udostępnia metody pomocnicze, które ułatwiają pracę z ciągami. |
SubInterface, klasa szablonu | Ta klasa podstawowa ułatwia zaimplementowanie składnika obsługującego interfejs, który sam dziedziczy po innym interfejsie. |
UnknownImpl, klasa szablonu | Ta klasa obsługuje większość szczegółów tworzenia składnika COM. |
WizardComponent, klasa szablonu | Ta klasa podstawowa jest używana do tworzenia składników, które wymagają dostępu do usług kreatora, takich jak tworzenie składników i rejestrowanie. |
WizardPageImpl, klasa szablonu | Ta klasa podstawowa powinna być używana jako klasa podstawowa dla wszystkich stron kreatora niestandardowego |
ClassFactoryImpl, klasa
Jest to przydatna klasa podstawowa do tworzenia fabryki klas, którą można następnie zarejestrować w rejestrze fabryki.
Poniżej przedstawiono fragment pliku LocationPage.h w przykładowym projekcie w celu zdefiniowania klasy ClassFactoryImpl .
#pragma once
#include "ClassFactoryImpl.h"
class LocationPageFactory :public ClassFactoryImpl
{
protected:
IUnknown *CreateNewInstance();
};
Poniżej przedstawiono fragment pliku LocationPage.cpp na przykładowej stronie kreatora użytej do zdefiniowania fabryki klas dla strony.
IUnknown *LocationPageFactory::CreateNewInstance()
{
return static_cast<IWizardPage *>(new LocationPage);
}
Klasa szablonu interfejsu
Użyj tej klasy szablonu, gdy chcesz utworzyć składnik, który implementuje więcej niż jeden interfejs — na przykład:
classLocationPage :public Interface<IFieldCallback, WizardPageImpl<IDD_LOCATION_PAGE>>
Ten kod tworzy łańcuch klas bazowych, który obsługuje zarówno IFieldCalback , jak i interfejsy obsługiwane przez program WizardPageImpl (czyli IWizardPage).
Klasa pomocnika ścieżki
Ta klasa udostępnia typowe operacje na plikach/katalogach:
static inline std::wstring GetModulePath(HINSTANCE hModule)
Zwraca również pełną ścieżkę do pliku .exe lub .dll z dojściem wystąpienia podanym w tej metodzie:
static inline std::wstring GetModuleFilename(HINSTANCE hModule)
Klasa zwraca pełną ścieżkę i nazwę pliku .exe i .dll z dojściem wystąpienia podanym w tej metodzie:
static inline std::wstring GetDirectoryName(LPCWSTR fullName)
. . . lub tylko ścieżkę podczas usuwania nazwy pliku:
static inline std::wstring GetFileName(LPCWSTR fullName)
Biorąc pod uwagę ścieżkę o nazwie pliku, klasa pomocnika ścieżki zwraca tylko nazwę pliku:
static inline std::wstring Combine(LPCWSTR path, LPCWSTR name)
Na koniec klasa zwraca nowy ciąg, który jest połączoną ścieżką i nazwą pliku (lub inną ścieżką).
Klasa szablonu wskaźnika
Ta klasa jest zdefiniowana w pliku Pointer.h. Ponieważ składniki COM używają zliczania odwołań do zarządzania okresem istnienia, ważne jest, aby zawsze wydawać interfejsy po zakończeniu pracy z nimi. Firma Microsoft udostępnia klasę szablonu, która automatycznie obsługuje okres istnienia. Jeśli na przykład potrzebujesz inteligentnego wskaźnika dla interfejsu XML, możesz napisać coś takiego:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Pierwszy wiersz definiuje inteligentny wskaźnik. Drugi wiersz przedstawia pobieranie inteligentnego wskaźnika za pośrednictwem innego wywołania. Operator & zawsze zwalnia istniejący interfejs, jeśli go zawiera, i zwraca adres wewnętrznego wskaźnika. Po pobraniu takiego wskaźnika wystąpienie wskaźnika wywołuje dla Ciebie wersję , gdy zmienna wykracza poza zakres. Firma Microsoft zaleca używanie inteligentnych wskaźników zamiast ręcznego wywoływania funkcji AddRef i Release .
Ponadto klasa wskaźnika inteligentnego wskaźnika wywołujefunkcję QueryInterface w celu pobrania innych interfejsów. Na przykład gdy rejestr fabryki tworzy nowe wystąpienie składnika, ma kod podobny do następującego:
PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
pComp->SetContainer(m_pContainer);
Pierwszy wiersz wywołuje funkcję QueryInterface w tle, aby zażądać interfejsu IWizardComponent . Wynikowy inteligentny wskaźnik będzie równy nullptr , jeśli składnik nie obsługuje tego interfejsu.
Klasa PUnknown
Ta klasa jest inteligentnym wskaźnikiem przeznaczonym specjalnie dla interfejsu IUnknown . W przypadku wszystkich innych interfejsów użyj klasy Szablon wskaźnika .
StringUtil, klasa pomocnika
Ta klasa jest zdefiniowana w pliku Utilities.h i udostępnia metody pomocnicze, które ułatwiają pracę z ciągami:
static inline int CompareIgnore(LPCWSTR first, LPCWSTR second)
Ta metoda porównuje dwa ciągi podczas ignorowania wielkości liter (zobacz Tabela 9).
Tabela 9. StringUtil, klasa pomocnika
Zwraca | Opis |
---|---|
0 | Ciągi są zgodne, ignorując wielkość liter |
<0 | Pierwsza < sekunda |
>0 | Pierwsza > sekunda |
Oto przykład:
static inline std::wstring Format(LPCWSTR input, int index, LPCWSTR value)
static inline std::wstring Format(LPCWSTR input, int index, DWORD value)
Te metody są nieco podobne do metod formatu microsoft .NET w tym sensie, że parametry mają postać {0}. Jednak nie wykonują one żadnego formatowania danych wejściowych — wystarczy podstawić:
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)
Otoki wokół stringCchPrintf , które zwracają wstring , więc nie trzeba przydzielać pamięci dla ciągów lub siebie.
SubInterface, klasa szablonu
Ta klasa podstawowa ułatwia zaimplementowanie składnika obsługującego interfejs, który sam dziedziczy po innym interfejsie. Na przykład interfejs ICheckBox dziedziczy element iControl. Oto jak ta klasa jest używana do definiowania elementu CheckBoxWrapper:
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
Interfejs podstawowy jest pierwszym parametrem, podczas gdy interfejs pochodny jest drugim parametrem.
UnknownImpl, klasa szablonu
Ta klasa jest zdefiniowana w pliku UnknownImpl.h i obsługuje większość szczegółów tworzenia składnika COM. Oto przykład użycia tej klasy bazowej:
classDirectory :public UnknownImpl<IDirectory>
Ten kod definiuje klasę, która obsługuje interfejs IDirectory .
WizardComponent, klasa szablonu
Ta klasa jest zdefiniowana w pliku IWizardComponent.h i jest przydatną klasą podstawową do tworzenia składników wymagających dostępu do usług kreatora, takich jak tworzenie i rejestrowanie składników.
Oto przykład definiowania składnika CopyFilesTask :
classCopyFilesTask :public WizardComponent<ITask>
{
...
Parametrem dla tej klasy szablonu jest "główny" interfejs, którego chcesz użyć dla składnika, który w przypadku zadań to ITask. Użycie składnika WizardComponent oznacza, że składnik obsługuje zarówno interfejs udostępniany przez Użytkownika (ITask w tym przykładzie), jak i IWizardComponent.
Za każdym razem, gdy do utworzenia nowego składnika jest używany rejestr fabryki klas, rejestr wywołuje metodę IWizardComponent-SetContainer> składnika w celu zapewnienia dostępu składnika do usług kreatora.
WizardPageImpl, klasa szablonu
Użyj tej klasy jako klasy podstawowej dla stron niestandardowych — na przykład:
class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>
Parametr to identyfikator zasobu szablonu okna dialogowego.
Interfejsy strony kreatora
Kreator UDI używa interfejsów do uzyskiwania dostępu do różnych kontrolek na stronie. Na stronie można pobrać otokę kontrolki za pomocą funkcji GetControlWrapper . Oto przykład:
PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);
W tym miejscu PStaticText jest inteligentnym wskaźnikiem do interfejsu IStaticText . Inteligentne wskaźniki automatycznie wywołują metodę COM Release(), gdy wykraczają poza zakres lub przekazujesz adres zmiennej (takiej jak &pFormat) do metody.
Interfejs IADHelper
__interfaceIADHelper : IUnknown
{
HRESULT Init(ILogger *pLogger);
HRESULT ValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain);
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain);
};
HRESULT Init(ILogger *pLogger)
Zainicjuj ten składnik, przekazując go do rejestratora, aby mógł rejestrować informacje.
HRESULTValidLogon(LPCTSTR userName, LPCTSTR password, LPCTSTR domain)
Ta metoda sprawdza, czy zestaw poświadczeń jest prawidłowy, jak pokazano w tabeli 10.
Tabela 10. HResultValidLogon
HResult | Opis |
---|---|
S_OK | Poświadczenia są prawidłowe |
S_FALSE | Poświadczenia są nieprawidłowe |
E_FAIL | Nie można zlokalizować kontrolera domeny; sprawdź dzienniki, aby uzyskać szczegółowe informacje |
HRESULT HasAccess(LPCTSTR username, LPCTSTR password, LPCTSTR domain, LPCTSTR computerName, LPCTSTR accountDomain)
Ta metoda sprawdza, czy zestaw poświadczeń ma dostęp do odczytu/zapisu do obiektu komputera w usługach AD DS, jak pokazano w tabeli 11.
Tabela 11. HResult HasAccess
HRESULT | Opis |
---|---|
S_OK | Użytkownik ma dostęp |
E_FAIL | Użytkownik nie ma dostępu. Sprawdź plik dziennika, aby uzyskać dodatkowe informacje. |
IBackgroundTask, interfejs
__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);
};
Omówienie
Strona Postęp używa tej klasy do uruchamiania zadań w osobnym wątku. Tej klasy można również używać zawsze, gdy chcesz wykonywać operacje w osobnym wątku. Zadania to dowolna klasa, która obsługuje interfejs ITask .
Ten interfejs jest implementowany przez składnik ID_BackgroundTask ("Microsoft.Wizard.BackgroundTask") zdefiniowany w interfejsie IBackgroundTask.h.
HRESULT Init(ITask *pTask, int id, IBackgroundCallback *pCallback)
Ten interfejs inicjuje składnik, jak pokazano w tabeli 12.
Tabela 12. HRESULT Init
Parametr | Opis |
---|---|
pTask | Wskaźnik do klasy zawierającej kod, który chcesz uruchomić w innym wątku |
Id | Numer, którego można użyć w metodzie Zakończono wywołania zwrotnego , aby określić, które zadanie zostało zakończone; przydatne, jeśli uruchamiasz kilka zadań przy użyciu tej samej metody wywołania zwrotnego |
pCallback | Klasa, która implementuje metodę Finished , która jest wywoływana za każdym razem, gdy zadanie zakończy działanie; wywołanie metody Finished będzie znajdować się w wątku tła, a nie wątku interfejsu użytkownika |
void Start(void)
Ta metoda uruchamia zadanie w wątku w tle i zwraca elementy wyświetlane w tabeli 13.
Tabela 13. Zwracanie wątku tła
Zwraca | Opis |
---|---|
E_INVALIDARG | Zadanie jest już uruchomione, więc nie można go teraz uruchomić. |
E_FAIL | Wystąpił problem podczas uruchamiania wątku. |
S_OK | Wątek został uruchomiony. |
BOOL Running()
Ta metoda zwraca wartość TRUE, jeśli zadanie w tle jest obecnie uruchomione i false, jeśli nie jest uruchomione.
HRESULT Wait(DWORD waitMilliseconds)
Ta metoda czeka, aż wątek przestanie działać lub upłynie liczba milisekund.
HRESULT Terminate(DWORD exitCode)
Ta metoda zabija uruchomiony wątek (zobacz Tabelę 14 i Tabelę 15). Po zwróceniu tej metody ukończenie tego procesu może zająć krótki czas.
Tabela 14. HRESULT — kod zakończenia zakończenia
Parametr | Opis |
---|---|
exitCode | Kod zakończenia, który zostanie wysłany do metody Finished callback, który będzie również dostępny w metodzie GetExitCode . |
Tabela 15. Kody zakończenia
Zwraca | Opis |
---|---|
E_FAIL | Wywołanie zakończenia nie powiodło się. |
S_OK | Żądanie zakończenia wątku zakończyło się pomyślnie. |
HRESULT GetExitCode(LPDWORD pCode, HRESULT *pHresult)
Użyj tej metody, aby uzyskać wyniki uruchomienia zadania w wątku w tle (zobacz Tabela 16).
Tabela 16. Kody wyników
Parametr | Opis |
---|---|
pCode | Wskaźnik do dword , który zostanie ustawiony na return lub nullptr , jeśli nie potrzebujesz wartości zwracanej. Po zakończeniu ten parametr jest ustawiony na STILL_ACTIVE , jeśli wątek jest uruchomiony, kod zwrócony przez metodę Execute zadania lub wartość przekazana do metody Terminate , jeśli została wywołana ta metoda. |
pHresult | Wskaźnik do hresult , który zostanie ustawiony na return lub nullptr , jeśli nie potrzebujesz wartości HRESULT . |
HRESULT Close(void)
Ta metoda zwalnia wątek tła. Zwraca E_INVALIDARG , jeśli wątek jest obecnie uruchomiony i S_OK w przeciwnym razie.
ICheckBox, interfejs
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void Check (sprawdzanie BOOL)
Ustaw zaznaczony stan pola wyboru. Gdy metoda ma wartość TRUE, pole wyboru jest zaznaczone. gdy metoda ma wartość FALSE, pole wyboru jest wyczyszczone.
BOOL IsButtonChecked()
Ta metoda zgłasza bieżący stan wyboru pola wyboru.
IComboBox, interfejs
__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();
};
Omówienie
Ten interfejs jest implementowany przez składnik CheckBoxWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper z typem CONTROL_COMBO_BOX.
HRESULT Bind([in] IBindableList *pList)
Użyj tej metody, jeśli masz źródło danych implementujące interfejs IBindableList . Pole listy inicjuje zawartość z podpisami z tej listy.
HRESULT Select(indeks int)
Wybierz element w polu kombi w indeksie.
int Selected(void)
Ta metoda zwraca indeks wybranego elementu lub -1 , jeśli nic nie jest zaznaczone.
void Add([in] LPCTSTR podpis)
Ręcznie dodaj element do pola kombi.
HRESULT GetText([out, retval] LPBSTR pText)
Pobierz ciąg aktualnie wybranego elementu w polu kombi.
void Clear()
Usuń wszystkie elementy z pola kombi.
IControl, interfejs
__interface IControl : IUnknown
{
HRESULT SetEnable(BOOL enable);
BOOL IsEnabled(void);
HRESULT SetVisible(BOOL visible);
};
Omówienie
Ten interfejs jest implementowany przez składnik ControlWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper o typie CONTROL_GENERIC.
HRESULT SetEnable(bool enable)
Włącz lub wyłącz kontrolkę.
BOOL IsEnabled(void)
Zwraca wartość TRUE, jeśli kontrolka jest włączona, wartość FALSE, jeśli nie jest.
HRESULT SetVisible(bool visible)
Pokaż lub ukryj kontrolkę.
ICpuInfo, interfejs
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
Omówienie
Ten interfejs można uzyskać, tworząc nowy składnik ID_CpuInfo . Pojedyncza metoda zgłasza, czy procesor JEST 32 lub 64-bitowy. Należy pamiętać, że jeśli masz 32-bitowy system operacyjny na komputerze 64-bitowym, ta metoda zwraca wartość TRUE, ponieważ zgłasza tylko szerokość procesora CPU (a nie system operacyjny).
IDirectory, interfejs
__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);
};
Omówienie
Składnik katalogowy tworzony przy użyciu ID_Directory zapewnia fasadę do pracy z katalogami w systemie plików.
BOOL FileExists(nazwa LPCWSTR)
Ta metoda zwraca wartość TRUE, jeśli istnieje plik o podanej nazwie.
BOOL FindFirst([in] Nazwa LPCWSTR)
Ta metoda znajduje pierwsze dopasowanie do podanej nazwy. Obsługuje symbole wieloznaczne i zwraca zarówno nazwy plików, jak i katalogów. Metoda zwraca wartość TRUE, jeśli znaleziono dopasowanie, w przeciwnym razie wartość FALSE.
HRESULT FoundName([out, retval] LPBSTR name)
Ta metoda pobiera nazwę znalezionego pliku za pomocą wywołania polecenia FindFirst lub FindNext.
DWORD FoundAttributes(void)
Ta metoda zwraca atrybut najnowszego znalezionego pliku lub katalogu. Możesz użyć kodu w następujący sposób, aby sprawdzić, czy jest to katalog:
pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext(void)
Znajdź następny. Ta metoda zwraca wartość TRUE, jeśli znaleziono inne dopasowanie, w przeciwnym razie wartość FALSE.
void FinishFind(void)
Ta metoda zwalnia zasoby używane do operacji Znajdowanie.
IDomainJoinValidator, interfejs
__interface IDomainJoinValidator : IUnknown
{
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);
HRESULT IsUsernameValid(LPCWSTR domainName);
BOOL CanModifyComputerAdEntry(LPCWSTR domainName);
};
Omówienie
Wystąpienie tego interfejsu jest uzyskiwane przy użyciu wartości ID_DomainJoinValidator do funkcji szablonu CreateInstance .
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)
Inicjowanie wystąpienia, jak pokazano w tabeli 17.
Tabela 17. Inicjowanie HRESULT — inicjowanie wystąpienia
Parametr | Opis |
---|---|
pLogger | Wystąpienie rejestratora, które jest dostępne dla Twojej strony za pośrednictwem metody Rejestrator strony |
pContainer | Przekazuje wyniki z metody kontenera na stronie |
pUsername | Pole tekstowe zawierające nazwę użytkownika do zweryfikowania |
pPassword | Pole tekstowe zawierające hasło do zweryfikowania |
PComputerName | Pole tekstowe zawierające nazwę komputera, który zostanie ostatecznie przyłączony do domeny |
HRESULT IsUsernameValid(LPCWSTR domainName)
Ta metoda używa metody IADHelper-ValidLogon> do wykonania pracy. Aby uzyskać szczegółowe informacje, zobacz tę metodę.
BOOL CanModifyComputerAdEntry(LPCWSTR domainName)
Sprawdź, czy użytkownik ma uprawnienia do modyfikowania wpisu komputera. Większość pracy jest wykonywana przez IADHelper-HasAccess>. Jeśli ta metoda zwraca wartość FALSE, sprawdź plik dziennika, aby uzyskać szczegółowe informacje.
IDriveList, interfejs
__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)
Wywołaj tę metodę przed wywołaniem innych składników. Przed wywołaniem tej metody należy utworzyć nową metodę WmiRepository .
HRESULT SetWhereClause(LPCTSTR whereClause)
Ta metoda umożliwia dodanie tekstu, który będzie wyświetlany jako klauzula "where" w zapytaniu. Na przykład następująca linia zwraca tylko dyski USB:
pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(rozmiar __int64)
Ustaw minimalny rozmiar dysku w bajtach dla dysków, które zostaną zwrócone z zapytania.
HRESULT Update(void)
Wykonaj zapytanie. Lista dysków dostępna po wywołaniu tej metody jest sortowana według litery dysku.
HRESULT AddProperty(sekcja ENUM_DISK_QUERY_SECTION, LPCTSTR propName, LPCTSTR propNameReturned)
Ta metoda dodaje nazwy dodatkowych właściwości, które chcesz udostępnić w wynikach zapytania. Wywołaj tę metodę przed wywołaniem funkcji Update. W tabeli 18 przedstawiono trzy przydatne właściwości.
Tabela 18. HrESULT AddProperty: Przydatne właściwości
Sekcja | Własność | Opis |
---|---|---|
DISKQUERY_LOGICALDISK | Rozmiar | Rozmiar w bajtach reprezentowany jako ciąg |
DISKQUERY_DISKPARTITION | DiskIndex | Numer dysku jako liczba całkowita, począwszy od 0 |
DISKQUERY_LOGICALDISK | VolumeName | Etykieta woluminu |
size_t Count(void)
Liczba rekordów zwracanych przez zapytanie. Wywołaj polecenie Update przed wywołaniem tej metody.
HRESULT GetProperty(indeks size_t, LPCTSTR propName, wartość LPVARIANT)
Ta metoda pobiera wartość właściwości z wyników zapytania, jak pokazano w tabeli 19.
Tabela 19. HRESULT GetProperty
Parametr | Opis |
---|---|
Indeks | Indeks oparty na zerowej wartości do rekordu wyniku |
propName | Nazwa właściwości, na przykład "Size" |
Wartość | Po powrocie ten parametr zawiera wartość wariantu właściwości |
HRESULT GetCaption(indeks size_t, LPBSTR pCaption)
Ta metoda pobiera podpis dla rekordu, który jest taki sam jak właściwość Caption.
IImageList, interfejs
__interface IImageList
{
HRESULT CreateImageList(int width, int height, UINT flags);
HImageList GetImageList(void);
int AddImage(HInstance hInstance, int resourceId);
};
Omówienie
Ten interfejs jest implementowany przez składnik ImageList . Wystąpienie tego składnika jest pobierane z interfejsu IListView .
HRESULT CreateImageList(szerokość całkowita, wysokość całkowita, flagi UINT)
Utwórz nową listę obrazów, którą zarządza ten składnik. Wywołaj tę metodę tylko raz.
HImageList GetImageList(void)
Ta metoda zwraca dojście do listy obrazów na wypadek konieczności wykonania innych operacji na liście obrazów.
int AddImage(HInstance hInstance, int resourceId)
Dodaj nowy obraz do listy obrazów z zasobu, jak pokazano w tabeli 20.
Tabela 20. HRESULT IImageList, interfejs
Parametr | Opis |
---|---|
hInstance | Dojście wystąpienia modułu zawierającego zasób mapy bitowej |
resourceId | Identyfikator zasobu do załadowania na listę obrazów |
IListView, interfejs
__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);
};
Omówienie
Ten interfejs jest implementowany przez składnik ControlWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper z typem CONTROL_LIST_VIEW.
int AddItem([in] tekst LPCTSTR)
Dodaj nowy wiersz do pola listy. Metoda zwraca indeks właśnie dodanej pozycji.
int AddColumn(int width, [in] LPCTSTR text)
Dodaj nową kolumnę do widoku listy.
HRESULT SetSubItem(indeks int, kolumna int, [w] tekście LPCTSTR)
Ustaw tekst w kolumnie innej niż pierwsza kolumna pola listy, jak pokazano w tabeli 21.
Tabela 21. HRESULT SetSubItem
Parametr | Opis |
---|---|
indeks | Indeks elementu listy, który chcesz zmodyfikować |
kolumna | Indeks kolumny, którą chcesz zaktualizować; Pierwsza kolumna jest ustawiona przy użyciu polecenia AddItem, kolumny 2 i następujące są ustawiane za pomocą tej metody |
Tekst | Ciąg do pokazania w kolumnie |
int GetWidth(void)
Ta metoda zwraca szerokość całego pola tekstowego.
void SetExtendedStyle(styl DWORD)
Ta metoda umożliwia ustawianie stylów rozszerzonych w polu listy — na przykład:
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
Ta metoda zwraca indeks aktualnie wybranego elementu widoku listy.
HRESULT SelectItem(indeks int)
Ustaw wybrany element na liście na ten indeks.
BOOL IsItemChecked(indeks int)
Ta metoda zwraca wartość TRUE, jeśli wybrano element na liście. Ta metoda wymaga wywołania metody SetExtendedStyle w celu ustawienia stylu pola wyboru.
int GetItemCount(void)
Ta metoda zwraca liczbę elementów w widoku listy.
HRESULT CreateImageList(szerokość całkowita, wysokość całkowita, flagi UINT)
Utwórz nową listę obrazów i dołącz ją do widoku listy.
int AddImage(HINSTANCE hInstance, int resourceId)
Dodaj obraz do listy obrazów widoku listy. Najpierw należy wywołać funkcję CreateImageList.
HRESULT SetImage(indeks int, int imageIndex)
Ustaw obraz, który będzie wyświetlany po lewej stronie dla określonego elementu widoku listy.
HRESULT Clear(void)
Usuń wszystkie elementy z widoku listy.
IProgressBar, interfejs
__interface IProgressBar : IControl
{
HRESULT SetPercentage(int position);
int GetPercentage(void);
};
Omówienie
Ten interfejs jest implementowany przez składnik ProgressBarWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper o typie CONTROL_PROGRESS_BAR.
HRESULT SetPercentage(pozycja int)
Ustaw położenie paska postępu, używając liczby z zakresu od 0 do 100. Domyślnie nowe paski postępu Win32® mają maksymalny zakres 100.
int GetPercentage(void)
Ta metoda zwraca bieżącą pozycję paska postępu.
IRadioButton, interfejs
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
Omówienie
Ten interfejs jest implementowany przez składnik RadioButtonWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper o typie CONTROL_RADIO_BUTTON.
void SetGroup(int firstId, int lastId)
Podaj otokę z zakresem przycisków radiowych, które powinny być traktowane jako grupa. Wywołaj tę metodę przed wywołaniem funkcji CheckRadio.
void CheckRadio(identyfikator int)
Ustaw określony przycisk radiowy na pojedynczy przycisk w wybranej grupie przycisków radiowych. Wywołaj polecenie SetGroup przed wywołaniem tej metody.
BOOL IsButtonChecked(identyfikator int)
Ta metoda zwraca wartość TRUE, jeśli przycisk radiowy jest aktualnie zaznaczony, w przeciwnym razie wartość FALSE.
void EnableRadio(int id, BOOL enable)
Ta metoda włącza lub wyłącza przycisk radiowy.
IStaticText, interfejs
__interface IStaticText : IControl
{
HRESULT SetText([in] LPCTSTR pText);
HRESULT GetText([out, retval] LPBSTR pText);
};
Omówienie
Ten interfejs jest implementowany przez składnik StaticTextWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper o typie CONTROL_STATIC_TEXT.
HRESULT SetText([in] LPCTSTR pText)
Ustaw tekst kontrolki.
HRESULT GetText([out, retval] LPBSTR pText)
Ta metoda zwraca bieżącą wartość tekstu dla kontrolki.
ITask, interfejs
__interface IControl : IUnknown
{
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
HRESULT Execute(LPDWORD pReturnCode);
};
Zaimplementuj ten interfejs, jeśli chcesz, aby składnik był dostępny jako zadanie na stronie wstępnej lub jeśli chcesz użyć składnika BackgroundTask do wykonywania pracy nad wątkiem w tle.
Oto składniki implementujące interfejs 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)
Jeśli piszesz zadanie dla strony wstępnej, wywołaj tę metodę, aby zainicjować zadanie. Plik .config zawiera kod XML, który może wyglądać mniej więcej tak:
<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>
Parametr pProperties zapewnia dostęp do trzech wartości settera, natomiast parametr pTaskSettings zapewnia dostęp do elementu Task i elementów podrzędnych. Większość zadań musi odczytywać tylko dane z parametru pProperties .
Wykonywanie
HRESULT Execute(LPDWORD pReturnCode)
Tutaj piszesz kod, który wykonuje zadanie. Ta metoda powinna zwracać S_OK , jeśli nie wystąpiły błędy, i może zwrócić inny hresult , jeśli wystąpił błąd podczas wykonywania zadania. Wartości inne niż S_OK zwracane przez tę metodę są dopasowywane do <elementów Błąd> w <sekcji ExitCodes> , jeśli używasz strony wstępnej.
Parametr pReturnCode musi zostać zaktualizowany o liczbę, która zgłasza stan zadania. Te wartości są dopasowywane przez stronę preflights do <elementów ExitCode> .
ITreeView, interfejs
__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);
};
Omówienie
Ten interfejs jest implementowany przez składnik TreeViewWrapper . Wystąpienie tego składnika jest pobierane przy użyciu funkcji pomocnika GetControlWrapper o typie CONTROL_TREE_VIEW.
void EnableCheckboxes(void)
Ta metoda włącza pola wyboru w kontrolce widoku drzewa, ustawiając styl TVS_CHECKBOXES .
HRESULT CreateImageList(szerokość całkowita, wysokość całkowita, flagi UINT)
Dodaj nową listę obrazów do kontrolki widoku drzewa. Parametr flags jest przekazywany w wywołaniu do funkcji ImageList_Create Win32.
int AddImage(HINSTANCE hInstance, int resourceId)
Dodaj obraz do listy obrazów z zasobu (resourceId) w module z uchwytem wystąpienia hInstance.
HTREEITEM AddItem(Tekst LPCTSTR, HTREEITEM hParent = NULL)
Dodaj węzeł do widoku drzewa. Nowy węzeł zostanie dodany na najwyższym poziomie, jeśli hParent ma wartość NULL. W przeciwnym razie podaj dojście do elementu nadrzędnego, do którego ma zostać dodany nowy element. Ta metoda zwraca dojście do nowego elementu.
void SetImage(element HTREEITEM, obraz int, int expandImage)
Ustaw obraz do użycia dla elementu widoku drzewa. Można ustawić obraz normalny i rozwinięty.
void Clear(void)
Usuń wszystkie elementy z widoku drzewa.
BOOL SetFirstVisible(HTREEITEM item)
Upewnij się, że element widoku drzewa jest widoczny. Widok drzewa będzie przewijany, jeśli jest to wymagane, aby ten element był widoczny.
BOOL SelectItem(HTREEITEM item)
Ustaw aktualnie wybrany element na podany element. Następnie możesz wywołać polecenie SetFirstVisible , aby upewnić się, że nowo wybrany element jest widoczny.
void CheckItem(element HTREEITEM, UINT checkState)
Metoda zasadniczo ustawia obraz, który będzie wyświetlany dla pola wyboru w widoku drzewa. Te obrazy znajdują się w osobnej kontrolce ImageList zarządzanej przez widok drzewa. Domyślnie ta lista obrazów zawiera trzy obrazy wyświetlane w tabeli 22.
Tabela 22.void CheckItem Image List Default
checkState | Opis |
---|---|
0 | Pusty |
1 | Wyczyszczone |
2 | Wybrany |
HTREEITEM SelectedItem(void)
Ta metoda zwraca uchwyt aktualnie wybranego elementu widoku drzewa.
int SetItemHeight(KRÓTKA wysokość)
Ta metoda ustawia wysokość wszystkich elementów w kontrolce widoku drzewa w pikselach. Zwraca poprzednią wysokość w pikselach.
HRESULT EnableItem(HTREEITEM item, BOOL enable)
Ta metoda włącza lub wyłącza pojedynczy element w drzewie. Wyłączenie elementu z elementami podrzędnymi nie spowoduje wyłączenia elementów podrzędnych.
void Expand(HTREEITEM hItem, ROZWIŃ BOOL)
Ta metoda rozszerza lub zwija węzeł w drzewie.
HTREEITEM GetChild(HTREEITEM hParent)
Ta metoda zwraca pierwszy element podrzędny elementu widoku drzewa lub wartość NULL, jeśli nie ma elementów podrzędnych.
HTREEITEM GetParent(HTREEITEM hNode)
Ta metoda zwraca dojście elementu nadrzędnego dla węzła w widoku drzewa lub null, jeśli węzeł znajduje się na najwyższym poziomie.
HTREEITEM GetNextItem(HTREEITEM hPrevious)
Tę metodę można wywołać za pomocą uchwytu, który funkcja GetChild zwraca, aby iterować wszystkie elementy podrzędne węzła. Ta metoda zwraca następne elementy równorzędne w drzewie, które ma ten sam element nadrzędny.
UINT IsChecked(HTREEITEM item)
Ta metoda zwraca wartość 0 , jeśli węzeł widoku drzewa nie jest zaznaczony i 1 , jeśli jest.
BOOL IsEnabled(HTREEITEM item)
Ta metoda zwraca wartość TRUE, jeśli węzeł widoku drzewa jest włączony, w przeciwnym razie wartość FALSE.
INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)
Ta metoda służy tylko do użytku wewnętrznego.
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)
Wywołaj tę metodę, jeśli chcesz otrzymywać powiadomienia, gdy wybrany element zmieni się lub użytkownik zmieni stan sprawdzania elementu widoku drzewa. Aby odbierać te wywołania zwrotne, należy zaimplementować element ITreeViewEvent w składniku.
void SetSelectedBackColor (kolor COLORREF)
Ustaw kolor tła używany dla wybranego elementu.
IWmiIteration, interfejs
__interface IWmiIterator : IUnknown
{
HRESULT Next(void);
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Omówienie
Zwykle używasz tego interfejsu, wraz z IWmiRepository, podczas pracy z wywołaniami WMI. Interfejs IWmiIteration umożliwia iterację wartości zwracanych przez zapytanie.
HRESULT Next(void)
Przejdź do następnego elementu w wynikach zapytania, jak pokazano w tabeli 23.
Tabela 23. HrESULT Next(void) Zapytanie zwraca
HRRESULT | Opis |
---|---|
S_OK | Przeniesiono do następnego wyniku; Możesz użyć funkcji GetProperty , aby pobrać właściwości tego wyniku. |
S_FALSE | Na liście nie ma więcej elementów. |
E_NOT_SET | Brak wyników zapytania |
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue)
Ta metoda pobiera wartość właściwości z bieżącego rekordu wyników, jak pokazano w tabelach 24 i 25.
Tabela 24. HRESULT GetProperty
Parametr | Opis |
---|---|
propertyName | Nazwa właściwości, którą chcesz pobrać |
pValue | Wskazuje strukturę VARIANT, która po powrocie zawiera wartość właściwości |
Tabela 25. Hresult GetProperty — wynik
HRESULT | Opis |
---|---|
S_OK | Pobrano wartość właściwości. |
WBEM_E_NOT_FOUND | Nie ma właściwości o nazwie. |
E_NOT_VALID_STATE | Nie ma bieżącego rekordu. |
Uwaga
Metoda GetProperty może zwrócić inne kody błędów usługi WMI inne niż wymienione w tabeli 25. Wymienione wartości są typowymi wynikami, które są zwracane.
IWmiRepository, interfejs
__interface IWmiRepository : IUnknown
{
HRESULT SetNamespace(LPCWSTR namespaceName);
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Omówienie
Ten interfejs jest implementowany przez składnik WmiRepository (ID_WmiRepository).
HRESULT SetNamespace(LPCWSTR namespaceName)
Ta metoda ustawia przestrzeń nazw usługi WMI, która będzie używana dla zapytania. Wywołaj tę metodę przed wywołaniem zapytania ExecQuery. Jeśli nie wywołasz tej metody, przestrzeń nazw będzie mieć wartość root\cimv2. Ta metoda zawsze zwraca S_OK.
HRESULT ExecQuery(zapytanie LPCWSTR, [out] IWmiIterator **ppIterator)
Wykonaj zapytanie względem zestawu przestrzeni nazw usługi WMI za pomocą wywołania setNamespace, jak pokazano w tabelach 26 i 27.
Tabela 26. HRESULT ExecQuery
Parametr | Opis |
---|---|
Zapytanie | Ciąg zapytania WMI, które chcesz wykonać |
ppIterator | Przekaż wskaźnik do wskaźnika interfejsu, który po powrocie zostanie wypełniony interfejsem, zapewniając dostęp do wyników zapytania |
Tabela 27. Wynik zapytania HRESULT
HRESULT | Opis |
---|---|
S_OK | Zapytanie zakończyło się pomyślnie |
Inne | Jeśli zapytanie nie powiodło się, zwraca wartość HRESULT usługi WMI |
IFormController, interfejs
__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);
};
Omówienie
Każda strona w Kreatorze UDI ma własny kontroler formularzy, który implementuje ten interfejs. Ten kontroler służy do łączenia danych pola w pliku XML .config z kontrolkami na stronie. Następnie kontroler formularza obsługuje wiele szczegółów.
Konfigurowanie formularza
Ogólnie rzecz biorąc, skonfiguruj kontroler formularzy w metodzie OnWindowCreated na stronie. Zwykle wiąże się to z wywołaniem metod przedstawionych w tabeli 28.
Tabela 28. OnWindowCreated, metoda
Metoda | Opis |
---|---|
Init | Inicjuje kontroler formularzy |
AddField | Zapewnia połączenie między polem w pliku XML .config, który jest nazwą ciągu, a kontrolką w oknie dialogowym strony, która jest identyfikatorem |
AddRadioGroup | Służy do łączenia przycisku radiowego zarówno z grupą, jak i kontrolką w oknie dialogowym |
AddToGroup | Umożliwia włączenie lub wyłączenie kontrolek podrzędnych wraz z ich elementem nadrzędnym lub na podstawie wybranego przycisku radiowego |
Pola init | Wywoływanie po wywołaniu wszystkich metod Dodaj w celu skonfigurowania formularza |
Walidować | Wykonuje wstępną walidację |
Przetwarzanie zdarzeń formularza
Dodaj następujące wywołanie do metody OnControlEvent :
Form()->ControlEvent(eventId, controlId);
To wywołanie przekazuje zdarzenia do kontrolera formularza, aby można było przetwarzać zdarzenia związane z formularzami.
Zapisywanie danych formularza
W metodzie OnNextSelected wywołaj metody formularza pokazane w tabeli 29.
Tabela 29. OnNextSelected, metoda
Metoda | Opis |
---|---|
InitSection | Zawiera nazwę sekcji, która będzie wyświetlana na stronie Podsumowanie dla tej strony |
SaveFields | Zapisz wartości pól w zmiennych sekwencji zadań i na stronie Podsumowanie |
Init
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)
Zazwyczaj wywołujesz tę metodę w pobliżu początku metody OnWindowCreated strony. Polecenie powinno wyglądać mniej więcej tak:
Form()->Init(View(), Container());
SetPageInfo
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)
Ta metoda jest wywoływana wewnętrznie i nie należy nazywać jej samodzielnie. Udostępnia ona kod XML strony kontrolerowi formularzy.
Walidować
HRESULT Validate(void)
Ta metoda wykonuje wszystkie moduły sprawdzania poprawności dołączone do kontrolek. Jeśli moduł sprawdzania poprawności nie przejdzie, kontroler formularza wyświetla komunikat ostrzegawczy i wyłącza przycisk Dalej , a następnie zatrzymuje sprawdzanie poprawności przetwarzania. Zazwyczaj należy wywołać tę metodę tylko na końcu metody OnWindowCreated ; zawsze zwraca S_OK.
AddToGroup
AddToGroup(int groupControlId, int controlId)
Ta metoda dodaje kontrolkę jako "podrzędną" pola wyboru lub przycisku radiowego, jak pokazano w tabeli 30. Wszystkie takie kontrolki podrzędne zostaną wyłączone, gdy kontrolka nadrzędna nie zostanie wybrana. Metoda zawsze zwraca S_OK.
Tabela 30. AddToGroup
Parametr | Opis |
---|---|
groupControlId | Identyfikator pola wyboru lub przycisku radiowego, który będzie kontrolować stan włączania kontrolki podrzędnej |
Kontrolowane | Identyfikator kontrolki, którą chcesz dodać jako element podrzędny |
UpdateCheckGroup
HRESULT UpdateCheckGroup(int groupControlId)
Ta metoda aktualizuje stan włączania lub wyłączania kontrolek podrzędnych grupy na podstawie stanu kontrolki nadrzędnej. Ogólnie rzecz biorąc, nie trzeba wywoływać tej metody samodzielnie, ponieważ kontroler formularzy wywołuje ją za Ciebie.
AddValidator
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)
Wywołaj tę metodę tylko wtedy, gdy masz moduł sprawdzania poprawności, który chcesz utworzyć w kodzie, a nie w kodzie XML. Ta metoda zawsze zwraca S_OK.
AddValidator
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)
Wywołaj tę metodę tylko wtedy, gdy masz moduł sprawdzania poprawności, który chcesz utworzyć w kodzie, a nie w kodzie XML.
DisableValidation
HRESULT DisableValidation(int controlId, BOOL disable)
Wywołaj tę metodę, aby jawnie wyłączyć moduł sprawdzania poprawności dla kontrolki lub przywrócić normalną walidację, jak pokazano w tabeli 31. Ta metoda jest przydatna, na przykład gdy masz reguły włączania/wyłączania kontrolek, które nie są objęte weryfikacją formularza, i musisz wyłączyć walidację kontrolki. Innymi słowy, ta metoda nie jest zwykle wywoływana. Ta metoda zawsze zwraca S_OK.
Tabela 31. HRESULT DisableValidation
Parametr | Opis |
---|---|
controlId | Kontrolka, dla której chcesz włączyć lub wyłączyć walidację |
Wyłączać | Ustaw wartość TRUE, aby wyłączyć walidację i wartość FALSE, aby przywrócić normalną walidację |
AddField
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)
Dodaj mapowanie kontrolki między nazwą w elemencie Field pliku XML .config i identyfikatorem kontrolki w oknie dialogowym strony, jak pokazano w tabeli 32. Należy wywołać tę metodę przed wywołaniem polecenia InitFields, ponieważ usługa InitFields używa tych informacji. Ta metoda zawsze zwraca S_OK.
Tabela 32. HRESULT AddField
Parametr | Opis |
---|---|
Nazwa pola | Nazwa pola wyświetlana w kodzie XML strony |
controlId | Identyfikator kontrolki w szablonie okna dialogowego strony |
suppressLog | Ustaw wartość TRUE, jeśli nie chcesz, aby wartości z tego pola były zapisywane w pliku dziennika. zawsze ustaw ten parametr na wartość TRUE dla pól hasła lub numeru PIN |
Type | Typ kontrolki, który jest jednym z następujących: - CONTROL_STATIC_TEXT - CONTROL_COMBO_BOX - CONTROL_LIST_VIEW - CONTROL_PROGRESS_BAR - CONTROL_GENERIC - CONTROL_RADIO_BUTTON - CONTROL_CHECK_BOX - CONTROL_TREE_VIEW |
AddRadioGroup
HRESULT AddRadioGroup(LPCWSTR groupName, int radioControlId)
Ta metoda dodaje kontrolkę do nazwanej grupy przycisków radiowych, jak pokazano w tabeli 33. Należy wywołać tę metodę przed metodą InitFields , ponieważ ta metoda używa atrybutów w elemencie RadioGroup do kontrolowania ustawień wszystkich kontrolek przycisków radiowych w grupie. Grupy radiowe mogą być zablokowane, na przykład tak, aby wszystkie przyciski radiowe były wyłączone, ale kontrolki podrzędne są włączone lub wyłączone tylko na podstawie tego, który przycisk radiowy jest zaznaczony. Ta metoda zawsze zwraca S_OK.
Tabela 33. HRESULT AddRadioGroup
Parametr | Opis |
---|---|
nazwa grupy | Ciąg definiujący grupę przycisków radiowych na tej stronie |
radioControlId | Identyfikator pojedynczego przycisku radiowego do dodania do tej grupy |
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)
Ta metoda umożliwia włączenie lub wyłączenie całej grupy przycisków radiowych. Wyłączenie grupy radiowej powoduje wyłączenie wszystkich kontrolek przycisków radiowych w grupie, a także wszystkich elementów podrzędnych tych przycisków radiowych, które zostały dodane za pomocą polecenia AddToGroup. Zobacz Tabele 34 i Tabela 35.
Tabela 34. EnableRadioGroup
Parametr | Opis |
---|---|
nazwa grupy | Nazwa grupy przycisków radiowych zdefiniowanej już za pomocą wywołania polecenia AddRadioGroup |
Umożliwiać | Ustaw wartość TRUE, aby włączyć grupę przycisków radiowych i wartość FALSE, aby wyłączyć grupę |
Tabela 35. HRESULT EnableRadioGroup
HRESULT | Opis |
---|---|
S_OK | Grupa jest włączona lub wyłączona |
E_INVALIDARG | Nie ma grupy przycisków radiowych o podanej nazwie |
Pola init
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)
Przed wywołaniem tej metody wywołaj polecenie AddField dla każdego pola, które może kontrolować kod XML. Ta metoda zawsze zwraca S_OK.
Parametr pFieldCallback jest opcjonalny. W przypadku jego podania kontroler formularzy wywołuje funkcję SetFieldDefault dla kontrolek, które nie są CONTROL_STATIC_TEXT lub CONTROL_CHECK_BOX. To zachowanie umożliwia pobranie wartości domyślnej z pliku XML i samodzielne ustawienie jej w kontrolce.
SaveFields
HRESULT SaveFields(IFieldCallback *pFieldCallback = nullptr)
Ta metoda zapisuje wartości pól w zmiennych sekwencji zadań i w danych podsumowania, które będą wyświetlane na stronie Podsumowanie . Podanie wskaźnika w parametrze pFieldCallback umożliwia obsługę zapisywania wartości kontrolek, które nie obsługują CONTROL_STATIC_TEXT.
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
Ta metoda umożliwia określenie, czy pole zostało wyłączone w kodzie XML.
InitSection
HRESULT InitSection(LPCWSTR key, LPCWSTR sectionCaption)
Ta metoda inicjuje dane podsumowania, które będą wyświetlane na stronie Podsumowanie , jak pokazano w tabeli 36. Wywołaj tę metodę w metodzie OnNextSelected przed wywołaniem polecenia SaveFields. Ta metoda zawsze zwraca S_OK.
Tabela 36. HRESULT InitSection
Parametr | Opis |
---|---|
Klucz | Ten parametr powinien być unikatowy dla strony. Służy do zapewnienia, że każda strona ma własne informacje podsumowujące. |
sectionCaption | Nagłówek, który zostanie wyświetlony na stronie Podsumowanie informacji podsumowania tej strony. Zazwyczaj jako wartości tego parametru jest używana wartość DisplayName( ). |
AddSummaryItem
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)
Ta metoda umożliwia dodawanie elementów podsumowania do strony Podsumowanie powyżej i poza tymi elementami ustawionymi przy użyciu kodu XML. Zobacz Tabela 37.
Tabela 37. HRESULT AddSummaryItem
Parametr | Opis |
---|---|
Pierwszy | Podpis dla elementu podsumowania, który jest wyświetlany po lewej stronie |
Sekunda | Wartość wyświetlana po prawej stronie |
SuppressLogValue
HRESULT SuppressLogValue(LPCWSTR tsVariableName)
Wywołaj tę metodę dla zmiennych sekwencji zadań, dla których nie chcesz, aby wartości były zapisywane w pliku dziennika. Wywołaj tę metodę dla zmiennych sekwencji zadań, które przechowują hasła, numery PIN lub inne poufne wartości, które może wprowadzić użytkownik.
Zapisz tekst
HRESULT SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption)
Ta metoda zapisuje wartość kontrolki tekstu zarówno w zmiennej sekwencji zadań, jak i w sekcji podsumowania. Zazwyczaj nie trzeba wywoływać tej metody samodzielnie, ponieważ kontroler formularzy wykonuje to dla wszystkich pól. Zobacz Tabela 38.
Tabela 38. HRESULT SaveText
Parametr | Opis |
---|---|
controlId | Identyfikator pola tekstowego zawierającego wartość, którą chcesz zapisać (lub dowolną inną kontrolkę, która może zwracać tekst) |
tsVariableName | Nazwa zmiennej sekwencji zadań, którą chcesz zmodyfikować |
summaryCaption | Podpis na stronie Podsumowanie dla tej wartości |
LoadText
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)
Ta metoda odczytuje wartość zmiennej sekwencji zadań i ustawia pole tekstowe na tę wartość.
ControlEvent
void ControlEvent(WORD eventId, WORD controlId)
Wywołaj tę metodę w metodzie OnControlEvent , aby upewnić się, że kontroler formularzy może przetwarzać zdarzenia sterowania, co należy zrobić, aby działało poprawnie. Wartości przekazywane do tej metody są tymi samymi wartościami przekazanymi do metody OnControlEvent .
IsValid
BOOL IsValid(void)
Ta metoda zwraca stan najnowszej weryfikacji formularza. Jeśli którykolwiek z modułów sprawdzania poprawności kontroli zgłosił błąd, ta metoda zwraca wartość FALSE. Innymi słowy zwraca wartość TRUE tylko wtedy, gdy wszystkie kontrolki na stronie są prawidłowe.
IValidator, interfejs
__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);
};
Omówienie
Moduły sprawdzania poprawności to składniki, które mogą weryfikować pojedynczą kontrolkę na stronie. Najprostszym sposobem zaimplementowania modułu sprawdzania poprawności jest uczynienie go podklasą klasy BaseValidator , która jest zdefiniowana w pliku nagłówkowym BaseValidator.h.
HRESULT Init(IControl *pControl, komunikat LPCTSTR)
Jeśli utworzysz moduł sprawdzania poprawności w kodzie, możesz wywołać tę metodę, aby zainicjować moduł sprawdzania poprawności. Zobacz Tabela 39.
Tabela 39. HRESULT Init
Parametr | Opis |
---|---|
pControl | Kontrolka, którą musi zweryfikować moduł sprawdzania poprawności |
Komunikat | Komunikat wyświetlany na stronie, jeśli kontrolka jest nieprawidłowa |
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties)
Kontroler formularzy wywołuje tę metodę, aby zainicjować moduły sprawdzania poprawności tworzone na podstawie kodu XML strony. Zobacz Tabela 40.
Tabela 40. HRESULT Init, metoda
Parametr | Opis |
---|---|
pControl | Kontrolka, którą musi zweryfikować moduł sprawdzania poprawności |
pContainer | W przypadku, gdy moduł weryfikatora wymaga dostępu do rejestratora lub musi utworzyć inne składniki |
pWłaściwości | Zapewnia dostęp do właściwości (elementów setter) dla modułu walidatora |
BOOL, IsValid(LPBSTR pMessage)
Ta metoda zwraca wartość TRUE, jeśli kontrolka jest prawidłowa, lub FALSE, jeśli kontrolka jest nieprawidłowa. Po powrocie plik pMessage powinien zostać wypełniony nowym ciągiem BSTR zawierającym komunikat do wyświetlenia, gdy kontrolka jest nieprawidłowa.
HRESULT SetProperty(int propertyId, LPVARIANT pValue)
Tę metodę można zaimplementować, jeśli potrzebujesz dodatkowych wartości, które nie są podane w kodzie XML.
HRESULT SetProperty(int propertyId, IUnknown *pUnknown)
Tę metodę można zaimplementować, jeśli potrzebujesz dodatkowych wartości, które nie są podane w kodzie XML.
HRESULT SetProperty)(int propertyId, LPCTSTR pValue)
Tę metodę można zaimplementować, jeśli potrzebujesz dodatkowych wartości, które nie są podane w kodzie XML.
IRegEx, interfejs
__interface IRegEx : IUnknown
{
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex);
HRESULT GetMatch(size_t index, LPBSTR pValue);
};
Ta metoda jest implementowana przez składnik ID_Regex (IRegex.h) i zapewnia obsługę przetwarzania wyrażeń regularnych.
BOOL MatchesRegex(LPCTSTR input, LPCTSTR regex)
Ta metoda uruchamia wyrażenie regularne względem tekstu wejściowego. Używa funkcji regex_match biblioteki standardowej języka C++, aby wykonać rzeczywistą pracę. Metoda zwraca wartość TRUE, jeśli były dopasowania, w przeciwnym razie wartość FALSE.
HRESULT GetMatch(indeks size_t, LPBSTR pValue)
Ta metoda umożliwia pobranie dopasowań z ostatniego wywołania MatchesRegex . Należy pamiętać, że nie ma przetwarzania błędów w tej metodzie i zwraca S_OK lub zgłasza wyjątek.
ISummaryInfo, interfejs
__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);
};
Nie należy używać tego interfejsu bezpośrednio. Zamiast tego użyj kontrolki IFormController.
ISummaryBag
__interface ISummaryBag : IUnknown
{
size_t Count(void);
HRESULT GetInfoByIndex(size_t index, [out] ISummaryInfo **ppSummary);
HRESULT GetInfoByKey(LPCTSTR key, [out] ISummaryInfo **ppSummary);
};
Nie należy używać tego interfejsu bezpośrednio. Zamiast tego użyj kontrolki IFormController.
ITSVariableBag, interfejs
__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);
};
Ten interfejs zapewnia dostęp do zmiennych sekwencji zadań. Dostęp do tego interfejsu można uzyskać za pomocą metody TSVariables() strony.
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)
Ta metoda odczytuje wartość zmiennej sekwencji zadań.
Uwaga
Wartości są buforowane po pierwszym odczytaniu.
void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue)
Ta metoda ustawia wartość zmiennej sekwencji zadań. Ta wartość jest zapisywana w pamięci. Wartości sekwencji zadań są zapisywane po wybraniu pozycji Zakończ w Kreatorze UDI.
void Clear(void)
Ta metoda usuwa wszystkie wartości sekwencji zadań, które zostały zapisane w pamięci.
HRESULT Remove([in] LPCTSTR variableName)
Ta metoda usuwa określoną wartość sekwencji zadań z pamięci. Przy następnym wywołaniu polecenia GetValue o tej samej nazwie sekwencji zadań metoda próbuje pobrać ją z sekwencji zadań.
HRESULT SuppressLogValue([in] LPCTSTR variableName)
Za każdym razem, gdy są zapisywane zmienne sekwencji zadań, na przykład po wybraniu pozycji Zakończ w Kreatorze UDI, nazwy i wartości są zapisywane w pliku dziennika. Wywołaj tę metodę, aby pominąć rejestrowanie poufnych wartości, takich jak hasła lub numery PIN, dla określonej zmiennej sekwencji zadań.
void Save(void)
Ta metoda zapisuje wszystkie wartości sekwencji zadań, które zostały ustawione przy użyciu wywołań wartości SetValue.
ITSVariableRepository, interfejs
__interface ITSVariableRepository : IUnknown
{
void GetValue([in] LPCTSTR variableName, BOOL logValue, [out] LPBSTR pValue);
void SetValue([in] LPCTSTR variableName, BOOL logValue, [in] LPCTSTR value);
};
Ten interfejs jest używany wewnętrznie przez TSVariableBag do odczytywania i zapisywania zmiennych sekwencji zadań.
IWizardFinish, interfejs
__interface IWizardFinish : IUnknown
{
HRESULT Canceled(void);
HRESULT Finished(void);
};
Ten interfejs jest przydatny w zaawansowanych scenariuszach, w których chcesz wykonać dodatkowe przetwarzanie po wybraniu opcji Zakończ lub Anuluj w Kreatorze UDI. Kreator UDI zawiera zadanie Zakończ , które zapisuje zmienne sekwencji zadań po wybraniu pozycji Zakończ. Jeśli anulujesz kreatora, zadanie ustawia zmienną sekwencji zadań OSDSetupWizCancelled na wartość TRUE i nie zapisuje zmian w żadnych innych zmiennych sekwencji zadań.
Jeśli utworzysz własny składnik zakończenia, musisz zarejestrować go przy użyciu następującego kodu:
Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);
PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);
PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);
pService->Register(pFinish);
IBindableList, interfejs
__interface IBindableList : IUnknown
{
size_t Count(void);
HRESULT GetCaption(size_t index, LPBSTR pCaption);
};
Zaimplementuj ten interfejs, jeśli masz składnik źródła danych, który chcesz powiązać z polem kombi, wywołując jego metodę Bind .
size_t Count(void)
Ta metoda zwraca liczbę elementów na liście.
HRESULT GetCaption(indeks size_t, LPBSTR pCaption)
Ta metoda zwraca podpis elementu w określonym indeksie.
IDataNodes, interfejs
__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);
};
Ten interfejs zapewnia dostęp do danych hierarchicznych, które można zapisać na stronie. Ten interfejs można uzyskać za pośrednictwem metod w interfejsie ISettingsProperties , który jest dostępny dla twojej strony za pośrednictwem metody Ustawienia .
Dane w kodzie XML strony mogą wyglądać mniej więcej tak
<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>
Wywołanie polecenia Settings()->GetDataNode(L"Network", &pData) zapewnia wystąpienie IDataNodes z dwoma elementami danych (z których każdy z kolei ma dwie właściwości).
size_t Count()
Ta metoda zwraca liczbę elementów DataItem .
HRESULT SetCaptionProperty(LPCTSTR captionProperty)
Składnik, który obsługuje ten interfejs, obsługuje również funkcję IBindableList, co ułatwia wypełnienie pola kombi danymi z pliku XML strony. Ta metoda kontroluje, która właściwość (setter) w każdym elemencie DataItem będzie używana dla tego powiązania. Można na przykład wywołać tę metodę za pomocą właściwości DisplayName i użyć tej właściwości setter do powiązania danych. Pole kombi będzie zawierać elementy Public i Dev Team .
HRESULT GetProperty(indeks size_t, LPCTSTR propertyName, [out] LPBSTR propertyValue)
Ta metoda pobiera właściwość z jednego z elementów DataItem . Zobacz Tabele 41 i Tabela 42.
Tabela 41. DataItem GetProperty
Parametr | Opis |
---|---|
Indeks | Wartość indeksu (zaczynając od 0) elementu DataItem , dla której chcesz pobrać wartość właściwości |
propertyName | Nazwa właściwości setter, dla której chcesz pobrać wartość |
propertyValue | Po powrocie zawiera wartość ciągu właściwości |
Tabela 42. HRESULT GetProperty
HRESULT | Opis |
---|---|
S_OK | Właściwość została pobrana. |
E_INVALIDARG | Indeks znajduje się poza końcem tablicy. |
HRESULT GetNode(indeks size_t, [out] ISettingsProperties **ppNode)
Ta metoda jest podobna do metody GetProperty, ale zamiast zwracać jedną wartość z elementu DataItem, zwraca cały element DataItem opakowany w interfejs ISettingsProperties . Zobacz Tabele 43 i Tabela 44.
Tabela 43. HRESULT GetNode
Parametr | Opis |
---|---|
Indeks | Wartość indeksu (zaczynając od 0) elementu DataItem , dla której chcesz pobrać wartość właściwości |
węzeł ppNode | Po zakończeniu interfejs ISettingsProperties, który otacza węzeł DataItem |
Tabela 44. Hresult GetNode — wyniki
HRESULT | Opis |
---|---|
S_OK | Węzeł został pobrany. |
E_INVALIDARG | Indeks znajduje się poza końcem tablicy. |
IFactoryRegistry, interfejs
__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);
};
Omówienie
Podczas tworzenia nowej strony niestandardowej należy co najmniej utworzyć fabrykę stron — klasę, która implementuje klasę IClassFactory. (Można użyć klasy ClassFactoryImpl jako klasy podstawowej dla fabryki).
void Register(typ LPCTSTR, IClassFactory *pFactory)
Ta metoda rejestruje fabrykę klas w rejestrze. Zobacz Tabela 45.
Tabela 45. IClassFactory void Register
Parametr | Opis |
---|---|
Typ | Ciąg identyfikujący zarejestrowaną fabrykę; ogólnie rzecz biorąc, ten parametr powinien mieć nazwę firmy w ciągu, aby upewnić się, że jest unikatowy |
pFactory | Wskaźnik do wystąpienia fabryki klas |
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)
Ta metoda służy tylko do użytku wewnętrznego.
BOOL Contains(typ LPCTSTR)
Ta metoda jest zazwyczaj do użytku wewnętrznego. Sprawdza, czy fabryka klas została zarejestrowana dla typu.
HRESULT GetFactory(typ LPCTSTR, IClassFactory **ppFactory)
Ta metoda umożliwia pobranie fabryki klas. Zazwyczaj należy wywołać metodę CreateInstance. Jeśli jednak zamierzasz utworzyć dużą liczbę tego samego składnika, bardziej wydajne jest pobranie fabryki, a następnie poproszenie jej o utworzenie wystąpień.
HRESULT CreateInstance(typ LPCTSTR, IUnknown **ppInstance)
Ta metoda tworzy nowe wystąpienie składnika, biorąc pod uwagę jego typ. Zamiast tego użyj metody szablonu CreateInstance , która umożliwia tworzenie obiektu bezpiecznego dla typu.
HRESULT SetContainer(IWizardPageContainer *pContainer)
Ta metoda służy tylko do użytku wewnętrznego.
HRESULT RegisterService(REFGUID iid, IUnknown *pService)
Usługi to pojedyncze wystąpienia składnika, którego można używać w wielu miejscach. Ta metoda umożliwia zarejestrowanie usługi na jednej stronie, a następnie pobranie tego samego wystąpienia z innej strony.
HRESULT GetService(REFGUID iid, IUnknown **ppService)
Ta metoda pobiera usługę, która została wcześniej zarejestrowana przy użyciu wywołania metody RegisterService.
HRESULT SetLanguage(LANGID languageId)
Ta metoda ustawia język Kreatora UDI na identyfikator języka podany w parametrze languageId .
LANGID GetLanguage()
Ta metoda zwraca wartość identyfikatora języka dostarczonego z / locale parametr wiersza polecenia kreatora UDI. Metoda zwraca jedną z następujących wartości:
Wartość identyfikatora języka dostarczonego z / locale parametr wiersza polecenia
0, jeśli nie podano /locale parametr wiersza polecenia
ILogger, interfejs
__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);
};
Omówienie
Kreator UDI rejestruje informacje w pliku dziennika, co ułatwia rozwiązywanie problemów znalezionych w tym polu. Dobrym pomysłem jest rejestrowanie informacji na stronach. Wskaźnik do tego interfejsu można uzyskać z poziomu strony przy użyciu metody Logger(). Wiersze w pliku dziennika zawierają numer "level", który reprezentuje komunikaty o błędach, normalnych, pełnych lub debugowania.
Uwaga
Komunikaty debugowania nie są zapisywane w pliku dziennika, chyba że obsługa debugowania jest włączona. Obsługę debugowania można włączyć, dodając następujący wiersz do elementu Style w pliku .config:
<Setter Property="debug">true</Setter>
Init
HRESULT Init(LPCWSTR logFilename)
Ta metoda służy tylko do użytku wewnętrznego.
MoveLog
HRESULT MoveLog(LPCWSTR logFilename)
Ta metoda służy tylko do użytku wewnętrznego.
Baza danych LogBase
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)
Ta metoda służy tylko do użytku wewnętrznego.
Dziennik
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)
Ta metoda służy tylko do użytku wewnętrznego.
Error
HRESULT Error(HRESULT error, LPCTSTR component, LPCTSTR message)
Wywołaj tę metodę, aby zarejestrować informacje o błędzie. Zobacz Tabela 46.
Tabela 46. Błąd HRESULT
Parametr | Opis |
---|---|
Błąd | Kod błędu zwrócony przez wywołanie (Ten kod będzie wyświetlany we wpisie dziennika jako numer). |
Składnik | Ciąg identyfikujący źródło błędu, który jest zwykle twoją stroną lub zapisanym składnikiem |
Komunikat | Komunikat wyjaśniający przyczynę błędu |
Błąd 2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda jest podobna do metody Error , ale umożliwia podanie dwuczęściowego komunikatu. Ostatni komunikat będzie zawierać komunikat "message", a następnie "message2" w pliku wyjściowym. Jest to po prostu metoda wygody.
Normalny
HRESULT Normal(LPCTSTR component, LPCTSTR message)
Ta metoda rejestruje normalny komunikat. Zobacz opis metody Error dla parametrów.
Normalny2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda rejestruje normalny komunikat. Zobacz opis metody Error2 dla parametrów.
Gadatliwy
HRESULT Verbose(LPCTSTR component, LPCTSTR message)
Ta metoda rejestruje pełny komunikat. Zobacz opis metody Error dla parametrów.
Pełne2
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda rejestruje pełny komunikat. Zobacz opis metody Error2 dla parametrów.
Debugować
HRESULT Debug(LPCWSTR component, LPCWSTR message)
Ta metoda rejestruje komunikat debugowania. Zobacz opis metody Error dla parametrów. Komunikaty debugowania nie są zapisywane w pliku, chyba że są włączone. Aby uzyskać szczegółowe informacje, zobacz sekcję Przegląd.
EnableDebug
HRESULT EnableDebug(BOOL debug)
Ta metoda służy tylko do użytku wewnętrznego.
Zamykać
HRESULT Close(void)
Ta metoda służy tylko do użytku wewnętrznego.
GetLogFilename
HRESULT GetLogFilename(LPBSTR pFilename)
Ta metoda pobiera nazwę pliku dziennika.
Interfejs IOrientation
__interface IOrientation : IUnknown
{
void SetController(IWizardDialogController *pController);
int AddPage(LPCTSTR name);
void SelectPage(int index);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
Interfejs ISettings
__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);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
ISettingsProperties, interfejs
__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);
};
Omówienie
Ten interfejs zapewnia dostęp do danych stron. Aby przejść do najwyższego poziomu danych strony, użyj metody Settings().
HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)
Ta metoda umożliwia pobranie wartości atrybutów w węźle głównym, który jest węzłem strony , gdy używasz metody Settings() strony.
IStringProperties * Properties()
Ta metoda zapewnia dostęp do wartości właściwości setter w węźle głównym. W przypadku strony są to właściwości najwyższego poziomu.
HRESULT SelectNodes(LPCTSTR xPath, IXMLDOMNodeList **ppList)
Wywołaj tę metodę, jeśli chcesz bezpośrednio uzyskać listę węzłów XML przy użyciu wyrażenia XPath. Lepiej jest użyć jednej z innych metod, jeśli to możliwe. Użyj tej metody tylko wtedy, gdy nie możesz uzyskać dostępu do węzłów w inny sposób.
HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)
Wywołaj tę metodę, jeśli chcesz bezpośrednio uzyskać pojedynczy węzeł XML przy użyciu wyrażenia XPath. Lepiej jest użyć jednej z innych metod, jeśli to możliwe. Użyj tej metody tylko wtedy, gdy nie możesz przejść do węzła w inny sposób.
HRESULT GetDataNode(nazwa LPCTSTR, ISettingsProperties **ppNode)
Pobierz element Data na podstawie atrybutu Name tego elementu.
HRESULT GetDataNodes(IDataNodes **ppNodes)
Ta metoda pobiera listę elementów DataItem w bieżącym węźle. Na poziomie strony wywołaj polecenie GetDataNode , aby pobrać interfejs ISettingsProperty dla danych. Następnie w tym wystąpieniu wywołaj polecenie GetDataNodes , aby pobrać listę rekordów. Na przykład, biorąc pod uwagę następujący kod 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)
Ta metoda zapewnia szybki sposób uzyskiwania dostępu do zestawu węzłów DataItem w określonym węźle Danych . Korzystając z kodu XML z przykładu GetDataNodes , następujący kod wykonuje dokładnie to samo, co cztery wiersze kodu w przykładzie w obszarze GetDataNodes , ale z sprawdzaniem błędów:
ISimpleStringProperties Interface
ISimpleStringProperties, interfejs
__interface ISimpleStringProperties : IStringProperties
{
void Add(LPCTSTR propertyName, LPCTSTR value);
};
Sam ten interfejs może nie być przydatny. Jest on jednak implementowany przez składnik ID_SimpleStringProperties , który implementuje również interfejs IStringProperties . Tego składnika można używać w przypadkach, gdy należy przekazać zestaw właściwości do innego składnika, takiego jak zadanie, ale chcesz programowo dodawać wartości zamiast używać wartości z kodu XML. Oto przykład użycia tego interfejsu:
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);
};
Ten interfejs zapewnia prosty dostęp do zestawu elementów setter, które pochodzą z kodu XML. Ten interfejs jest dostępny dla właściwości strony przy użyciu polecenia Settings()->Properties().
HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)
Ta metoda pobiera wartość pojedynczej właściwości. Zobacz Tabele 47 i Table 48.
Tabela 47. IHRESULT Pobierz wartość właściwości
Parametr | Opis |
---|---|
propertyName | Nazwa właściwości, którą chcesz odczytać |
pPropValue | Po zakończeniu zawiera wartość właściwości jako ciąg (ta wartość będzie mieć wartość nullptr , jeśli nie ma takiej właściwości). |
Tabela 48. IHRESULT — uzyskiwanie wyników wartości właściwości
HRESULT | Opis |
---|---|
S_OK | Pobierana jest wartość właściwości. |
E_INVALIDARG | Nie ma właściwości o podanej nazwie. |
ITaskManager, interfejs
__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);
}
Ten interfejs jest implementowany przez składnik TaskManager (ID_TaskManager w pliku ITaskManager.h), który jest składnikiem uruchamiającym zadania na stronie wstępnej. Możesz użyć strony wstępnej bezpośrednio, czyli tego, co robisz przez większość czasu, lub utworzyć własną stronę, umożliwiając temu składnikowi wykonanie większości pracy.
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)
Należy wywołać tę metodę przed wywołaniem innej metody. Inicjuje składnik TaskManager . Zobacz Tabela 49.
Tabela 49. HRESULT Init
Parametr | Opis |
---|---|
pPageView | Zapewnia dostęp do strony, na której będą uruchamiane zadania (ta strona musi mieć określony zestaw kontrolek, które zostały opisane w kilku następnych parametrach). |
idListView | Identyfikator kontrolki ListView , który wyświetli listę zadań i stan tych zadań |
idMessage | Identyfikator kontrolki pola tekstowego, które będzie używane do wyświetlania komunikatu dla wybranego zadania |
idRetryButton | Identyfikator kontrolki przycisku, który można wybrać, aby ponownie uruchomić zadania |
pPageInfo | Otoka wokół kodu XML strony (TaskManager ładuje zestaw zadań do uruchomienia z tego kodu XML). |
pCallback | Może mieć wartość null (jeśli ten parametr nie ma wartości null, taskManager wywołuje metodę Started podczas uruchamiania zadania i metodę Finished dla każdego zadania, które kończy działanie). |
HRESULT SetFailMessage(komunikat LPCWSTR)
Ta metoda ustawia komunikat, który będzie wyświetlany, jeśli co najmniej jedno zadanie zakończy się niepowodzeniem.
HRESULT Start(void)
Ta metoda uruchamia wszystkie zadania. Każde zadanie jest uruchamiane w osobnym wątku.
HRESULT GetTaskMessage(indeks size_t, komunikat LPBSTR)
Ta metoda służy tylko do użytku wewnętrznego. Pobiera bieżący komunikat zadania na podstawie indeksu na liście zadań.
HRESULT GetResultType)(indeks size_t, typ LPBSTR)
Ta metoda pobiera bieżący "typ" zadania. Tabela 50 przedstawia dostępne typy.
Tabela 50. HRESULT GetResultType
Type | Opis |
---|---|
0 | Reprezentuje zadanie, które zakończyło się pomyślnie |
1 | Reprezentuje zadania, które zwróciły ostrzeżenie |
-1 | Reprezentuje zadanie zakończone niepowodzeniem |
Typ jest pobierany przez przyjrzenie się kodowi zakończenia lub błędu zadania i znalezieniu dopasowania w elemencie XML ExitCodes> zadania<.
HRESULT GetProperty(indeks size_t, LPCTSTR propertyName, wartość LPBSTR)
Ta metoda jest używana przez strony postępu i wstępnego w celu pobrania właściwości Setter BitmapFilename , dzięki czemu może ona wyświetlać obraz obok komunikatu dla wyróżnionego zadania. Innymi słowy, możesz dodać niestandardowego settera do kodu XML zadania, a następnie pobrać go za pomocą tej metody.
int GetSelectedIndex(void)
Ta metoda pobiera indeks aktualnie wybranego zadania, co jest przydatne, jeśli chcesz pobrać dodatkowe informacje o zadaniu (zobacz GetProperty ), aby wyświetlić dla wybranego zadania. Strony postępu i wstępnych używają tej metody do wyświetlania obrazu dla wybranego zadania.
HRESULT Wait(DWORD waitMilliseconds)
Ta metoda pomaga głównie w testach jednostkowych, dzięki czemu test może zapewnić zakończenie zadań przed zakończeniem testu jednostkowego. Ta metoda nie jest zwykle wywoływana. Zwraca wartość po zakończeniu wszystkich zadań lub upłyniętej godzinie oczekiwania.
size_t FailedCount(void)
Ta metoda zwraca liczbę zadań obecnie oznaczonych jako zakończone niepowodzeniem.
size_t WarningCount(void)
Ta metoda zwraca liczbę zadań aktualnie oznaczonych jako ostrzeżenie.
size_t SucceedCount(void)
Ta metoda zwraca liczbę zadań aktualnie oznaczonych jako zakończone powodzeniem.
size_t RunningCount(void)
Ta metoda zwraca liczbę aktualnie uruchomionych zadań.
void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)
Wywołaj tę metodę z elementu OnCommonControlEvent na stronie, aby menedżer taskmanager mógł przetwarzać wymagane zdarzenia.
void OnControlEvent(WORD eventId, WORD controlId)
Wywołaj tę metodę z elementu OnControlEvent strony, aby menedżer taskmanager mógł przetwarzać wymagane zdarzenia.
void EnableButtons(BOOL enable)
Ta metoda służy tylko do użytku wewnętrznego.
IWizardComponent, interfejs
__interface IWizardComponent : IUnknown
{
HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Omówienie
Zazwyczaj nie zaimplementujesz tego interfejsu bezpośrednio, ale zamiast tego za pośrednictwem klasy WizardComponent template. Jeśli składnik implementuje ten interfejs i zarejestrowano fabrykę klas w rejestrze, składnik otrzymuje wskaźnik do wystąpienia IWizardPageContainer podczas jego tworzenia. Pomaga to na przykład uzyskać dostęp do rejestratora lub rejestru w celu utworzenia innych składników, których składnik może potrzebować.
IWizardDialogController, interfejs
__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);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
IWizardDialogView, interfejs
__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);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
IWizardPage, interfejs
__interface IWizardPage : IUnknown
{
HRESULT SetPageSettings(ISettingsProperties *pPageSettings);
HINSTANCE GetInstanceHandle(void);
int GetDialogResourceId(void);
void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);
void WindowShown(void);
void WindowHidden(void);
HRESULT NextSelected(void);
void ControlEvent(WORD eventId, WORD controlId);
void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);
void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
};
Omówienie
Ten interfejs jest implementowany przez kreatoraPageImpl, więc zazwyczaj nie trzeba implementować go samodzielnie. Kreator wywołuje wszystkie te metody w przypadku interakcji ze stronami niestandardowymi.
IWizardPageContainer, interfejs
__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);
};
Omówienie
Ten interfejs jest dostępny na stronie za pośrednictwem metody Kontener (zaimplementowana przez WizardPageImpl) i zapewnia dostęp do różnych usług kreatora.
ILogger * Logger(void)
Ta metoda służy do zapisywania komunikatów w pliku dziennika — na przykład:
Logger()->Verbose(s_component, L"Message for log file");
IPropertyBag * Properties(void)
Ta metoda zapewnia dostęp do zmiennych "pamięci", które są właściwościami znajdującymi się w pamięci tylko podczas działania Kreatora UDI. Te właściwości są dostępne dla innych stron w kodzie lub w formacie XML przy użyciu składni $memoryVarName$ .
HRESULT CreateInstance(typ LPCTSTR, [out] IUnknown **ppInstance)
Ta metoda umożliwia utworzenie nowego wystąpienia dowolnego zarejestrowanego składnika. Jednak lepiej jest użyć funkcji szablonu CreateInstance, ponieważ jest silnie wpisana.
HRESULT GetService(IDENTYFIKATOR REFIID, [out] IUnknown **ppInstance)
Ta metoda umożliwia pobranie zarejestrowanej usługi. Jednak lepiej jest wywołać funkcję szablonu GetService , która jest silnie typizowana (zamiast używać funkcji IUnknown).
HRESULT ReplaceVariables(źródło LPCTSTR, [out] LPBSTR pDest)
Ta metoda obsługuje pracę ze zmiennymi wewnątrz wartości ciągu. Obsługuje ona formaty wyświetlane w tabelach 51 i 52.
Tabela 51. HRESULT ReplaceVariables
Formatowanie | Opis |
---|---|
$Name$ | Zastępuje wartość zmiennej pamięci tą nazwą (jeśli nie ma zmiennej pamięci o nazwie, "token" zostanie usunięty). |
%Name% | Zmienna sekwencji zadań lub zmienna środowiskowa. Kolejność jest następująca: 1. Użyj wartości zmiennej sekwencji zadań, jeśli jest obecna. 2. Użyj wartości zmiennej środowiskowej, jeśli jest obecna. 3. W przeciwnym razie usuń ten tekst z ciągu. |
Tabela 52. HRESULT, parametr
Parametr | Opis |
---|---|
Źródło | Ciąg wejściowy, który może zawierać dowolną kombinację zmiennych $ i % lub w ogóle brak |
pDest | Po powrocie zawiera nowy ciąg, który ma wszystkie tokeny zastąpione zgodnie z tabelą 51 |
HRESULT GotoPage(LPCTSTR pageName)
Ta metoda nie została w pełni przetestowana. Chodzi o to, że można przełączyć się bezpośrednio do określonej strony na podstawie nazwy strony zdefiniowanej w pliku XML .config. Wywołanie tej metody pomija element OnNextSelected na stronie. Ponadto zachowanie tej metody może ulec zmianie, więc użyj jej na własne ryzyko.
int ShowMessageBox(komunikat LPCTSTR, LPCTSTR lpCaption, UINT uType)
Ta metoda wyświetla pole komunikatu z podanym tekstem i podpis. Parametr uType to dowolna wartość, którą można podać funkcji MessageBox Win32.
BOOL InPreview(void)
Ta metoda zwraca wartość TRUE, jeśli kreator został uruchomiony w trybie "wersja zapoznawcza", podając przełącznik /preview . W trybie podglądu przycisk Dalej nigdy nie jest wyłączony. Ta metoda umożliwia obejście kodu w trybie podglądu, na przykład, który może powodować problemy, gdy nie masz prawidłowych danych na stronie.
HWND GetHwnd(void)
Ta metoda zwraca wartość HWND dla głównego okna dialogowego. Użyj tej metody z ostrożnością. Ogólnie rzecz biorąc, interfejs programowania aplikacji Kreatora UDI został zaprojektowany tak, aby nigdy nie pracować bezpośrednio z uchwytami okien.
IWizardPageView, interfejs
__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);
};
Ten interfejs jest dostępny dla kodu na stronie za pośrednictwem metody View (zaimplementowanego przez WizardPageImpl).
HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown *ppControl)
Kreator UDI używa otoek, które są naprawdę fasadami do interakcji z kontrolkami na stronie. Użycie tych elewacji zamiast rzeczywistych kontrolek znacznie ułatwia pisanie testów dla strony, ponieważ można udostępniać makiety fasad z testów.
Zamiast używać tej metody bezpośrednio, lepiej jest użyć metody szablonu GetControlWrapper , która jest silnie typizowana — na przykład:
PComboBox m_pLanguagePackCombo;
GetControlWrapper(View(), IDC_MY_COMBO, CONTROL_COMBO_BOX, &m_pCombo);
HWND GetHwnd(void)
Ta metoda zwraca dojście okna dla strony. Ogólnie rzecz biorąc, nie należy potrzebować dostępu do tego dojścia okna.
HWND GetControl(int itemId)
Jeśli musisz, możesz wywołać tę metodę, aby uzyskać uchwyt okna dla kontrolki na stronie. (Lepiej jest wywołać funkcję szablonu GetControlWrapper ).
HRESULT Show (void)
Ta metoda służy tylko do użytku wewnętrznego.
HRESULT Hide(void)
Ta metoda służy tylko do użytku wewnętrznego.
Koncentracja uwagi HRESULT (int itemId)
Ustaw fokus wejściowy na określoną kontrolkę.
IWizardPage * Page(void)
Ta metoda służy tylko do użytku wewnętrznego.
IFormController * Form(void)
Ta metoda służy tylko do użytku wewnętrznego.
HRESULT FocusWizardButton(Przycisk Kreatora)
Ustawia fokus na jeden z przycisków kreatora. KreatorButtons ma dwie wartości: BackButton i NextButton.
HRESULT SetEnable(Przycisk Kreatora, włącz wartość BOOL)
Zażądaj włączenia lub wyłączenia jednego z przycisków kreatora. Przycisk może nie odpowiadać żądanemu stanowi. Jeśli na przykład uruchomisz Kreatora UDI z przełącznikiem /preview , przyciski będą zawsze włączone. KreatorButtons ma dwie wartości: BackButton i NextButton.
void ShowWarningMessage(komunikat LPCTSTR)
Ta metoda wyświetla komunikat ostrzegawczy w dolnej części obszaru zawartości strony. Ta wiadomość może być dowolnym tekstem.
void HideWarningMessage(void)
Ukryj wyświetlany komunikat ostrzegawczy z wywołaniem polecenia ShowWarningMessage.
IXmlDocument, interfejs
__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);
};
Omówienie
Ten interfejs jest implementowany przez składnik ID_IXmlDocument , który jest fasadą zaprojektowaną w celu ułatwienia pracy z dokumentami XML w języku C++.
HRESULT Load(Nazwa pliku LPCTSTR)
Ta metoda ładuje dokument XML z pliku zewnętrznego. Zwraca S_OK , jeśli plik został załadowany bez błędów lub S_FALSE w przypadku wystąpienia błędu. W przypadku wystąpienia błędu możesz uzyskać komunikat o błędzie, wywołując polecenie GetParseErrorMessage.
HRESULT LoadXml(LPCTSTR xml)
Ta metoda ładuje dokument XML z ciągu zamiast pliku zewnętrznego. Inne niż źródło odczytu kodu XML zachowanie jest takie samo jak metoda Load .
HRESULT Save(Nazwa pliku LPCWSTR)
Ta metoda zapisuje dokument XML w pamięci do pliku zewnętrznego.
HRESULT GetParseErrorMessage(LPBSTR pMessage)
Ta metoda zwraca nowy ciąg z komunikatem o błędzie podczas ładowania dokumentu XML, jeśli istnieje. Zawsze zwraca S_OK.
HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)
Ta metoda umożliwia użycie wyrażenia XPath w celu pobrania kolekcji węzłów z dokumentu. Zawsze zwraca S_OK.
HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)
Ta metoda umożliwia użycie wyrażenia XPath w celu pobrania jednego węzła z dokumentu. Zawsze zwraca S_OK.
HRESULT AddSchema(Nazwa pliku LPCTSTR, LPCTSTR ns)
Ta metoda dodaje nazwę pliku schematu zewnętrznego, który będzie używany do weryfikowania schematu dokumentu XML po załadowaniu. Podana przestrzeń nazw to ciąg, którego można użyć w zapytaniach XPath, chociaż nie został on przetestowany.
HRESULT AddAttribute(IXMLDOMNode *pNode, nazwa LPCWSTR, wartość LPCWSTR)
Ta metoda dodaje nowy atrybut do istniejącego węzła w dokumencie XML. Zobacz Tabela 53.
Tabela 53. HRESULT AddAttribute
Parametr | Opis |
---|---|
węzeł węzła | Węzeł, do którego chcesz dodać atrybut |
Nazwa | Nazwa nowego atrybutu |
Wartość | Wartość nowego atrybutu |
HRESULT CreateNode(typ DOMNodeType, nazwa LPCWSTR, LPCWSTR ns, IXMLDOMNode **ppNode)
Wywołaj tę metodę, aby utworzyć nowy węzeł:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Po utworzeniu nowego węzła możesz dodać go jako element podrzędny do innego węzła, wywołując metodę appendChild elementu nadrzędnego.
Funkcje pomocnika
CreateInstance, funkcja szablonu
HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)
Ta funkcja jest zdefiniowana w pliku IWizardPageContainer.h i udostępnia bezpieczną dla typu otokę za pośrednictwem metody IWizardPageContainer-CreateInstance> — na przykład:
CreateInstance<IDirectory>(Container(), ID_Directory, &pDirectory);
Ten kod tworzy nowy składnik ID_Directory w celu pobrania interfejsu IDirectory tego składnika.
GetService, funkcja szablonu
void GetService(IWizardPageContainer *pContainer, I **ppService)
Ta funkcja jest zdefiniowana w pliku IWizardPageContainer.h i udostępnia otokę bezpieczną dla typu za pośrednictwem metody IWizardPageContainer-GetService> — na przykład:
GetService<ITSVariableBag>(Container(), &pTsBag);
Ta funkcja pobiera składnik sekwencji zadań, który obsługuje interfejs ITSVariableBag . (W przypadku elementu ITSVariableBag można użyć metody TSVariables klasy WizardPageImpl ).
Kreator UDI Designer dokumentację schematu pliku konfiguracji
Ten plik jest używany przez Kreatora UDI Designer. Dla każdego niestandardowego pliku .dll tworzony jest oddzielny plik, który może zawierać niestandardowe edytory stron kreatora, zadania niestandardowe lub niestandardowe moduły sprawdzania poprawności. Plik musi kończyć się .config i znajdować się w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano mdt).
Tabela 54 zawiera listę elementów w Kreatorze UDI Designer pliku konfiguracji i ich opisów. Element DesignerConfig jest węzłem głównym tego odwołania.
Tabela 54. Elementy w Kreatorze UDI Designer plik konfiguracji i ich opisy
Nazwa elementu | Opis |
---|---|
DesignerConfig | Określa katalog główny dla wszystkich innych elementów |
DesignerMappings | Grupy zestaw elementów strony |
Strona | Określa edytor stron kreatora do załadowania w Kreatorze UDI Designer, który służy do edytowania ustawień konfiguracji strony kreatora |
Param | Określa parametr przekazywany do nadrzędnego elementu Task lub Validator i odpowiada elementowi Setter w pliku konfiguracji Kreatora UDI Uwaga: Atrybuty tego elementu są różne, jeśli elementem nadrzędnym jest element Task lub Validator . |
Zadanie | Określa zadanie w bibliotece zadań |
Element zadania | Określa grupę parametrów, które są przekazywane do zadania |
TaskLibrary | Grupy zestaw elementów zadania |
Moduł sprawdzania poprawności | Określa moduł sprawdzania poprawności w bibliotece modułu sprawdzania poprawności |
ValidatorLibrary | Grupy zestaw elementów modułu sprawdzania poprawności |
DesignerConfig
Ten element określa katalog główny dla wszystkich innych elementów.
Informacje o elemencie
Tabela 55 zawiera informacje o elemencie DesignerConfig .
Tabela 55. Informacje o elemencie DesignerConfig
Atrybut | Wartość |
---|---|
Liczba wystąpień | Jeden: ten element jest wymagany. |
Elementy nadrzędne | Brak |
Spis treści | DesignerMappings, TaskLibrary, ValidatorLibrary |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings
Ten element grupuje zestaw elementów strony .
Informacje o elemencie
Tabela 56 zawiera informacje o elemencie DesignerMappings .
Tabela 56. Informacje o elemencie DesignerMappings
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w elemencie DesignerConfig (ten element jest opcjonalny, jeśli w biblioteki DLL nie ma niestandardowej strony kreatora odpowiadającej temu Kreatorowi UDI Designer pliku konfiguracji). |
Elementy nadrzędne | DesignerConfig |
Spis treści | Strona |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<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>
Strona
Ten element określa edytor stron kreatora do załadowania w Kreatorze UDI Designer, który z kolei służy do edytowania ustawień konfiguracji strony kreatora.
Informacje o elemencie
Tabela 57 zawiera informacje o elemencie Page .
Tabela 57. Informacje o elemencie strony
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jedna strona kreatora zdefiniowana w elemencie DesignerMappings |
Elementy nadrzędne | DesignerMappings |
Spis treści | Dowolna dobrze sformułowana zawartość XML |
Atrybuty elementów
Tabela 58 zawiera atrybuty elementu Page i opis dla każdego z nich.
Tabela 58. Atrybuty i odpowiadające im wartości elementu strony
Atrybut | Opis |
---|---|
Opis | Określa tekst zawierający informacje o parametrze, który jest wyświetlany w Kreatorze UDI Designer |
ProjektantAssembly | Określa nazwę pliku .dll skojarzonego z edytorem stron kreatora (plik .dll musi istnieć w folderze installation_folder\Bin (gdzie installation_folder jest folderem, w którym zainstalowano funkcję MDT). |
Typ projektanta | Określa nazwę edytora stron kreatora w pliku .dll określonym w atrybucie DesignerAssembly (Jest to typ platformy Microsoft .NET dla edytora stron kreatora z w pełni kwalifikowaną przestrzenią nazw platformy Microsoft .NET). |
DisplayName | Określa przyjazną dla użytkownika nazwę edytora stron, która jest wyświetlana w Kreatorze UDI Designer |
DLL | Określa nazwę pliku .dll skojarzonego ze stroną kreatora (plik .dll musi istnieć w folderze installation_folder\Templates\Distribution\Tools\platform (gdzie installation_folder jest folderem, w którym zainstalowano mdt, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej). Nuta: Upewnij się, że architektura procesora DLL jest zgodna z zainstalowaną architekturą procesora MDT. Jeśli na przykład zainstalowano 32-bitową wersję mdt, upewnij się, że używasz 32-bitowej biblioteki DLL na stronie kreatora. |
Obraz | Określa nazwę obrazu strony w formacie Portable Network Graphics (PNG) (Plik .png musi istnieć w folderze installation_folder\Bin\Images (gdzie installation_folder jest folderem, w którym zainstalowano mdt). |
Type | Określa edytor stron kreatora i musi odpowiadać nazwie użytej podczas rejestrowania strony niestandardowej |
Uwagi
Kreator UDI Designer używa elementu Page, takiego jak szablon, do utworzenia początkowego kodu XML dla nowego kreatora. Kreator UDI Designer wykonuje walidację schematu, aby upewnić się, że elementy strony i elementy podrzędne mają prawidłowy format. Ten element zawiera mapowanie między typem strony Kreatora UDI a informacjami, które Kreator UDI Designer musi edytować i tworzyć strony tego typu przy użyciu niestandardowego edytora stron.
Przykład
Żaden.
Param
Ten element określa parametr przekazywany do nadrzędnego elementu Task lub Validator i odpowiada elementowi Setter w pliku konfiguracji Kreatora UDI.
Informacje o elemencie
Tabela 59 zawiera informacje o elemencie Param .
Tabela 59. Informacje o elemencie param
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element nadrzędny TaskItem lub Validator |
Elementy nadrzędne | TaskItem, Validator |
Spis treści | Dowolna dobrze sformułowana zawartość XML |
Atrybuty elementów
Tabela 60 zawiera listę atrybutów elementu Param i zawiera opis każdego z nich.
Tabela 60. Atrybuty i odpowiednie wartości dla elementu Param
Atrybut | Opis |
---|---|
Opis | Określa tekst, który zawiera informacje o parametrze, który jest wyświetlany w Kreatorze UDI Designer Uwaga: ten atrybut jest prawidłowy tylko dla elementu Validator. |
DisplayName | Określa przyjazną dla użytkownika nazwę parametru validator, która jest wyświetlana dla odpowiedniej strony Kreatora UDI w Kreatorze UDI Designer (Ta nazwa jest zwykle bardziej opisowa niż atrybut Nazwa). Uwaga: ten atrybut jest prawidłowy tylko dla elementu Validator. |
Nazwa | Określa nazwę parametru, który jest przekazywany do zadania lub modułu sprawdzania poprawności, w zależności od elementu nadrzędnego (Ten atrybut stanie się atrybutem właściwości w elemencie Setter w pliku konfiguracji Kreatora UDI). Nuta: Ten parametr jest używany zarówno dla elementów nadrzędnych TaskItem , jak i Validator . |
Uwagi
Żaden.
Przykład
Żaden.
Zadanie
Ten element określa zadanie w bibliotece zadań.
Informacje o elemencie
Tabela 61 zawiera informacje o elemencie Task .
Tabela 61. Informacje o elemencie zadania
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element w elemencie TaskLibrary (ten element nie jest opcjonalny, jeśli określono element TaskLibrary ). |
Elementy nadrzędne | TaskLibrary |
Spis treści | Element zadania |
Atrybuty elementów
Tabela 62 zawiera listę atrybutów elementu Task i zawiera opis każdego z nich.
Tabela 62. Atrybuty i odpowiadające im wartości dla elementu zadania
Atrybut | Opis |
---|---|
Opis | Określa tekst zawierający informacje o zadaniu, który jest wyświetlany w Kreatorze UDI Designer |
DLL | Określa nazwę pliku .dll skojarzonego z zadaniem (plik .dll musi istnieć w folderze installation_folder\Templates\Distribution\Tools\platform (gdzie installation_folder jest folderem, w którym zainstalowano mdt, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej). |
Nazwa | Określa nazwę zadania, która jest wyświetlana na odpowiedniej stronie Kreatora UDI i w Kreatorze UDI Designer |
Type | Określa typ zadania, który jest zarejestrowany w rejestrze fabryki i używany do wywoływania określonego zadania w pliku .dll |
Uwagi
Żaden.
Przykład
Żaden.
Element zadania
Ten element określa grupę parametrów, które są przekazywane do zadania.
Informacje o elemencie
Tabela 63 zawiera informacje o elemencie TaskItem .
Tabela 63. Informacje o elemencie TaskItem
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element zadania |
Elementy nadrzędne | Zadanie |
Spis treści | Param |
Atrybuty elementów
Tabela 64 zawiera listę atrybutów elementu TaskItem i zawiera opis każdego z nich.
Tabela 64. Atrybut i odpowiednie wartości elementu TaskItem
Atrybut | Opis |
---|---|
Typ | Określa typ elementu, który zostanie utworzony w pliku konfiguracji Kreatora UDI. Zostanie utworzony element XML odpowiadający wartości tego atrybutu. Jeśli na przykład wartość tego atrybutu to Plik, w pliku konfiguracji Kreatora UDI zostanie utworzony element Plik . Obecnie jedynymi obsługiwanymi wartościami są: - Plik, który wymaga dwóch elementów podrzędnych Param (jeden element podrzędny Param z atrybutem Name ustawionym na Source i innym elementem podrzędnym Param z atrybutem Nameustawionym na Dest) - Setter, który wymaga jednego elementu podrzędnego Param |
Uwagi
Żaden.
Przykład
Żaden.
TaskLibrary
Ten element grupuje zestaw elementów zadania .
Informacje o elemencie
Tabela 65 zawiera informacje o elemencie TaskLibrary .
Tabela 65. Informacje o elemencie TaskLibrary
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w elemencie DesignerConfig (ten element jest opcjonalny, jeśli w biblioteki DLL nie ma zadań niestandardowych odpowiadających temu Kreatorowi UDI Designer pliku konfiguracji). |
Elementy nadrzędne | DesignerConfig |
Spis treści | Zadanie |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<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>
Moduł sprawdzania poprawności
Ten element określa moduł sprawdzania poprawności w bibliotece modułu sprawdzania poprawności.
Informacje o elemencie
Tabela 66 zawiera informacje o elemencie Validator .
Tabela 66. Informacje o elemencie modułu sprawdzania poprawności
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w elemencie ValidatorLibrary (ten element jest opcjonalny). |
Elementy nadrzędne | ValidatorLibrary |
Spis treści | Param |
Atrybuty elementów
Tabela 67 zawiera listę atrybutów elementu Validator i zawiera opis każdego z nich.
Tabela 67. Atrybuty i odpowiednie wartości dla elementu validator
Atrybut | Opis |
---|---|
Opis | Określa tekst zawierający informacje o walidatorze, który jest wyświetlany w Kreatorze UDI Designer |
DisplayName | Określa przyjazną dla użytkownika nazwę modułu sprawdzania poprawności wyświetlaną w Kreatorze UDI Designer (Ta nazwa jest zwykle bardziej opisowa niż atrybut Nazwa). |
DLL | Określa nazwę pliku .dll skojarzonego z modułem sprawdzania poprawności (plik .dll musi istnieć w folderze installation_folder\Templates\Distribution\Tools\platform (gdzie installation_folder jest folderem, w którym zainstalowano mdt, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej). |
Nazwa | Określa nazwę modułu sprawdzania poprawności, która jest wyświetlana na odpowiedniej stronie Kreatora UDI i w Kreatorze UDI Designer |
Type | Określa typ modułu sprawdzania poprawności, który jest zarejestrowany za pomocą współczynnika rejestru i używany do wywoływania określonego modułu sprawdzania poprawności w pliku .dll |
Uwagi
Żaden.
Przykład
Żaden.
ValidatorLibrary
Ten element grupuje zestaw elementów modułu sprawdzania poprawności .
Informacje o elemencie
Tabela 68 zawiera informacje o elemencie ValidatorLibrary .
Tabela 68. ValidatorLibrary, informacje o elemencie
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w elemencie DesignerConfig (ten element jest opcjonalny, jeśli w bibliotekach DLL nie ma niestandardowych modułów sprawdzania poprawności odpowiadających temu Kreatorowi UDI Designer pliku konfiguracji). |
Elementy nadrzędne | DesignerConfig |
Spis treści | Moduł sprawdzania poprawności |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<DesignerConfig> + <TaskLibrary> — <ValidatorLibrary> +<Validator DLL="" Description="Requires text in a field" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Doesn nie zezwalaj, aby niektóre znaki były w polu" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Must follow a pre-defined pattern" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Require the contents match a regular expression" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>
Dokumentacja Designer Kreatora UDI
Formantów
Kontrolki używane do tworzenia niestandardowych edytorów stron kreatora do użycia w Kreatorze UDI Designer są wystąpieniami WPF UserControl. Tabela 69 zawiera listę kontrolek, których można użyć do tworzenia niestandardowych edytorów stron kreatora.
Tabela 69. Kontrolki, których można użyć do tworzenia niestandardowych edytorów stron kreatora
Kontrola | Opis |
---|---|
CollectionTControl | Ta kontrolka służy do edytowania danych przechowywanych w elemencie Dane w elemencie Page . |
FieldElementControl | Ta kontrolka służy do edytowania pola, które jest zwykle połączone z kontrolką TextBox na stronie xaml. |
SetterControl | Ta kontrolka służy do modyfikowania wartości elementu setter w pliku konfiguracji Kreatora UDI. |
CollectionTControl
Ta kontrolka zapewnia wiele możliwości edycji danych. Najlepszym sposobem, aby dowiedzieć się, jak używać tej kontrolki, jest przyjrzenie się przykładowi, w którym pokazano, jak edytować dane w elemencie Dane strony. W szczególności w przykładzie pokazano, jak dodawać, usuwać i edytować elementy w tej kontrolce.
FieldElementControl
Ta kontrolka służy do edytowania pola, które jest zwykle połączone z kontrolką TextBox na stronie xaml.
Przykład
Poniższy fragment pliku xaml ilustruje użycie kontrolki FieldElementControl do skonfigurowania wartości domyślnej pola na stronie kreatora przy użyciu podrzędnej kontrolki TextBox :
<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>
Właściwości
FieldData
Ta właściwość ciągu zawiera informacje dotyczące łączenia pola FieldElementControl z bazowym kodem XML pola. Połączenie jest nawiązywane z właściwością interfejsu edytora stron. Poniższy fragment pliku xaml ilustruje użycie właściwości FieldData :
FieldData="{Binding DataContext.Location, ElementName=ControlRoot}"
W tym fragmencie interfejs edytora stron nosi nazwę ControlRoot i jest określony w parametrze ElementName . Powiązanie jest wykonywane z właściwością DataContext.Location interfejsu edytora stron ControlRoot . DataContext to model widoku, który wskazuje element Page w pliku konfiguracji Kreatora UDI. Lokalizacja to właściwość widoku, która zwraca listę możliwych lokalizacji i jest definiowana przez element Data w pliku konfiguracji Kreatora UDI. Każda lokalizacja jest definiowana przez element DataItem w pliku konfiguracji Kreatora UDI.
Tekst nagłówka
Ta właściwość ciągu umożliwia określenie nagłówka kontrolki FieldElementControl . Nagłówek działa jako tytuł kontrolki i jest sformatowany jako pogrubiony, pomarańczowy tekst wyświetlany bezpośrednio nad kontrolką.
InstructionText
Ta właściwość ciągu umożliwia określenie tekstu informacyjnego kontrolki FieldElementControl . Zazwyczaj tekst służy do podania krótkiego opisu pola i wyjaśnienia, w jaki sposób konfigurowanie pola wpływa na odpowiednią stronę kreatora.
HideEnableButton
Ta właściwość logiczna umożliwia kontrolowanie widoczności przycisku, który zmienia stan między odblokowanym i zablokowanym (włączonym lub wyłączonym). Jeśli ustawiono wartość na:
Prawda, przycisk nie jest widoczny
False, przycisk jest widoczny (jest to wartość domyślna).
HideDefaultTab
Ta właściwość logiczna umożliwia kontrolowanie widoczności sekcji zawierającej kontrolkę używaną do ustawiania wartości domyślnej. Mimo że właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, ale sekcja może być ukryta. Jeśli ustawiono wartość na:
Prawda, że sekcja nie jest widoczna
False, sekcja jest widoczna (jest to wartość domyślna).
HideBorder
Ta właściwość logiczna umożliwia kontrolowanie widoczności obramowania wokół kontrolki pola. Jeśli ustawiono wartość na:
Prawda, obramowanie nie jest widoczne
Fałsz, obramowanie jest widoczne (jest to wartość domyślna).
HideImage
Ta właściwość logiczna umożliwia kontrolowanie widoczności obrazu skonfigurowanego przez właściwość FieldImageSource . Jeśli ustawiono wartość na:
To prawda, że obraz nie jest widoczny
False, obraz jest widoczny (jest to wartość domyślna).
HideValidationTab
Ta właściwość logiczna umożliwia kontrolowanie widoczności sekcji, w której zarządzana jest lista walidatorów. Mimo że właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, ale sekcja może być ukryta. Jeśli ustawiono wartość na:
Prawda, że sekcja nie jest widoczna
False, sekcja jest widoczna (jest to wartość domyślna).
HideSummaryTab
Ta właściwość logiczna umożliwia kontrolowanie widoczności sekcji, w której skonfigurowano podsumowanie pola podpis. Podpis i odpowiadająca jej wartość z pola są wyświetlane na stronie kreatora SummaryPage w przepływie etapów. Mimo że właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, ale sekcja może być ukryta. Jeśli ustawiono wartość na:
Prawda, że sekcja nie jest widoczna
False, sekcja jest widoczna (jest to wartość domyślna).
HideTaskSequenceTab
Ta właściwość logiczna umożliwia kontrolowanie widoczności sekcji, w której skonfigurowano zmienną sekwencji zadań odpowiadającą polu. Mimo że właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, ale sekcja może być ukryta. Jeśli ustawiono wartość na:
Prawda, że sekcja nie jest widoczna
False, sekcja jest widoczna (jest to wartość domyślna).
SetterControl
Ta kontrolka służy do modyfikowania wartości elementu Setter w pliku konfiguracji Kreatora UDI. Ta kontrolka zawiera kontrolkę podrzędną używaną do modyfikowania wartości elementu setter .
Przykład
Poniższy fragment pliku xaml ilustruje użycie kontrolki SetterControl do zmodyfikowania elementu Setter o nazwie KeyLocationSetter przy użyciu podrzędnej kontrolki TextBox .
<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>
Właściwości
SetterData
Należy powiązać ją z właściwością widoku lub modelu widoku, która łączy się z ustawiaczem. Jest to podobne do sposobu powiązania z polem, zgodnie z opisem dla kontrolki FieldElementControl.
Tekst nagłówka
Ta właściwość umożliwia ustawienie tekstu, który będzie wyświetlany w nagłówku kontrolki. Tę właściwość należy traktować jako tytuł kontrolki; Domyślnie jest wyświetlany jako pogrubiony, pomarańczowy tekst.
InstructionText
Ustaw tę właściwość na tekst, który ma być wyświetlany poniżej nagłówka — zazwyczaj tekst instrukcji informujący użytkownika edytora niestandardowego o tym, kiedy i dlaczego chce zmodyfikować zachowanie pola.
Interfejsów
Tabela 70 zawiera listę interfejsów, których można użyć do tworzenia niestandardowych edytorów stron kreatora.
Tabela 70. Interfejsy, których można użyć do tworzenia niestandardowych edytorów stron kreatora
Interfejs | Opis |
---|---|
IDataService | Ten interfejs służy do łączenia pól z elementami danych w pliku konfiguracji Kreatora UDI. |
IMessageBoxService | Ten interfejs zapewnia dostęp do metod, których można użyć do wyświetlania pól komunikatów. |
IDataService
Ten interfejs zawiera kilka właściwości i metod, ale istnieje tylko jedna właściwość, której potrzebujesz. Ta właściwość jest jedyną właściwością udokumentowaną tutaj.
Możesz użyć wstrzykiwania zależności, aby uzyskać wskaźnik do tego interfejsu przy użyciu kodu takiego jak ten w klasie:
[Dependency]
public IDataService DataService { get; set; }
Właściwości
Tabela 71 zawiera listę właściwości interfejsu IDataService .
Tabela 71. Właściwości interfejsu IDataService
Interfejs | Opis |
---|---|
CurrentPage | Ta właściwość zapewnia dostęp do elementów XML, atrybutów i wartości poniżej kontekstu bieżącej strony edytowanej w pliku konfiguracji Kreatora UDI |
CurrentPage
XElement CurrentPage { get; set; }
Ta właściwość zapewnia dostęp do kodu XML dla bieżącej strony. Nigdy nie należy ustawiać tej właściwości, ale możesz modyfikować kod XML dla strony. Przykładowy edytor stron przedstawia przykłady modyfikowania kodu XML. Ta właściwość jest używana głównie wtedy, gdy masz dane niestandardowe. W przypadku pól i właściwości (ustawień) można użyć wstępnie utworzonych kontrolek, które zajmują się wszystkimi szczegółami.
IMessageBoxService
Ten interfejs zapewnia dostęp do metod, których można użyć do wyświetlania pól komunikatów. Być może zastanawiasz się, dlaczego potrzebujesz interfejsu do wyświetlenia pola komunikatu. W rzeczywistości nie: firma Microsoft używa tego interfejsu w kodzie, ponieważ ułatwia pisanie testów automatycznych dla stron projektanta.
Jednak użycie tych metod zapewnia jedną przydatną korzyść: w oknach dialogowych zawsze ustawiono "właściciela" na Kreatora UDI, co gwarantuje, że okno dialogowe jest poprawnie pogrupowane z oknem głównym.
Możesz użyć wstrzykiwania zależności, aby uzyskać wskaźnik do tego interfejsu przy użyciu kodu takiego jak ten w klasie:
[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Metody
Tabela 72 zawiera listę metod interfejsu IMessageBoxService .
Tabela 72. Metody interfejsu IMessageBoxService
Metoda | Opis |
---|---|
ShowMessageBox | Ta przeciążona metoda służy do wyświetlania pola komunikatu z następującymi elementami członkowskimi: - ShowMessageBox(komunikat ciągu, podpis ciągów, ikona MessageBoxImage) - ShowMessageBox(komunikat ciągu, ciąg podpis, przycisk MessageBoxButton, ikona MessageBoxImage) - ShowMessageBox(wyjątek wyjątku) |
ShowDialogWindow | Użyj tej metody, aby utworzyć nowe okno dialogowe. |
ShowWizardWindow | Ta metoda służy do wyświetlania edytora niestandardowego wewnątrz okna dialogowego zawierającego przyciski Dalej i Wstecz na potrzeby nawigacji. |
ShowMessageBox
Ta metoda wyświetla pole komunikatu, które jest elementem podrzędnym edytora stron kreatora niestandardowego. Ten element członkowski jest przeciążony: Tabela 73 zawiera listę elementów członkowskich i krótki opis każdego z nich. Aby uzyskać pełne informacje o poszczególnych elementach członkowskich (w tym o składni, użyciu i przykładach), zobacz sekcję, która odpowiada poszczególnym elementom członkowskim.
Tabela 73. Przeciążone elementy członkowskie dla metody ShowMessagBox
Członek | Opis |
---|---|
ShowMessageBox(komunikat ciągu, podpis ciągów, ikona MessageBoxImage) | Wyświetla okno komunikatu z ikoną i przyciskiem OK |
ShowMessageBox(komunikat ciągu, ciąg podpis, przycisk MessageBoxButton, ikona MessageBoxImage) | Wyświetla okno komunikatu z ikoną i różnymi możliwymi kombinacjami przycisków |
ShowMessageBox(wyjątek wyjątku) | Wyświetla okno komunikatu, które zawiera informacje o wyjątku i ma przycisk OK |
ShowMessageBox(komunikat ciągu, podpis ciągów, ikona MessageBoxImage)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
Ta metoda wyświetla okno komunikatu z przyciskiem OK . Zobacz Tabela 74.
Tabela 74. Parametry metody ShowMessageBox(komunikat ciągu, podpis ciągu, ikona MessageBoxImage)
Parametr | Opis |
---|---|
Komunikat | Komunikat do wyświetlenia w obszarze zawartości pola komunikatu |
podpis | Tekst wyświetlany na pasku tytułu okna dialogowego |
ikona | Typ ikony do pokazania w polu komunikatu |
ShowMessageBox(komunikat ciągu, ciąg podpis, przycisk MessageBoxButton, ikona MessageBoxImage)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);
Ta metoda wyświetla pole komunikatu z zestawem przycisków, które chcesz pokazać, i raportuje wybrany przycisk. Zobacz Tabela 75.
Tabela 75. Parametry metody ShowMessageBox(komunikat ciągu, ciąg podpis, przycisk MessageBoxButton, ikona MessageBoxImage)
Parametr | Opis |
---|---|
Komunikat | Komunikat do wyświetlenia w obszarze zawartości pola komunikatu |
podpis | Tekst wyświetlany na pasku tytułu okna dialogowego |
guzik | Które przyciski mają być wyświetlane |
ikona | Typ ikony do pokazania w polu komunikatu |
ShowMessageBox(wyjątek wyjątku)
void ShowMessageBox(Exception exception);
Ta metoda wyświetla pole komunikatu, które zgłasza informacje o wyjątku. To pole komunikatu zawiera jeden przycisk OK . Zobacz Tabela 76.
Tabela 76. Parametry metody ShowMessageBox(wyjątek wyjątku)
Parametr | Opis |
---|---|
wyjątek | Wyjątek, który chcesz zgłosić (w oknie dialogowym jest używany wyjątek. Komunikat jako zawartość). |
ShowDialogWindow
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
Ta metoda tworzy nowe okno dialogowe, którego zawartość jest tekstem dostarczanym w parametrze viewType . UDI Designer tworzy nowe wystąpienie tego typu i zawija je w oknie dialogowym z przyciskami OK i Anuluj.
Dane są przekazywane do kontrolki przy użyciu parametru dialogPayload. Rozwiązanie SampleEditor w katalogu zestawu SDK zawiera przykład użycia tej funkcji.
ShowWizardWindow
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
Ta metoda umożliwia wyświetlenie edytora niestandardowego wewnątrz okna dialogowego zawierającego przyciski Dalej i Wstecz na potrzeby nawigacji. Firma Microsoft nie dostarczyła przykładu dotyczącego sposobu korzystania z tej metody.
Dokumentacja schematu pliku konfiguracji Kreatora UDI
Ten plik jest używany przez Kreatora UDI i konfigurowany przez Kreatora UDI Designer. Ten plik służy do konfigurowania następujących elementów:
Strony kreatora wyświetlane w Kreatorze UDI
Sekwencja stron kreatora w Kreatorze UDI
Ustawienia pól na każdej stronie kreatora
Dostępne grupy etapów w Kreatorze UDI Designer
Dostępne etapy w każdym kreatorze wdrażania w Kreatorze UDI Designer
77 zawiera listę elementów w pliku konfiguracji Kreatora UDI oraz ich opisy. Element Kreator jest węzłem głównym tego odwołania.
Tabela 77. Elementy w pliku konfiguracji Kreatora UDI i ich opisy
Nazwa elementu | Opis |
---|---|
Data (Dane) | Grupy poszczególnych elementów DataItem w elemenciePage i nosi nazwę atrybutu Name. |
DataItem | Grupy poszczególne elementy settera w elemencie Page. Dane hierarchiczne można tworzyć, dołączając co najmniej jeden element danych w elemencie DataItem . Każdy element DataItem reprezentuje pojedynczy element. Na przykład lista dostępnych dysków może mieć element DataItem dla nazwy wyświetlanej i inny element DataItem dla odpowiedniej litery dysku. |
Domyślne | Określa wartość domyślną pola określonego w elemencie pole nadrzędne lub RadioGroup . Wartość domyślna jest ustawiona na wartość ujętą w nawiasach kwadratowych tego elementu. |
DLL | Określa bibliotekę DLL, która ma być ładowana i przywoływane przez Kreatora UDI i Kreatora UDI Designer. |
Biblioteki DLL | Grupy poszczególnych elementów biblioteki DLL. |
Błąd | Określa możliwy kod błędu, który może zwrócić zadanie. Wartość kodu błędu jest zwracana przez hresult zadania i jest uwięziona przez ten element w celu podania bardziej szczegółowych informacji o błędzie. |
ExitCode | Określa możliwy kod zakończenia zadania. Kody zakończenia to kody powrotne oczekiwane przez zadanie. Utwórz element ExitCode dla każdego możliwego kodu zakończenia. W przeciwnym razie możesz określić gwiazdkę (*) w atrybucie Value , aby obsługiwać kody powrotne, które nie są wymienione w innych elementach ExitCode . |
ExitCodes | Grupy zestaw elementów ExitCode i Error dla elementu Task lub Error. |
Pole | Określa wystąpienie kontrolki w elemencie Page , które jest używane do dostosowywania za pomocą kodu XML. Nie wszystkie kontrolki zezwalają na dostosowywanie przy użyciu kodu XML — tylko kontrolki korzystające z elementu Field . |
Pola | Grupy poszczególne elementy pola w elemencie Page. |
Plik | Określa źródło i miejsce docelowe operacji kopiowania plików przy użyciu typu zadania Microsoft.Wizard.CopyFilesTask . Możesz dołączyć oddzielny element Plik , aby skopiować więcej niż jeden plik w jednym zadaniu. |
Strona | Określa wystąpienie strony i zawiera wszystkie ustawienia konfiguracji strony. |
PageRef | Określa odwołanie do wystąpienia strony w ramach etapu w grupie StageGroup. |
Stron | Grupy poszczególne elementy strony. |
RadioGroup | Określa grupę przycisków radiowych w elemencie Field . |
StageGroup | Określa grupę co najmniej jednego etapu. |
StageGroups | Grupy zestaw grup etapów w pliku konfiguracji Kreatora UDI. |
Setter | Określa ustawienie właściwości wartości właściwości o nazwie we właściwości Property . |
Scena | Określa etap w grupie StageGroup i zawiera co najmniej jeden element PageRef . |
Styl | Grupy poszczególne elementy ustawień, które konfigurują wygląd i działanie Kreatora UDI, w tym tytuł wyświetlany w górnej części kreatora i obraz baneru wyświetlany w Kreatorze UDI. |
Zadanie | Określa zadanie, które ma zostać uruchomione na stronie określonej w elemencie strony nadrzędnej. |
Zadania | Grupy zestaw zadań dla elementu Page. |
Moduł sprawdzania poprawności | Określa moduł sprawdzania poprawności kontrolki pola określony w elemencie pola nadrzędnego. |
Czarodziej | Określa katalog główny dla wszystkich innych elementów. |
Dane
Ten element grupuje poszczególne elementy DataItem w elemenciePage i nosi nazwę atrybutu Name .
Informacje o elemencie
Tabela 78 zawiera informacje o elemencie Dane .
Tabela 78. Informacje o elemencie danych
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie Strony (ten element jest opcjonalny). |
Elementy nadrzędne | Strona, DataItem |
Spis treści | DataItem, Setter |
Atrybuty elementów
Tabela 79 zawiera listę atrybutów elementu Data i zawiera opis każdego z nich.
Tabela 79. Atrybuty i odpowiadające im wartości dla elementu danych
Atrybut | Opis |
---|---|
Nazwa | Określa nazwę elementu Data |
Uwagi
Atrybut Name umożliwia kodowi pobranie określonego zestawu danych.
Przykład
Żaden.
DataItem
Ten element grupuje poszczególne elementy settera w elemencie Page . Dane hierarchiczne można tworzyć, dołączając co najmniej jeden element danych w elemencie DataItem . Każdy element DataItem reprezentuje pojedynczy element. Na przykład lista dostępnych dysków może mieć element DataItem dla nazwy wyświetlanej i inny element DataItem dla odpowiedniej litery dysku.
Informacje o elemencie
Tabela 80 zawiera informacje o elemencie DataItem .
Tabela 80. DataItem— informacje o elemencie
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie Danych (ten element jest opcjonalny). |
Elementy nadrzędne | Data (Dane) |
Spis treści | Dane, Setter |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Domyślne
Ten element określa wartość domyślną pola określonego w elemencie pole nadrzędne lub RadioGroup . Wartość domyślna jest ustawiona na wartość, którą ten element nawiasy.
Informacje o elemencie
Tabela 81 zawiera informacje o elemencie Default .
Tabela 81. Informacje o elemencie domyślnym
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w elemencie Field lub RadioGroup (ten element jest opcjonalny). |
Elementy nadrzędne | Pole, RadioGroup |
Spis treści | Może to być dowolna dobrze sformułowana zawartość XML, ale zazwyczaj jest to tekst standardowy |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
W poniższym przykładzie wartość domyślna pola TimeZone ma wartość "Pacific Standard Time":
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
DLL
Ten element określa bibliotekę DLL kreatora UDI i Kreatora UDI Designer do załadowania i odwołania.
Informacje o elemencie
Tabela 82 zawiera informacje o elemencie DLL .
Tabela 82. Informacje o elemencie biblioteki DLL
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element biblioteki DLL |
Element nadrzędny | Biblioteki DLL |
Spis treści | Brak dozwolonej zawartości dla tego elementu |
Atrybuty elementów
Tabela 83 zawiera listę atrybutów elementu DLL i zawiera opis każdego z nich.
Tabela 83. Atrybuty i odpowiadające im wartości dla elementu DLL
Atrybut | Opis |
---|---|
Name (Nazwa) | Określa nazwę biblioteki DLL kreatora UDI i Kreatora UDI Designer odwołania |
Uwagi
Żaden.
Przykład
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Biblioteki DLL
Ten element grupuje poszczególne elementy biblioteki DLL .
Informacje o elemencie
Tabela 84 zawiera informacje o elemencie bibliotek DLL .
Tabela 84. Informacje o elemencie bibliotek DLL
Atrybut | Wartość |
---|---|
Liczba wystąpień | Jeden |
Elementy nadrzędne | Czarodziej |
Spis treści | DLL |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<DLLs>
<DLL Name="OSDRefreshWizard.dll" />
<DLL Name="SharedPages.dll" />
</DLLs>
Error
Ten element określa możliwy kod błędu, który może zwrócić zadanie. Wartość kodu błędu jest zwracana i uwięziona przez hresult zadania w celu podania bardziej szczegółowych informacji o błędzie.
Informacje o elemencie
Tabela 85 zawiera informacje o elemencie Error .
Tabela 85. Informacje o elemencie błędu
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie ExitCode (ten element jest opcjonalny). |
Elementy nadrzędne | ExitCodes |
Spis treści | Dowolna dobrze sformułowana zawartość XML |
Atrybuty elementów
Tabela 86 zawiera listę atrybutów elementu Error i zawiera opis każdego z nich.
Tabela 86. Informacje o elemencie błędu
Atrybut | Opis |
---|---|
Stan | Określa stan powrotu zadania, które napotkało błąd. Zazwyczaj wartość tego atrybutu jest ustawiona na Błąd. Ta wartość jest wyświetlana w kolumnie State (Stan ) na stronie kreatora w Kreatorze UDI. |
Text (Tekst) | Określa opisowy tekst dotyczący warunku błędu, który napotkał zadanie. |
Type | Określa, czy ten element reprezentuje błąd, ostrzeżenie czy powodzenie. Wartość określona wpolu Typ musi być unikatowa w elemencie ExitCodes . Poniżej przedstawiono prawidłowe wartości dla tego elementu: - **0.**Element reprezentuje powodzenie. - 1. Element reprezentuje ostrzeżenie. - -1. Element reprezentuje błąd. |
Wartość | Określa wartość kodu zwróconego przez zadanie jako wartość liczbową. Określenie wartości gwiazdki (*) wskazuje element domyślny dla kodów powrotnych, które nie są wymienione w innych elementach błędu . |
Uwagi
Żaden.
Przykład
Żaden.
ExitCode
Ten element określa możliwy kod zakończenia zadania. Kody zakończenia to kody powrotne oczekiwane przez zadanie. Utwórz element ExitCode dla każdego możliwego kodu zakończenia. W przeciwnym razie możesz określić gwiazdkę (*) w atrybucie Value , aby obsługiwać kody powrotne, które nie są wymienione w innych elementach ExitCode .
Informacje o elemencie
Tabela 87 zawiera informacje o elemencie ExitCode .
Tabela 87. Informacje o elemencie ExitCode
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie ExitCodes (ten element jest opcjonalny). |
Elementy nadrzędne | ExitCodes |
Spis treści | Co najmniej jeden element ExitCode i zero lub więcej elementów błędu |
Atrybuty elementów
Tabela 88 zawiera listę atrybutów elementu ExitCode i zawiera opis każdego z nich.
Tabela 88. Atrybuty i odpowiednie wartości dla elementu ExitCode
Atrybut | Opis |
---|---|
Stan | Określa stan zwracany zadania. Wartość tego atrybutu jest wyświetlana w kolumnie State (Stan ) na odpowiedniej stronie kreatora w Kreatorze UDI. Dla tego atrybutu można użyć dowolnych wartości, które mają znaczenie dla danego zadania. Poniżej przedstawiono typowe wartości używane dla tego atrybutu: -Sukces -Ostrzeżenie -Błąd |
Text (Tekst) | Określa opisowy tekst o istnieniu kodu zadania. |
Type | Określa, czy ten element reprezentuje błąd, ostrzeżenie czy powodzenie. Wartość określona w typie musi być unikatowa w elemencie ExitCodes . Poniżej przedstawiono prawidłowe wartości dla tego elementu: - 0. Element reprezentuje sukces. - 1. Element reprezentuje ostrzeżenie. - -1. Element reprezentuje błąd. |
Wartość | Określa wartość kodu zwróconego przez zadanie jako wartość liczbową. Określenie wartości gwiazdki (*) wskazuje element domyślny dla kodów powrotnych, które nie są wymienione w innych elementach ExitCode . |
Uwagi
Żaden.
Przykład
Żaden.
ExitCodes
Ten element grupuje zestaw elementów ExitCode i Error dla elementu Zadanie lub Błąd .
Informacje o elemencie
Tabela 89 zawiera informacje o elemencie ExitCodes .
Tabela 89. Informacje o elemencie ExitCodes
Atrybut | Wartość |
---|---|
Liczba wystąpień | Po jednym w każdym elemencie zadania |
Elementy nadrzędne | Zadanie |
Spis treści | Błąd, ExitCode |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Pole
Ten element określa wystąpienie kontrolki w elemencie Page używanym do dostosowywania przy użyciu kodu XML. Nie wszystkie kontrolki zezwalają na dostosowywanie przy użyciu kodu XML — tylko kontrolki korzystające z elementu Field .
Informacje o elemencie
Tabela 90 zawiera informacje o elemencie Field .
Tabela 90. Informacje o elemencie pola
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie Field (ten element jest opcjonalny). |
Elementy nadrzędne | Pola |
Spis treści | Domyślne, walidator |
Atrybuty elementów
Tabela 91 zawiera listę atrybutów elementu Field i zawiera opis każdego z nich.
Tabela 91. Atrybuty i odpowiadające im wartości dla elementu pola
Atrybut | Opis |
---|---|
Włączone | Określa, czy pole jest włączone dla danych wejściowych użytkownika (atrybut można ustawić na wartość Prawda czy Fałsz). |
Nazwa | Określa nazwę pola |
Podsumowanie | Określa tekst opisowy wyświetlany na stronie kreatora podsumowania dla wartości ustawionej przez to pole |
VarName | Określa nazwę zmiennej sekwencji zadań odczytaną lub skonfigurowaną przy użyciu pola w elemencie pola nadrzędnego |
Uwagi
Ten element może zawierać zero lub więcej elementów domyślnych i zero lub więcej elementów modułu weryfikatora .
Przykład
Żaden.
Pola
Ten element grupuje poszczególne elementy pola w elemencie Page .
Informacje o elemencie
Tabela 92 zawiera informacje o elemencie Pola .
Tabela 92. Pola — informacje o elemencie
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie Strony (ten element jest opcjonalny). |
Elementy nadrzędne | Strona |
Spis treści | Pole, RadioGroup |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Plik
Ten element określa źródło i miejsce docelowe operacji kopiowania plików przy użyciu typu zadania Microsoft.Wizard.CopyFilesTask . Możesz dołączyć oddzielny element Plik , aby skopiować więcej niż jeden plik w jednym zadaniu.
Informacje o elemencie
Tabela 93 zawiera informacje o elemencie Plik .
Tabela 93. Informacje o elemencie pliku
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jedno zadanie, które ma typ zadania Microsoft.Wizard.CopyFilesTask |
Elementy nadrzędne | Zadanie |
Spis treści | Brak |
Atrybuty elementów
Tabela 94 zawiera listę atrybutów elementu File i zawiera opis każdego z nich.
Tabela 94. Atrybuty i odpowiednie wartości dla elementu pliku
Atrybut | Opis |
---|---|
Dest | Określa w pełni kwalifikowaną lub względną ścieżkę do folderu docelowego dla pliku określonego w atrybucie Source . Zmienne środowiskowe są dozwolone jako część ścieżki. |
Źródło | Określa w pełni kwalifikowaną lub względną ścieżkę do pliku źródłowego kopii typu zadania Microsoft.Wizard.CopyFilesTask . Ten atrybut obsługuje symbole wieloznaczne, dzięki czemu można skopiować wiele plików przy użyciu pojedynczego elementu Plik . Zmienne środowiskowe są dozwolone jako część ścieżki. |
Uwagi
Żaden.
Przykład
Żaden.
Strona
Ten element określa wystąpienie strony i zawiera wszystkie ustawienia konfiguracji strony.
Informacje o elemencie
Tabela 95 zawiera informacje o elemencie Page .
Tabela 95. Informacje o elemencie strony
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element strony |
Elementy nadrzędne | Stron |
Spis treści | Dane, pola, seter, zadania |
Atrybuty elementów
Tabela 96 zawiera listę atrybutów elementu Page i zawiera opis każdego z nich.
Tabela 96. Atrybuty i odpowiadające im wartości elementu strony
Atrybut | Opis |
---|---|
DisplayName | Określa przyjazną dla użytkownika nazwę strony kreatora wyświetlaną w Kreatorze UDI Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
Nazwa | Określa nazwę strony kreatora wyświetlanej w Kreatorze UDI Designer. |
Type | Określa typ strony kreatora, który bezpośrednio odnosi się do określonej strony kreatora w ramach biblioteki DLL. |
Uwagi
Żaden.
Przykład
Żaden.
PageRef
Ten element określa odwołanie do wystąpienia strony w ramach etapu w grupie Etap.
Informacje o elemencie
Tabela 97 zawiera informacje o elemencie PageRef .
Tabela 97. PageRef, informacje o elemencie
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element w elemencie Stage |
Elementy nadrzędne | Scena |
Spis treści | Brak |
Atrybuty elementów
Tabela 98 zawiera atrybut elementu PageRef i zawiera jego opis.
Tabela 98. Atrybuty i odpowiadające im wartości elementu PageRef
Atrybut | Opis |
---|---|
Strona | Określa wystąpienie strony w ramach etapu w grupie StageGroup. Ustaw tę wartość na atrybut Nazwa elementu Page . |
Uwagi
Żaden.
Przykład
Żaden.
Stron
Ten element grupuje poszczególne elementy strony .
Informacje o elemencie
Tabela 99 zawiera informacje o elemencie Pages .
Tabela 99. Informacje o elemencie pages
Atrybut | Wartość |
---|---|
Liczba wystąpień | Jeden |
Elementy nadrzędne | Czarodziej |
Spis treści | Strona |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<Pages>
+ <Page Name="WelcomePage" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">
+ <Page Name="ConfigScanPage" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">
+ <Page Name="ConfigScanBareMetal" DisplayName="Deployment Readiness" Type="Microsoft.OSDRefresh.ConfigScanPage">
+ <Page Name="RebootPage" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">
+ <Page Name="WelcomePageReplace" DisplayName="Welcome" Type="Microsoft.SharedPages.WelcomePage">
+ <Page Name="VolumePage" DisplayName="Volume" Type="Microsoft.OSDRefresh.VolumePage">
+ <Page Name="UserRestorePage" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">
+ <Page Name="ComputerPage" DisplayName="New Computer Details" Type="Microsoft.OSDRefresh.ComputerPage">
+ <Page Name="AdminAccounts" DisplayName="Administrator Password" Type="Microsoft.SharedPages.AdminAccountsPage">
+ <Page Name="UDAPage" DisplayName="User Device Affinity" Type="Microsoft.OSDRefresh.UDAPage">
+ <Page Name="LanguagePage" DisplayName="Language" Type="Microsoft.OSDRefresh.LanguagePage">
+ <Page Name="ApplicationPage" DisplayName="Install Programs" Type="Microsoft.OSDRefresh.ApplicationPage">
<Page Name="SummaryPage" DisplayName="Summary" Type="Microsoft.Shared.SummaryPage" />
+ <Page Name="UserCapturePageOldPC" DisplayName="Select Target" Type="Microsoft.OSDRefresh.UserStatePage">
+ <Page Name="ProgressPage" DisplayName="Capture Data" Type="Microsoft.OSDRefresh.ProgressPage">
+ <Page Name="RebootAfterCapture" DisplayName="Reboot" Type="Microsoft.OSDRefresh.RebootPage">
</Pages>
RadioGroup
Ten element określa grupę przycisków radiowych w elemencie Field .
Informacje o elemencie
Tabela 100 zawiera informacje o elemencie RadioGroup .
Tabela 100. Informacje o elemencie RadioGroup
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w elemencie Fields (ten element jest opcjonalny). |
Elementy nadrzędne | Pola |
Spis treści | Domyślne |
Atrybuty elementów
Tabela 101 zawiera listę atrybutów elementu RadioGroup i zawiera opis każdego z nich.
Tabela 101. Atrybuty i odpowiadające im wartości dla elementu RadioGroup
Atrybut | Opis |
---|---|
Zablokowane | Określa, czy grupa przycisków radiowych jest włączona dla danych wejściowych użytkownika. Atrybut można ustawić na: - Prawda. Określa, że przyciski radiowe są wyłączone, a użytkownicy nie mogą wybrać przycisku radiowego w grupie. - Fałsz. Określa, że przyciski radiowe są włączone, a użytkownicy mogą wybrać przycisk radiowy w grupie. |
Nazwa | Określa nazwę grupy opcji radiowych. |
Uwagi
Żaden.
Przykład
Żaden.
StageGroup
Ten element określa grupę etapów wdrażania.
Informacje o elemencie
Tabela 102 zawiera informacje o elemencie StageGroup .
Tabela 102. Informacje o elemencie StageGroup
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element w elemencie StageGroups |
Elementy nadrzędne | StageGroups |
Spis treści | Scena |
Atrybuty elementów
Tabela 103 zawiera listę atrybutów elementu StageGroup i opis atrybutu.
Tabela 103. Atrybuty i odpowiadające im wartości dla elementu StageGroup
Atrybut | Opis |
---|---|
DisplayName | Określa przyjazną dla użytkownika nazwę grupy etapów wyświetlaną w Kreatorze UDI Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
Uwagi
Żaden.
Przykład
Żaden.
StageGroups
Ten element grupuje zestaw grup etapów w pliku konfiguracji Kreatora UDI.
Informacje o elemencie
Tabela 104 zawiera informacje o elemencie StageGroups .
Tabela 104. Informacje o elemencie StageGroups
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w elemencie Kreatora |
Elementy nadrzędne | Czarodziej |
Spis treści | StageGroup |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Setter
Ten element określa ustawienie właściwości dla wartości właściwości o nazwie we właściwości Property .
Informacje o elemencie
Tabela 105 zawiera informacje o elemencie Setter .
Tabela 105. Informacje o elemencie setter
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub więcej w każdym elemencie nadrzędnym (ten element jest opcjonalny). |
Elementy nadrzędne | Dane, DataItem, Page, Style, Task, Validator |
Spis treści | Zawiera wartość ciągu w atrybucie Właściwości |
Atrybuty elementów
Tabela 106 zawiera atrybut elementu Setter i zawiera jego opis.
Tabela 106. Atrybuty i odpowiadające im wartości dla elementu Setter
Atrybut | Opis |
---|---|
Własność | Określa ustawioną nazwę właściwości. Nazwa właściwości jest ustawiona na wartość, która jest ustawiana w nawiasach kwadratowych tego atrybutu. |
Uwagi
Żaden.
Przykład
Żaden.
Scena
Ten element określa etap w grupie StageGroup i zawiera co najmniej jeden element PageRef .
Informacje o elemencie
Tabela 107 zawiera informacje o elemencie Stage .
Tabela 107. Informacje o elemencie stage
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element w elemencie StageGroup |
Elementy nadrzędne | StageGroup |
Spis treści | PageRef |
Atrybuty elementów
Tabela 108 zawiera listę atrybutów elementu Stage i zawiera opis każdego z nich.
Tabela 108. Atrybuty i odpowiadające im wartości dla elementu stage
Atrybut | Opis |
---|---|
DisplayName | Określa przyjazną dla użytkownika nazwę strony kreatora wyświetlaną w Kreatorze UDI Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
Nazwa | Określa nazwę etapu. Wartość tego elementu jest używana podczas uruchamiania Kreatora UDI z /stage: nazwa parametru wiersza polecenia. |
Uwagi
Żaden.
Przykład
Żaden.
Styl
Ten element grupuje poszczególne elementy settera , które konfigurują wygląd i działanie Kreatora UDI, w tym tytuł wyświetlany w górnej części kreatora oraz obraz baneru wyświetlany w Kreatorze UDI.
Informacje o elemencie
Tabela 109 zawiera informacje o elemencie Style.
Tabela 109. Informacje o elemencie stylu
Atrybut | Wartość |
---|---|
Liczba wystąpień | Jeden |
Elementy nadrzędne | Czarodziej |
Spis treści | Setter |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<Style>
<Setter Property="bannerFilename">UDI_Wizard_Banner.bmp</Setter>
<Setter Property="title">Operating System Deployment (OSD) Refresh Wizard</Setter>
</Style>
Zadanie
Ten element określa zadanie, które ma zostać uruchomione na stronie określonej w elemencie strony nadrzędnej.
Informacje o elemencie
Tabela 110 zawiera informacje o elemencie Task .
Tabela 110. Informacje o elemencie zadania
Atrybut | Wartość |
---|---|
Liczba wystąpień | Co najmniej jeden element zadania |
Elementy nadrzędne | Zadania |
Spis treści | ExitCodes, File, Setter |
Atrybuty elementów
Tabela 111 zawiera listę atrybutów elementu Task i zawiera opis każdego z nich.
Tabela 111. Atrybuty i odpowiadające im wartości dla elementu zadania
Atrybut | Opis |
---|---|
DependsOn | Określa, czy zadanie jest zależne od innego zadania. Wartość tego atrybutu jest ustawiona na atrybut Nazwa innego elementu Zadania . Nuta: Nie można skonfigurować tego atrybutu przy użyciu kreatora UDI Designer. Można jednak ręcznie dodać ten atrybut do elementu Task , bezpośrednio modyfikując plik .xml. |
DisplayName | Określa przyjazną dla użytkownika nazwę zadania wyświetlaną w Kreatorze UDI Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
Nazwa | Określa nazwę zadania. Ta nazwa musi być unikatowa. |
Wpisać | Określa typ zadania do uruchomienia, który jest zdefiniowany w bibliotekę DLL zawierającą zadanie. |
Uwagi
Żaden.
Przykład
Żaden.
Zadania
Ten element grupuje zestaw zadań dla elementu Page .
Informacje o elemencie
Tabela 112 zawiera informacje o elemencie Zadania .
Tabela 112. Informacje o elemencie Zadania
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w każdym elemencie Page (ten element jest opcjonalny). |
Elementy nadrzędne | Strona |
Spis treści | Zadanie |
Atrybuty elementów
Tabela 113 zawiera listę atrybutów elementu Zadania i zawiera opis każdego z nich.
Tabela 113. Atrybuty i odpowiadające im wartości dla elementu Tasks
Atrybut | Opis |
---|---|
NameTitle | Określa podpis, który jest wyświetlany w górnej części kolumny, który zawiera nazwę zadań na odpowiedniej stronie kreatora. |
StatusTitle | Określa podpis wyświetlany w górnej części kolumny, który zawiera stan zadań na odpowiedniej stronie kreatora. |
Uwagi
Żaden.
Przykład
Żaden.
Moduł sprawdzania poprawności
Ten element określa moduł sprawdzania poprawności kontrolki pola określony w elemencie pola nadrzędnego.
Informacje o elemencie
Tabela 114 zawiera informacje o elemencie Validator .
Tabela 114. Informacje o elemencie modułu sprawdzania poprawności
Atrybut | Wartość |
---|---|
Liczba wystąpień | Zero lub jeden w elemencie Field |
Elementy nadrzędne | Pole |
Spis treści | Setter |
Atrybuty elementów
Tabela 115 zawiera atrybut elementu Validator i zawiera jego opis.
Tabela 115. Atrybuty i odpowiednie wartości dla elementu validator
Atrybut | Opis |
---|---|
Wpisać | Określa typ modułu sprawdzania poprawności, który jest zdefiniowany w bibliotekę DLL zawierającą moduł sprawdzania poprawności |
Uwagi
Żaden.
Przykład
Żaden.
Czarodziej
Ten element określa katalog główny dla wszystkich innych elementów.
Informacje o elemencie
Tabela 116 zawiera informacje o elemencie Kreator .
Tabela 116. Informacje o elemencie Kreatora
Atrybut | Wartość |
---|---|
Liczba wystąpień | Jeden |
Elementy nadrzędne | Brak |
Spis treści | Biblioteki DLL, Strony, StageGroups, Styl |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>