Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Instalacja sterowana przez użytkownika (UDI) pomaga uprościć wdrażanie klienckich systemów operacyjnych Windows®, takich jak Windows 8.1, na komputerach za pomocą funkcji wdrażania systemu operacyjnego (OSD) w programie Microsoft® System Center 2012 R2 Configuration Manager. UDI jest częścią zestawu narzędzi firmy Microsoft do wdrażania (MDT, Deployment Toolkit).
Wprowadzenie
Zazwyczaj podczas wdrażania systemów operacyjnych za pomocą 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 rozpoczęciem wdrażania należy podać wszystkie ustawienia konfiguracyjne.
UDI udostępnia interfejs oparty na kreatorze, który umożliwia podanie informacji o konfiguracji bezpośrednio przed wykonaniem wdrożenia. Takie zachowanie pozwala na tworzenie ogólnych sekwencji zadań OSD, a następnie dostarczanie informacji specyficznych dla komputera w czasie wdrażania, co zapewnia większą elastyczność w procesie wdrażania.
Grupa docelowa
Ten przewodnik jest przeznaczony dla deweloperów, którzy tworzą niestandardowe strony kreatora dla Kreatora UDI i niestandardowe edytory stron kreatorów dla Kreatora UDI Wizard Designer. W tym przewodniku założono, że znasz tworzenie aplikacji systemu Windows przy użyciu:
Język C++, który służy do tworzenia niestandardowych stron kreatora
Microsoft .NET Framework, który służy do tworzenia niestandardowych edytorów stron kreatora
Platforma Windows Presentation Foundation (WPF), która 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
O tym przewodniku
Ten przewodnik zawiera niezbędne informacje referencyjne, które ułatwiają dostosowanie UTI do potrzeb Twojej organizacji. W tym przewodniku nie omówiono zagadnień administracyjnych ani operacyjnych, takich jak instalowanie zestawu MDT (obejmującego kod UDI), konfigurowanie kodu UDI do wdrażania systemów operacyjnych i aplikacji ani wykonywanie wdrożeń przy użyciu Kreatora kodów UDI. Aby uzyskać więcej informacji na ten temat, zobacz tematy dotyczące identyfikatorów UDI w temacie Korzystanie z zestawu narzędzi firmy Microsoft do wdrażania, który jest dołączony do zestawu MDT.
Przegląd rozwoju UDI
Rozwój UDI pozwala rozszerzyć funkcje, które zapewnia UDI. Zazwyczaj opracowywanie kodu UDI jest wymagane, jeśli chcesz zebrać dodatkowe informacje, które są używane przez proces wdrażania kodu UDI. Te dodatkowe informacje są zwykle zapisywane jako zmienne sekwencji zadań, które kroki sekwencji zadań w sekwencji zadań UDI odczytu w programie Configuration Manager.
Architektura UDI
Nadrzędnym celem opracowywania kodu UDI jest tworzenie niestandardowych stron kreatora, które mogą być wyświetlane w Kreatorze kodu UDI. Tworząc niestandardowe strony kreatora, można rozszerzyć istniejące funkcje UDI, aby spełnić wymagania biznesowe i techniczne Twojej organizacji. Na niestandardowej stronie kreatora są zbierane informacje dodatkowe lub zamiast stron kreatora udostępnianych przez interfejs UDI.
Rysunek 1 przedstawia relacje między narzędziami UDI Wizard Designer i UDI Wizard.
Rysunek 1. Relacja między Kreatorem UDI a Kreatorem UDI Designer
Rysunek 1. Relacja między Kreatorem UDI a Kreatorem UDI Designer
Na poziomie koncepcyjnym rozwój UDI obejmuje tworzenie:
Niestandardowe strony kreatora. W Kreatorze UDI są wyświetlane strony kreatora, na których są zbierane informacje wymagane do ukończenia procesu wdrażania. Strony kreatora tworzy się przy użyciu języka C++ w programie Microsoft Visual Studio®. Niestandardowe strony kreatora są implementowane jako biblioteki DLL odczytywane przez Kreatora kodu UDI. Zestaw UDI Software Development Kit (SDK) zawiera przykład tworzenia niestandardowych stron kreatora.
Niestandardowe edytory stron kreatora. Zachowanie niestandardowej strony kreatora można skonfigurować za pomocą edytorów stron kreatora. Edytory stron kreatora niestandardowego są implementowane jako biblioteki DLL odczytywane przez narzędzie UDI Wizard Designer. Edytory stron kreatora tworzy się przy użyciu:
WPF w wersji 4.0
Microsoft Prism w wersji 4.0
Microsoft Unity Application Block (Unity) w wersji 2.1
Zestaw MDT zawiera wszystkie zestawy niezbędne do utworzenia niestandardowego edytora stron kreatora do użycia w narzędziu UDI Wizard Designer. Zestaw SDK UDI zawiera przykład tworzenia niestandardowych edytorów stron kreatora.
Ponadto UDI Wizard Designer korzysta z pomocniczych plików konfiguracyjnych edytora stron kreatora. Pliki konfiguracyjne edytora stron kreatora są tworzone w ramach procesu tworzenia niestandardowych stron i edytorów stron kreatora. Kreator UDI tworzy Designer niezbędne informacje XML w pliku konfiguracyjnym Kreatora UDI i odpowiednim pliku .app.
Przygotowywanie środowiska programistycznego UDI
Przed rozpoczęciem tworzenia własnych niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące kroki, aby przygotować środowisko programistyczne UDI:
Przygotuj wymagania wstępne środowiska programistycznego UDI zgodnie z opisem w temacie Przygotowywanie wymagań wstępnych środowiska programistycznego UDI.
Skonfiguruj środowisko programistyczne UDI zgodnie z opisem w sekcji Konfigurowanie środowiska programistycznego UDI.
Sprawdź, czy środowisko projektowe UDI jest poprawnie skonfigurowane zgodnie z opisem w temacie Sprawdzanie środowiska programistycznego UDI.
Przygotowywanie wymagań wstępnych środowiska programistycznego UDI
Aby przygotować wymagania wstępne środowiska programistycznego UDI, wykonaj następujące kroki:
Przygotuj wymagania sprzętowe środowiska programistycznego UDI zgodnie z opisem w temacie Przygotowywanie wymagań wstępnych dotyczących sprzętu środowiska programistycznego UDI.
Przygotuj wymagania dotyczące oprogramowania środowiska programistycznego UDI zgodnie z opisem w sekcji Przygotowywanie wymagań wstępnych dotyczących oprogramowania środowiska programistycznego UDI.
Przygotowywanie wymagań wstępnych dotyczących sprzętu środowiska programistycznego UDI
Wymagania sprzętowe środowiska deweloperskiego UDI to takie same wymagania sprzętowe dla 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 programistycznego UDI
Środowisko programistyczne UDI ma następujące wymagania wstępne dotyczące oprogramowania:
Dowolny system operacyjny Windows obsługiwany przez program Visual Studio 2010 (zalecany jest Windows 7 lub Windows Server ® 2008 R2).
Będziesz potrzebować systemu operacyjnego Windows obsługującego architekturę procesora, dla której chcesz tworzyć programy. Przy użyciu 64-bitowego systemu operacyjnego można opracowywać 32-bitowe i 64-bitowe formaty UDI. Programowanie 32-bitowych plików UDI odbywa się tylko w 32-bitowych systemach operacyjnych. Z tego powodu należy używać 64-bitowego systemu operacyjnego.
Uwaga
Wersje IntelItanium (IA-64) systemu operacyjnego Windows nie są obsługiwane w środowiskach programistycznych 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 w wersji 4.0 (wymagany przez 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żywane do rozszerzania edytorów stron UDI Wizard Designer
Uwaga
Przykładowy kod źródłowy edytorów stron kreatora UDI Wizard Designer jest napisany w języku C#. Zainstaluj język C#, jeśli chcesz użyć przykładowego kodu źródłowego.
Konfigurowanie środowiska programistycznego UDI
Po spełnieniu wymagań wstępnych środowiska programistycznego UDI wykonaj następujące kroki, aby skonfigurować środowisko programistyczne UDI:
Zainstaluj program Visual Studio 2010.
Upewnij się, że zainstalowano język C++ i każdy inny język obsługiwany przez WPF.
Uwaga
Przykładowy kod źródłowy stron edytora UDI Wizard Designer 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 o instalowaniu programu Visual Studio 2010, zobacz Instalowanie programu Visual Studio.
Zainstaluj zestaw MDT.
Aby uzyskać więcej informacji na temat instalowania zestawu MDT, zobacz sekcję "Instalowanie lub uaktualnianie do zestawu MDT" w dokumentacji zestawu MDT Korzystanie z zestawu narzędzi firmy Microsoft do wdrażania.
W Eksploratorze Windows utwórz local_folder (gdzie local_folder dowolny folder znajdujący się na dysku lokalnym na komputerze dewelopera).
Skopiuj folder installation_folder\SDK do local_folder (gdzie installation_folder jest folderem , w którym zainstalowano MDT, a local_folder jest dowolnym folderem znajdującym się na dysku lokalnym na komputerze deweloperskim).
Należy skopiować folder SDK do innej lokalizacji, ponieważ zestaw MDT jest zainstalowany w folderze Program Files, w którym nie można dokonać zapisu bez podwyższonych uprawnień. Skopiowanie folderu zestawu SDK do innej lokalizacji umożliwia modyfikowanie plików w folderze zestawu SDK bez wymagania podwyższonego poziomu uprawnień.
Skopiuj folder installation_folder\Templates\Distribution\Tools do local_folder (gdzie installation_folder jest folderem , w którym zainstalowano zestaw MDT , a local_folder jest folderem utworzonym wcześniej w procesie).
Zmień nazwę folderu local_folder\Tools na local_folder\OSDSetupWizard(gdzie local_folder jest folderem utworzonym wcześniej w procesie).
Po zakończeniu struktura folderów pod local_folder powinna wyglądać podobnie do struktury folderów pokazanej na rysunku 2 (gdzie local_folder jest folderem utworzonym wcześniej w tym procesie , a na rysunku jest pokazany jako UDIDevelopment ).
Rysunek 2. Struktura folderów dla rozwoju UDIRysunek 2. Struktura folderów dla rozwoju UDI
Weryfikowanie środowiska programistycznego UDI
Po skonfigurowaniu środowiska deweloperskiego UDI sprawdź, czy środowisko deweloperskie UDI jest poprawnie skonfigurowane, upewniając się, że przykładowe projekty są poprawnie kompilowane w programie Visual Studio 2010.
Sprawdź, czy środowisko projektowe UDI jest poprawnie skonfigurowane, określając, czy:
Projekt SamplePage jest kompilowany poprawnie zgodnie z opisem w temacie Sprawdzanie, czy projekt SamplePage został poprawnie skompilowany
Projekt SampleEditor jest kompilowany poprawnie zgodnie z opisem w temacie Sprawdzanie, czy projekt SampleEditor jest poprawnie kompilowany
Sprawdzanie, czy projekt SamplePage został poprawnie skompilowany
Projekt SamplePage zawiera przykład tworzenia niestandardowej strony kreatora dla Kreatora UDI. Aby uzyskać więcej informacji na temat projektu SamplePage, zobacz Zapoznaj się z rozwiązaniem SamplePage Visual Studio.
Aby sprawdzić, czy projekt SamplePage został 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 Właściwości.
Zostanie wyświetlone okno dialogowe Strony właściwości strony przykładu .
W oknie dialogowym Strony właściwości przykładowej strony 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 Właściwości konfiguracji/Zdarzenia kompilacji/Zdarzenie po kompilacji.
We właściwościach zdarzenia po skompilowaniu w obszarze wiersza 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 Strony właściwości strony przykładowej wybierz przycisk OK.
Zapisz projekt.
Z menu Debugowanie wybierz pozycję Rozpocznij debugowanie.
Zostanie wyświetlone okno dialogowe Microsoft Visual Studioz informacją, że źródło jest nieaktualne, i z pytaniem, czy chcesz skompilować projekt.
W oknie dialogowym Microsoft Visual Studio wybierz pozycję Tak.
Zostanie wyświetlone okno dialogowe Brak informacji o debugowaniu informujące, że nie są dostępne żadne informacje o debugowaniu dla OSDSetupWizard.exe.
W oknie dialogowym Bez informacji o debugowaniu wybierz pozycję Tak.
Zostanie otwarty Kreator UDI z wyświetloną stroną kreatora niestandardowego.
Sprawdź, czy możesz wybrać wartość w polu Wybierz swoją lokalizację.
W kreatorze z formularzem przykładowej strony wybierz pozycję Anuluj.
Zostanie wyświetlone okno dialogowe Kreatora anulowania .
W oknie dialogowym Kreator anulowania wybierz przycisk Tak.
Zamknij program Visual Studio 2010.
Sprawdzanie, czy projekt SampleEditor jest poprawnie kompilowany
Projekt SampleEditor zawiera przykład tworzenia niestandardowego edytora stron kreatora dla UDI Wizard Designer. Aby uzyskać więcej informacji na temat projektu SampleEditor, zobacz Przegląd rozwiązania SamplePage Visual Studio.
Aby sprawdzić, czy projekt SampleEditor jest kompilowany poprawnie
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 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 lokalizacji 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 zaznaczyć wiele plików na karcie Przeglądanie , przytrzymując naciśnięty klawisz CTRL podczas zaznaczania plików.
W Eksplorator rozwiązań przejdź do SampleEditor/References.
Sprawdź, czy żadne z odwołań nie zawiera ostrzeżeń ani błędów.
In Eksplorator rozwiązań, right-click the SampleEditor project, and then select Properties.
Zostanie wyświetlone okno dialogowe Przykładowe strony właściwości .
W oknie dialogowym Przykładowe strony właściwości wybierz kartę Debugowanie .
Na karcie Debugowanie wybierz pozycję Uruchom program zewnętrzny.
W oknie Uruchom program zewnętrzny wpisz installation_folder\Bin\UDIDesigner.exe (gdzie installation_folder jest folderem, w którym zainstalowano zestaw MDT), a następnie wybierz przycisk OK.
Porada
Możesz wybrać przycisk wielokropka (...), aby przejść do folderu, a następnie wybierz pozycję UDIDesigner.exe.
Z menu Plik wybierz polecenie 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, a installation_folder jest folderem, w którym zainstalowano MDT).
W programie Visual Studio 2010 z menu Debugowanie wybierz pozycję Rozpocznij debugowanie.
Zostanie uruchomiony kreator UDI Wizard Designer.
W UDI Wizard Designer, na Wstążce wybierz pozycję Otwórz.
Zostanie wyświetlone okno dialogowe Otwieranie .
W oknie dialogowym Otwieranie otwórz plik local_folder\SDK\SamplePage\SamplePage\Config.xml (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 w polu Lokalizacja , w tym następujące:
Przycisk Odblokowane, za pomocą którego można włączyć lub wyłączyć pole Lokalizacja
Pole Wartość domyślna, w którym wprowadza się wartość domyślną, która ma być wyświetlana w polu Lokalizacja
Przyjazna nazwa wyświetlana widoczna na stronie podsumowania, w której należy wprowadzić podpis dla informacji wyświetlanych na stronie podsumowania
Pole listy Lokalizacja zawierające listę możliwych lokalizacji
Zamknij narzędzie UDI Wizard Designer.
Zamknij program Visual Studio 2010.
Przegląd przykładów zestawu UDI SDK
Przed rozpoczęciem programowania zapoznaj się z przykładami podanymi w zestawie SDK UDI. Skorzystaj z informacji w tym przewodniku i kodu źródłowego w przykładach, aby łatwiej utworzyć własne niestandardowe strony kreatora UDI i edytory stron kreatora.
Zapoznaj się z przykładami zestawu SDK UDI, przeglądając:
Zawartość folderu zestawu SDK, który został skopiowany wcześniej w procesie instalacji zgodnie z opisem w sekcji Przeglądanie zawartości folderu zestawu SDK
Przykład niestandardowej strony kreatora UDI zgodnie z opisem w temacie Przeglądanie rozwiązania SamplePage dla programu Visual Studio
Przykład niestandardowego edytora stron kreatora UDI zgodnie z opisem w artykule Przeglądanie przykładowego edytora Rozwiązanie programu Visual Studio
Przejrzyj zawartość folderu SDK
Podczas konfigurowania środowiska deweloperskiego UDI skopiowano folder SDK z folderu, w którym zainstalowano zestaw MDT, do innego utworzonego folderu. Tabela 1 zawiera listę folderów znajdujących się bezpośrednio pod folderem SDK oraz krótki opis każdego z nich.
Tabela 1. Foldery w zestawie SDK UDI
| Folder | Ten folder zawiera |
|---|---|
| Wliczone w cenę | Pliki nagłówkowe języka C++ niezbędne do tworzenia niestandardowych stron kreatora dla Kreatora UDI |
| Biblioteki Libs | Pliki biblioteki języka C++, które zostaną połączone ze stroną niestandardową; Istnieją 32-bitowe i 64-bitowe wersje bibliotek dołączanych statycznie. Uwaga: Wersje włoskie bibliotek (IA-64) nie są dostępne. |
| Przykładowy edytor | Projekt programu Visual Studio służący do tworzenia edytora niestandardowego używanego do edycji strony SamplePage w UDI Wizard Designer, który jest napisany w języku C# |
| Przykładowa strona | Projekt programu Visual Studio do tworzenia niestandardowej strony kreatora UDI, która jest napisana w Visual C++ |
Zapoznaj się z rozwiązaniem SamplePage dla programu Visual Studio
Przed rozpoczęciem tworzenia niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące zadania, aby przygotować środowisko programistyczne UDI:
Etapy cyklu życia strony kreatora UDI opisano w sekcji Przeglądanie cyklu życia strony kreatora.
Zapoznaj się z rozwiązaniem programu Visual Studio dla przykładu SamplePage w zestawie SDK UDI zgodnie z opisem w temacie Przeglądanie przykładu SamplePage.
Przeglądanie cyklu życia strony kreatora
Strona kreatora UDI zawiera metody odpowiadające poszczególnym etapom (fazom) cyklu życia strony. W ramach tworzenia niestandardowej strony kreatora musisz zastąpić te metody kodem. Tabela 2 zawiera listę metod, które trzeba zastąpić, i krótki opis każdej metody, w tym informacje o tym, kiedy należy jej używać 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 który należy wykonać tylko raz. Tej metody należy na przykład użyć do inicjalizacji pól lub odczytania informacji o konfiguracji z elementów Setter w pliku konfiguracyjnym Kreatora UDI. |
| OnWindowShown | Ta metoda jest wywoływana za każdym razem, gdy strona jest wyświetlana (pokazywana) w Kreatorze UDI. Jest ona nazywana pierwszym wyświetleniem strony i za każdym razem, gdy przejdziesz do tej 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 aktualizowanie strony na podstawie wszelkich zmian tych zmiennych. |
| OnCommonControlEvent | Metodę tę można wywołać zawsze, gdy strona kreatora jest wyświetlana i odbiera komunikat WM_NOTIFY od elementu podrzędnego (zazwyczaj typowe kontrolki). W przypadku tej metody napisz kod, który obsługuje WM_NOTIFY na podstawie wiadomości z powiadomieniem. Może na przykład być wymagane reagowanie na zdarzenia z poziomu kontrolki ogólnej, na przykład odpowiadanie na zdarzenia wyboru lub dwukrotnego kliknięcia kontrolki TreeView . |
| OnUnhandledEvent | Ta metoda jest wywoływana za każdym razem, gdy na stronie kreatora pojawia się komunikat o nieobsłużonym oknie. Ta metoda umożliwia przechwycenie i obsługę tych nieobsługiwanych komunikatów okna. W przypadku tej metody napisz kod obsługujący komunikaty okien związane ze stroną kreatora. Zazwyczaj nie trzeba zastępować tej metody. |
| OnNextSelected | Ta metoda jest wywoływana po wybraniu pozycji Dalej w kreatorze. W przypadku tej metody napisz kod, który wykona wszystkie niezbędne akcje przed przejściem do następnej strony kreatora — na przykład sprawdzenie poprawności, która może zająć dużo czasu. Jeśli sprawdzanie poprawności zakończy się niepowodzeniem, możesz anulować następne żądanie i wyświetlić komunikat. |
| OnWindowHidden | Ta metoda jest wywoływana za każdym razem, gdy strona jest ukryta, gdy jest pokazana poprzednia lub następna strona kreatora. W przypadku tej metody napisz kod, który wykonuje wszystkie akcje przed ukryciem strony, przed wyświetleniem innej strony. Zazwyczaj nie trzeba zastępować tej metody. |
Zapoznaj się z przykładowym SamplePage
Przejrzyj przykład SamplePage, korzystając z poniższej listy, która reprezentuje sekwencję zdarzeń podczas cyklu życia strony kreatora dla przykładu SamplePage:
Kreator UDI OSDSetupWizard.exe odczytuje informacje o konfiguracji z pliku konfiguracyjnego 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 konfiguracyjnym Kreatora UDI, zgodnie z opisem w kroku 2: Kreator UDI ładuje bibliotekę DLL dla niestandardowej strony kreatora.
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, wykonaj wszelkie niezbędne zadania przed wybraniem przycisku Dalej , aby przejść do następnego kreatora zgodnie z opisem w kroku 4: Przycisk Dalej jest zaznaczony na stronie Kreator niestandardowy.
Krok 1. Kreator UDI (OSDSetupWizard.exe) odczytuje plik Config.xml
Po uruchomieniu Kreatora UDI (OSDSetupWizard.exe) domyślnie odczytuje on plik konfiguracyjny Kreatora UDI, który jest plikiem UDIWizard_Config.xml — podstawowym plikiem konfiguracyjnym dla Kreatora UDI.
Uwaga
W przykładzie jako pliku konfiguracji użyto pliku Config.xml. W zestawie MDT domyślnym plikiem konfiguracji jest plik UDIWizard_Config.xml, który znajduje się w folderze Scripts w pakiecie MDT Files konfiguracji.
Możesz zastąpić domyślny plik konfiguracji używany przez Kreatora UDI, 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 to:
-
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 bibliotek DLL w poszukiwaniu plików .dll do załadowania. W tym przykładzie są wymienione dwa pliki .dll: SamplePage.dll i SharedPages.dll. Te pliki .dll muszą znajdować się w tym samym folderze co OSDSetupWizard.exe — w folderze Narzędzia\platforma (gdzie platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej).
Kreator UDI skanuje element Strony w poszukiwaniu zdefiniowanych stron. W tym przykładzie zdefiniowano dwie strony: Niestandardowa i Strona podsumowania. Atrybut Type 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 mogą zostać utworzone w przyszłości:
Nazwa organizacji zamiast nazwy Microsoft.
Nazwa projektu w miejsce SamplePage.
Nazwa niestandardowej strony kreatora zamiast nazwy LocationPage.
Krok 2. Kreator UDI ładuje bibliotekę DLL dla niestandardowej strony kreatora
Gdy Kreator UDI ładuje bibliotekę DLL, wywołuje funkcję RegisterFactories , która musi zostać zaimplementowana w pliku .dll. W przykładzie ta funkcja jest zaimplementowana w pliku dllmain.ccp. Każda utworzona strona kreatora musi implementować funkcję RegisterFactory .
Funkcja RegisterFactories służy do rejestrowania klasy fabryki na stronie kreatora w rejestrze fabryki klas dla Kreatora UDI. Fabryki klas to klasy, które mogą tworzyć instancje innych klas. Funkcja RegisterFactories tworzy nowe wystąpienie klasy fabryki i przekazuje tę klasę do rejestru fabryki klas dla Kreatora UDI, który udostępnia tę klasę fabryki kreatorowi. Kreator UDI wyszukuje klasę fabryki zarejestrowaną z identyfikatorem zgodnym z atrybutem Type elementu Page dla niestandardowej strony kreatora.
W tym przykładzie identyfikator jest zdefiniowany jako ID_Location w pliku PageClassIds.h jako Microsoft.SamplePage.LocationPage, co jest zgodne z atrybutem Type elementu Page w pliku Config.xml. ID_Location jest przekazywany jako parametr w funkcji RegisterFactories zaimplementowanej w pliku dllmain.ccp.
Możesz utworzyć funkcję przy użyciu szablonu funkcji Register_name , aby uprościć tworzenie nowej instancji fabrycznej i zarejestrować nowo utworzoną instancję. Wartość nazwy dostarczana za pomocą szablonu funkcji Register musi implementować interfejs iClassFactory . Klasa ClassFactoryImpl obsługuje większość szczegółów dotyczących implementowania fabryki klas.
Możesz również użyć funkcji RegisterFactories do rejestrowania typów zadań i typów walidatorów. Aby uzyskać więcej informacji, zobacz następujące artykuły:
Uwaga
Przykład zawiera i rejestruje tylko jedną stronę kreatora niestandardowego. Przykład nie zawiera niestandardowych zadań ani walidatorów, a więc nie rejestruje żadnych niestandardowych zadań ani walidatorów.
Krok 3. Kreator UDI wyświetla stronę kreatora niestandardowego
Niestandardowa strona kreatora w przykładzie jest zdefiniowana w pliku LocationPage.cpp. Strony kreatora są pochodnymi klas szablonów, które udostępniają wiele funkcji stron. Wszystkie strony kreatora powinny pochodzić z klasy szablonu WizardPageImpl, która implementuje interfejs IWizardPage. Na każdej stronie kreatora można 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ą pomóc w pisaniu niestandardowych stron kreatora. Zaimplementuj klasę szablonu WizardPageImpl jako klasę bazową dla niestandardowej strony kreatora.
Aby uzyskać listę dostępnych:
Klasy szablonów dla stron kreatora, zobacz Klasy pomocnika strony kreatora
Interfejsy klas szablonów stron kreatora, zobacz Interfejsy stron kreatora
Niestandardowa strona kreatora w przykładzie pochodzi z klasy szablonu WizardPageImpl i implementuje interfejs IWizardPage. Ponadto na niestandardowej stronie kreatora implementuje się interfejs wywołania zwrotnego pola JE. 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:
DodajPole. Ta metoda wiąże kontrolkę pola IDC_COMBO_LOCATION w zasobie IDD_LOCATION_PAGE z elementem danych o nazwie Location w pliku Config.xml.
Oprócz metody AddField można użyć metod AddRadioGroup i AddToGroup w celu obsługi innych kontrolek i zachowań.
Uwaga
Przed wywołaniem metody InitFields należy wywołać metodę AddField, AddRadioGroup lub AddToGroup.
Pola początkowe. Ta metoda służy do inicjowania pól (kontrolek) dodanych do formularza. Wskaźnik strony jest parametrem. W tym przykładzie przekazywany jest ten wskaźnik, który odwołuje się do bieżącej strony.
Uwaga
Aby obsługiwać korzystanie z tego wskaźnika, należy zaimplementować interfejs IFieldCallback oprócz interfejsów obsługiwanych przez klasę szablonu WizardPageImpl .
Interfejs wywołania zwrotnego IFieldCallback wywołuje metodę SetFieldDefault , która służy do ustawiania wartości domyślnych dla kontrolek innych niż kontrolki pól tekstowych i pól wyboru. W tym przykładzie metoda SetFieldDefault ustawia indeks początkowy kontrolki pola kombi na podstawie wartości domyślnej określonej w elemencie Default dla elementu Field w pliku Config.xml.
Metoda OnWindowCreated konfiguruje kontroler formularza przy użyciu interfejsu IFormController. Aby uzyskać więcej informacji na temat konfigurowania kontrolera formularza, zobacz Konfigurowanie formularza.
Lokalizacje początkowe. Ta metoda wypełnia pole kombi na podstawie listy lokalizacji w pliku Config.xml. Element Data i podrzędne elementy elementu DataItem z pliku Confg.xml zawierają listę możliwych wartości.
NaNastępnyWybrane. Ta metoda służy do wykonywania następujących zadań:
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. Przycisk Dalej jest zaznaczony na stronie kreatora niestandardowego
Gdy użytkownik uzupełni pola na stronie kreatora niestandardowego, wybierze przycisk Dalej, co spowoduje wywołanie metody OnNextSelected . Metoda OnNextSelected wykonuje wszystkie niezbędne zadania przed przejściem do następnej strony kreatora, takie jak rejestrowanie wszelkich zmian konfiguracji wprowadzonych na niestandardowej stronie kreatora.
W przypadku przykładowej niestandardowej strony kreatora zastąpienie metody OnNextSelected jest zaimplementowane w pliku LocationPage.ccp. W metodzie OnNextSelected na przykładowej stronie kreatora niestandardowego są wywoływane następujące metody:
Sekcja inicjowania. Ta metoda inicjuje nagłówek (podpis etykiety) danych podsumowania wyświetlanych na stronie Podsumowanie. Zazwyczaj tę wartość można ustawić za pomocą funkcji DisplayName(). Dane skojarzone z tym podpisem 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 dla programu Visual Studio
Przed rozpoczęciem tworzenia własnych niestandardowych stron kreatora i edytorów stron kreatora wykonaj następujące kroki, aby przygotować środowisko programistyczne UDI:
Przejrzyj architekturę narzędzia UDI Wizard Designer zgodnie z opisem w artykule Przegląd architektury UDI Wizard Designer.
Przejrzyj składniki strony Kreatora UDI, które można dostosować za pomocą pliku konfiguracyjnego Kreatora UDI, zgodnie z opisem w sekcji Przeglądanie konfigurowalnych składników strony Kreatora UDI.
Zapoznaj się z przykładem EditorPage podanym w zestawie SDK UDI zgodnie z opisem w temacie Przeglądanie przykładu EditorPage .
Przejrzyj architekturę UDI Wizard Designer
UDI Wizard Designer został opracowany przy użyciu WPF, Prism i Unity. Designer UDI służy do edycji pliku konfiguracyjnego Kreatora UDI (UDIWizard_Config.xml), który Kreator UDI (OSDSetupWizard.exe) odczytuje w czasie wykonywania. Element Pages w pliku konfiguracyjnym Kreatora UDI zawiera listę stron, która zawiera oddzielny element Page dla każdej strony kreatora.
Podczas edytowania ustawień konfiguracji strony kreatora narzędzie UDI Wizard Designer ładuje niestandardowy edytor stron odpowiadający typowi strony kreatora. Edytory stron kreatora niestandardowego są opracowywane jako kontrolki użytkownika WPF. Strony edytora stron kreatora niestandardowego używają wzorca projektowego Model-View-ViewModel (MVVM) dla WPF.
Wzorzec projektowy MVVM pomaga oddzielić interfejs użytkownika (UI; prezentacja) od prezentowanych danych. Dane są fasadą nad elementem Page w pliku konfiguracyjnym Kreatora UDI (pliku Config.xml w przykładzie), do którego dostęp uzyskuje się za pomocą właściwości CurrentPage interfejsu IDataService .
Kreator UDI Designer używa 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 interjectionu zależności w środowisku Unity, zobacz Inject some life into your Applications — Getting to About the Unity Application Block (Wstrzyknięcie życia do aplikacji — poznaj blok aplikacji aparatu Unity).
Przegląd konfigurowalnych składników strony kreatora UDI
Podczas tworzenia niestandardowej strony kreatora niektóre ustawienia konfiguracyjne mogą zostać skonfigurowane w kodzie i nie będzie można ich zmienić po skompilowaniu strony. Jednak w przypadku innych ustawień konfiguracji należy zezwolić na zmianę tych ustawień za pomocą narzędzia UDI Wizard Designer.
Zazwyczaj ustawienia konfiguracyjne, które mają zostać skonfigurowane za pomocą Designer Kreatora UDI, są zapisywane w pliku konfiguracyjnym Kreatora UDI (pliku Config.xml w przykładzie). W razie potrzeby możesz jednak również utworzyć własny oddzielny plik konfiguracyjny. Jednym z przykładów użycia oddzielnego pliku konfiguracji jest plik UDIWizard_Config.xml.app, z którego korzysta zadanie odnajdywania aplikacji i typ strony kreatora ApplicationPage .
Poniżej przedstawiono listę typowych ustawień konfiguracji, którymi można zarządzać przy użyciu narzędzia UDI Wizard Designer:
Pole. Pola umożliwiają użytkownikom wprowadzanie danych wejściowych. Pola są wyświetlane jako elementy pól w pliku konfiguracyjnym Kreatora UDI (UDIWizard_Config.xml), który zawiera ustawienia konfiguracyjne dla każdego pola. Odpowiedni edytor strony kreatora musi zapewnić metodę edycji ustawień konfiguracji pola dla pola za pomocą kontrolki FieldElementControl.
Właściwości. Ustawianie pomaga tworzyć właściwości elementów na stronie, takich jak strony w elemencie Page , pola w elemencie Field lub dane w elementach Data lub DataItem . Właściwości konfiguruje się w elementach Setter . Dodaj osobny element Setter dla każdej właściwości, którą chcesz zdefiniować. Właściwości można edytować za pomocą kontrolki ustawiającej i konfigurować inne elementy ustawiające za pomocą innych kontrolek.
Dane. Dane służą do przechowywania informacji, które mogą być używane przez stronę kreatora i inne składniki. Dane dla stron lub pól można definiować przy użyciu elementów Data lub DataItem . Dane mogą być zdefiniowane w strukturze płaskiej lub hierarchicznej poprzez odpowiednie użycie elementów Data lub DataItem . W Config.xml w przykładzie w zestawie SDK pokazano, jak zbudować płaskie struktury danych.
Utworzony edytor stron kreatora niestandardowego musi mieć możliwość zarządzania tymi ustawieniami konfiguracji.
Zapoznaj się z przykładem EditorPage
Przykład EditorPage służy do konfigurowania ustawień konfiguracji dla strony kreatora SamplePage w pliku konfiguracyjnym Kreatora UDI. Przykład EditorPage ma następujące podstawowe składniki:
Interfejs użytkownika umożliwiający skonfigurowanie ustawień pola kombi Lokalizacja
interfejsu użytkownika umożliwiającego dodanie lub edytowanie lokalizacji na liście możliwych lokalizacji, które są wyświetlane w polu kombi Lokalizacja
Ustawienia konfiguracji wczytane z pliku konfiguracyjnego Kreatora UDI i zapisane w nim
Kod pomocniczy dla innych składników
Przejrzyj przykład EditorPage w programie Visual Studio, wykonując następujące kroki:
Sprawdź, jak edytor stron kreatora SampleEditor jest ładowany i inicjowany w UDI Wizard Designer, zgodnie z opisem w sekcji Ładowanie i inicjowanie edytora stron Kreatora recenzji.
Przejrzyj interfejs użytkownika używany do edycji pola kombi Lokalizacja w pliku LocationPageEditor.xaml i LocationPageEditor.xaml.cs zgodnie z opisem w artykule Przeglądanie interfejsu użytkownika używanego do konfigurowania pola kombi Lokalizacja.
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 sekcji 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 sekcji Przeglądanie kodu używanego do zarządzania informacjami o konfiguracji.
Ładowanie i inicjowanie edytora stron w Kreatorze recenzji
Edytory stron kreatora niestandardowego są ładowane zgodnie z wymaganiami narzędzia UDI Wizard Designer. Pliki konfiguracyjne UDI Wizard Designer są ładowane po uruchomieniu UDI Wizard Designer. Kreator UDI Designer skanuje folder install_folder\Bin\Config (gdzie install_folder jest nazwą folderu, w którym zainstalowano zestaw MDT) w poszukiwaniu plików mających .config rozszerzenie pliku.
Podczas konfiguracji środowiska programistycznego UDI skopiowano plik SamplePage.dll.confg do folderu install_folder\Bin\Config. Po uruchomieniu Designer Kreatora UDI zostanie znaleziony i załadowany plik SamplePage.dll.confg.
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. Ten plik DLL należy umieścić w tym samym folderze co plik UDIDesigner.exe, czyli w folderze install_folder\Bin (gdzie install_folder jest nazwą folderu , w którym zainstalowano zestaw MDT).
DesignerType. Ten atrybut jest nazwą typu platformy Microsoft .NET klasy, która zawiera kontrolkę użytkownika WPF.
Wpisz. Ten atrybut służy do konfigurowania typu strony kreatora niestandardowego, która jest ładowana przez Kreatora UDI. Kreator UDI Wizard Designer używa tego atrybutu do lokalizowania odpowiedniego elementu Page w pliku konfiguracyjnym UDI Wizard.
Biblioteka DLL. Ten atrybut służy do konfigurowania elementu DLL w pliku konfiguracyjnym UDI Wizard, który tworzy UDI Wizard Designer.
opis. Ten atrybut służy do dostarczania informacji o edytorze stron kreatora. Wartość tego atrybutu jest wyświetlana w oknie dialogowym Dodawanie nowej strony w narzędziu UDI Wizard Designer, które służy do dodawania strony kreatora do folderu "Biblioteka stron".
DisplayName (Nazwa wyświetlana). Ten atrybut powinien zawierać nazwę strony kreatora niestandardowego wyświetlanej w narzędziu UDI Wizard Designer. Wartość tego atrybutu jest wyświetlana w oknie dialogowym Dodawanie nowej strony w narzędziu UDI Wizard Designer, które służy do dodawania strony kreatora do folderu "Biblioteka stron".
W tym przykładzie typ niestandardowej strony kreatora SamplePage to Microsoft.SamplePage.LocationPage, który jest zapisany w pliku Config.xml. Plik Config.xml znajduje się w folderze local_folder\SDK\SamplePage\SamplePage do (gdzie local_folder jest folderem utworzonym na komputerze deweloperskim wcześniej w procesie konfiguracji).
Przejrzyj interfejs użytkownika używany do konfigurowania pola kombi Lokalizacja
Po załadowaniu i zainicjowaniu edytora stron kreatora edytor stron kreatora SampleEditor jest ładowany, gdy jest edytowana strona o typie Microsoft.SamplePage.LocationPage . Interfejs użytkownika edytora strony jest przechowywany w pliku LocationPageEditor.xaml.
Przeglądając interfejs użytkownika na karcie Projektowanie i kod na karcie XAML , można zobaczyć relacje 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ę on 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 przykładowym edytorze stron z informacjami zawartymi w pliku konfiguracyjnym kreatora UDI. Na przykład poniższy kod wiąże pole tekstowe Wartość domyślna z elementem Default w pliku konfiguracyjnym kreatora UDI (Config.xml w przykładzie):
<TextBox Text="{Binding FieldData.DefaultValue,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
Aby uzyskać więcej informacji, zobacz Porady: 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 danych o nazwie Location w pliku konfiguracyjnym UDI.
Przejrzyj interfejs użytkownika używany do modyfikowania listy możliwych lokalizacji
Interfejs użytkownika umożliwiający modyfikowanie 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 przyciski wstążki służące do modyfikowania listy lokalizacji
Okno dialogowe inicjowane po wybraniu opcji dodania lub edytowania elementu na liście lokalizacji, zgodnie z opisem w sekcji Przeglądanie okna dialogowego służącego do dodawania lub edytowania lokalizacji
Przegląd menu kontekstowego i przycisków wstążki służących do modyfikowania listy lokalizacji
Po kliknięciu prawym przyciskiem myszy pola listy, które zawiera listę lokalizacji, zostanie wyświetlone menu kontekstowe. Na Wstążce znajdują się odpowiednie przyciski umożliwiające wykonywanie tych samych zadań. Element kontrolny Views:CollectionsTControl w pliku LocationPageEditor.xaml definiuje wywoływane metody na podstawie podjętej akcji i ustawionych właściwości w następujący sposób:
SelectedItem. Ta właściwość powiązana z danymi zostaje uaktywniona, gdy użytkownik wybierze element z listy. Ta właściwość jest powiązana z właściwością CurrentLocation w modelu widoku, który znajduje się w pliku LocationPageEditorViewModel.cs i jest używany przez kontrolkę CollectionTControl do przekazywania elementu wybranego podczas edytowania lub usuwania istniejącego elementu.
Akcja dodania elementu. Ta akcja jest wykonywana, gdy użytkownik wybierze opcję Dodaj element z menu kontekstowego lub odpowiadających jej przycisków na Wstążce. Istnieje powiązanie danych z właściwością w modelu widoku, która zwraca obiekt AddLocationAction . Ten obiekt to metoda AddLocationCallback , znajdująca się w pliku LocationPageEditorViewModel.cs i wyświetlająca 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óra zwraca obiekt EditLocationAction . Ten obiekt to metoda EditLocationCallback , znajdująca się w pliku LocationPageEditorViewModel.cs i wyświetlająca okno dialogowe w pliku AddEditLocationView.xaml.
UsuńAkcję. 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óra zwraca obiekt RemoveAction . Ten obiekt to metoda EditLocationCallback znajdująca się w pliku LocationPageEditorViewModel.cs i wyświetlająca komunikat potwierdzający usunięcie lokalizacji.
Przejrzyj okno dialogowe umożliwiające dodanie lub edytowanie lokalizacji
Jeśli dodasz nową lokalizację do listy lokalizacji lub edytujesz istniejącą, zostanie wyświetlony komunikat znajdujący się w pliku AddEditLocationView.xaml. Komunikat jest wyświetlany przy użyciu metody ShowDialogWindow window w pliku LocationPageEditorViewModel.cs.
Interfejs użytkownika w pliku AddEditLocationView.xaml składa się z następujących elementów:
Ramkę okna dialogowego o nazwie Ramka dialogowa, która zawiera następujące elementy:
Tytuł, który konfiguruje się za pomocą atrybutu DialogTitle ramki okna dialogowego
Przycisk OK, który ustawia stan zwracany jak dla właściwości Approved na wartość True (stan zwracany jest sprawdzany w metodzie AddLocationCallback w pliku LocationPageEditorViewModel.cs w celu określenia, czy użytkownik wybrał przycisk OK).
Przycisk Anuluj , który ustawia stan zwracany jak dla właściwości Approved na False (stan zwracany jest sprawdzany w metodzie AddLocationCallback w pliku LocationPageEditorViewModel.cs w celu określenia, czy użytkownik wybrał opcję Anuluj).
Element WPF zawierający następujące elementy:
Etykieta, którą konfiguruje się za pomocą atrybutu Content
Pole tekstowe, które jest powiązane z elementem Dane o nazwie Lokalizacja w pliku konfiguracyjnym UDI (pliku Config.xml w przykładzie)
Przejrzyj kod używany do zarządzania informacjami o konfiguracji
Informacje o konfiguracji dla niestandardowej strony kreatora są przechowywane w pliku konfiguracyjnym Kreatora UDI, który jest:
Config.xml plik w przykładzie dostarczonym z zestawem SDK UDI (Ten plik zawiera tylko ustawienia konfiguracyjne dla przykładu).
UDIWizard_Config.xml plik dostarczony z zestawem MDT, przechowywany w folderze installation_folder\Templates\Distribution\Scripts (gdzie installation_folder jest folderem , w którym zainstalowano MDT); Ten plik zawiera ustawienia konfiguracyjne dla wszystkich wbudowanych stron i etapów kreatora
W przykładzie SampleEditor procedura Locations pomaga zarządzać informacjami o konfiguracji i znajduje się w pliku LocationPageEditorViewModel.cs. Procedura Lokalizacje zwraca listę lokalizacji z pliku konfiguracyjnego Kreatora UDI. W szczególności zwrócona lista zawiera element dla każdego elementu DataItem w pliku konfiguracji Kreatora UDI.
Tworzenie niestandardowych stron kreatora UDI
Ogólny proces tworzenia niestandardowych stron kreatora UDI jest następujący:
Utwórz kopię rozwiązania SamplePage jako punkt początkowy.
Umieść odpowiednie kontrolki (pola) w formularzu.
Napisz kod, aby wykonać odpowiednie zadania podczas ładowania strony kreatora (zastępuje metodę OnWindowCreated ), w tym następujące kroki:
Zainicjuj formularz.
Odczyt zmiennych pamięci, zmiennych sekwencji zadań, zmiennych środowiskowych lub informacji o plikach XML (takich jak właściwości Seter ).
Napisz dowolny kod, aby wykonać odpowiednie zadania, gdy strona jest wyświetlana (zastępuje metodę OnWindowShown ), w tym następujące kroki:
Włącz lub wyłącz kontrolki na podstawie informacji odczytanych podczas ładowania strony w kroku 3.
Aktualizowanie kontrolek na podstawie informacji przeczytanych po załadowaniu strony w kroku 3, na przykład populacji 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ę Next w Kreatorze UDI (zastępuje OnNextSelected metodę), w tym następujące kroki:
Zaktualizuj wszystkie zmienne pamięci, zmienne sekwencji zadań, zmienne środowiskowe lub informacje o plikach XML.
Aktualizowanie informacji na stronie podsumowania (jeśli nie są wykonywane przez pola na stronie).
Skompiluj rozwiązanie.
Upewnij się, że wersja tworzonej biblioteki DLL jest tej samej platformy procesora, co instalacja zestawu MDT, a konkretnie platformy procesora dla środowiska preinstalacyjnego 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 uruchomić w 32-bitowych lub 64-bitowych systemach operacyjnych Windows. Jednak w 64-bitowych systemach operacyjnych Windows można uruchomić tylko 64-bitowe wersje strony kreatora.
Środowisko Windows PE na komputerze docelowym. Środowisko Windows PE nie obsługuje uruchamiania aplikacji 32-bitowych w 64-bitowej wersji środowiska Windows PE. Dlatego musisz mieć wersję strony kreatora dla każdej architektury procesora w środowisku Windows PE, której zamierzasz używać.
Skopiuj bibliotekę DLL z niestandardowej strony kreatora do folderu platformy installation_folder\Templates\Distribution\Tools\ (gdzie installation_folder jest folderem, w którym zainstalowano zestaw MDT , a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej).
Wykonaj kroki tworzenia niestandardowego edytora stron.
Tworzenie niestandardowych edytorów stron kreatora
Wysokopoziomowy proces 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 strony głównej w pliku .xaml.
Dodaj wystąpienia kontrolki FieldElementControl zgodnie z wymaganiami strony kreatora, która ma zostać skonfigurowana (jeśli jest to wymagane).
Dodaj wystąpienia kontrolki SetterControl zgodnie z wymaganiami strony kreatora, która ma zostać skonfigurowana (jeśli jest to wymagane).
Dodaj wystąpienia kontrolki CollectionTControl zgodnie z wymaganiami na stronie kreatora, która ma zostać skonfigurowana (jeśli jest to wymagane).
Dodaj interfejs usługi IDataService .
Napisz odpowiedni kod, aby zaktualizować plik konfiguracyjny Kreatora UDI na podstawie ustawień konfiguracyjnych, które mają zostać skonfigurowane za pomocą niestandardowego edytora stron kreatora.
Utwórz podrzędne okna dialogowe w pliku .xaml i wywołaj je z edytora strony podstawowej przy użyciu interfejsu IMessageBoxService zgodnie z wymaganiami strony kreatora, która ma zostać skonfigurowana.
Dodaj odpowiednie interfejsy do wstążki UDI Wizard Designer zgodnie z wymaganiami strony kreatora, która ma zostać skonfigurowana.
Skompiluj rozwiązanie.
Uwaga
Upewnij się, że wersja tworzonej biblioteki DLL jest tej samej platformy procesora, co instalacja zestawu MDT. Jeśli na przykład zainstalujesz 64-bitową wersję zestawu MDT, skompiluj 64-bitową wersję niestandardowego edytora stron.
Utwórz plik konfiguracyjny Kreatora UDI Designer, aby załadować niezbędne biblioteki DLL i zamapować edytor stron kreatora z odpowiednią stroną kreatora (plikiem SamplePage.dll.config w przykładzie).
Aby uzyskać więcej informacji na temat elementów wymaganych do wykonania mapowania między stroną kreatora a edytorem stron kreatora, zobacz element DesignerMappings , elementy podrzędne i odpowiednie atrybuty.
Skopiuj utworzony w poprzednim kroku plik konfiguracji Kreatora UDI Designer do folderu installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano wersję zestawu MDT).
Skopiuj bibliotekę DLL niestandardowego edytora stron kreatora do folderu installation_folder\Bin (gdzie installation_folder jest folderem , w którym zainstalowano MDT).
Tworzenie niestandardowych zadań UDI
Zadania UDI to biblioteki DLL napisane w języku C++, które implementują interfejs ITask. Aby zarejestrować bibliotekę DLL w Kreatorze UDI Designer bibliotece zadań, należy utworzyć plik konfiguracyjny Kreatora UDI Designer (plik .config) i umieścić go w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano zestaw MDT).
Uwaga
Możesz utworzyć bibliotekę DLL zawierającą strony kreatora, zadania i walidatory w tym samym pliku .dll. Możesz również utworzyć pojedynczy plik konfiguracyjny Kreatora UDI Designer (.config), który zawiera ustawienia konfiguracyjne dla stron kreatora, zadań i walidatorów w bibliotece DLL.
Aby utworzyć niestandardowe zadania UDI
Napisz kod, który implementuje interfejs ITask oraz następujące metody:
Inicjowanie. Ta metoda służy do inicjowania zadania.
Wykonaj. Ta metoda jest wywoływana w celu uruchomienia zadania.
Napisz kod, który rejestruje fabrykę niestandardowych klas zadań w rejestrze fabrycznym.
Utwórz rozwiązanie dla zadania niestandardowego.
Uwaga
Upewnij się, że wersja tworzonej biblioteki DLL jest tej samej platformy procesora, co instalacja zestawu MDT. Jeśli na przykład zainstalujesz 64-bitową wersję zestawu MDT, skompiluj 64-bitową wersję niestandardowego zadania UDI.
Utwórz element Task w elemencie TaskLibrary w pliku konfiguracyjnym UDI Wizard Designer 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 Task powinny zawierać parametr BitmapFilename . Określ wszystkie pozostałe parametry zgodnie z wymaganiami zadania. Na przykład w poprzednim fragmencie parametr log służy do określenia parametru lokalizacji pliku dziennika.
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 zestaw MDT).
Skopiuj bibliotekę DLL dla zadania niestandardowego do folderu platformy installation_folder\Templates\Distribution\Tools\ (gdzie installation_folder jest folderem, w którym zainstalowano MDT, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej).
Tworzenie niestandardowych walidatorów UDI
Walidatory UDI to biblioteki DLL napisane w języku C++, które implementują interfejs IValidatora . Bibliotekę DLL rejestruje się w bibliotece Kreatora UDI Designer weryfikatora, tworząc plik konfiguracyjny Kreatora UDI Designer (plik .config) i umieszczając go w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem, w którym zainstalowano zestaw MDT).
Tworzenie niestandardowych walidatorów kodów UDI
Napisz kod, który tworzy podklasę klasy BaseValidator i implementuje następujące metody:
Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties). Kontroler formularza wywołuje element członkowski Init w celu zainicjowania walidatora. Ta metoda musi wywołać metodę Init dla klasy BaseValidator . Zazwyczaj odczytuje on wszystkie właściwości ustawione dla walidatora z pliku konfiguracyjnego Kreatora UDI. Na przykład walidator InvalidCharactersValidator pobiera wartość właściwości InvalidChars przy użyciu tej metody.
IsValid (Jestprawidłowy). Kontroler formularza wywołuje tę metodę, aby sprawdzić, czy kontrolka zawiera prawidłowy tekst. Poniżej przedstawiono przykład metody IsValid dla walidatora, 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, LPCTSTR message). Kontroler formularza wywołuje ten element dla każdego naciśnięcia klawisza i innych zdarzeń, tak aby moduł sprawdzania poprawności mógł sprawdzić poprawność zawartości kontrolki i zaktualizowanych komunikatów u dołu strony kreatora (lub je wyczyścić).
Zazwyczaj są to jedyne metody, które należy zastąpić. Jednakże, w zależności od walidatora, może być konieczne nadpisanie innych metod w podklasie klasy BaseValidator , którą utworzysz. Aby uzyskać więcej informacji na temat tych innych metod, zobacz klasę BaseValidator .
Napisz kod, który rejestruje niestandardową klasę zadania w fabryce rejestru.
Utwórz rozwiązanie dla zadania niestandardowego.
Uwaga
Upewnij się, że wersja tworzonej biblioteki DLL jest tej samej platformy procesora, co instalacja zestawu MDT. Jeśli na przykład zainstalujesz 64-bitową wersję zestawu MDT, skompiluj 64-bitową wersję niestandardowego zadania UDI.
Utwórz element Validator pod elementem ValidatorLibrary w pliku konfiguracyjnym UDI Wizard Designer 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 walidatora powinny zawierać parametr Message . Określ wszystkie inne parametry zgodnie z wymaganiami walidatora. Na przykład w poprzednim fragmencie parametr NamedPattern służy do określania parametru nazwy wstępnie zdefiniowanego wzorca wyrażenia regularnego.
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 zestaw MDT).
Skopiuj bibliotekę DLL dla zadania niestandardowego do folderu platformy installation_folder\Templates\Distribution\Tools\ (gdzie installation_folder jest folderem, w którym zainstalowano MDT, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej).
Dokumentacja kreatora UDI
Składniki strony kreatora
Do utworzenia stron niestandardowych możesz użyć dowolnego z kilku gotowych składników.
Tworzenie instancji komponentów
Kreator kodu UDI tworzy nowe wystąpienia obiektów przy użyciu fabryk klas. Fabryki te są rejestrowane w rejestrze fabrycznym, przy użyciu ciągu znaków 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łówkowym IWmiRepository jako ID_WmiRepository.
Zakładając, że zapisałeś swoją stronę jako podklasę WizardPageImpl, możesz utworzyć nową instancję WmiRepoistory w następujący sposób:
PWmiRepository pWmi;
CreateInstance(Container(), ID_WmiRepository, &pWmi);
Funkcja CreateInstance to bezpieczna dla typu funkcja szablonu do tworzenia nowych wystąpień składników. PWmiRepository jest inteligentnym wskaźnikiem, więc obsługuje zliczanie odwołań za Ciebie.
Komponenty, które można tworzyć
Istnieje zestaw składników, które można zarejestrować w rejestrze. Pierwszy zestaw składników jest zawsze rejestrowany, ponieważ zapewnia 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 bibliotek DLL pliku .config XML. Twój kod nie musi wiedzieć, który plik wykonywalny zawiera określony składnik.
Lista identyfikatorów komponentów komponentów (nazwa komponentu jest taka sama jak identyfikator, ale bez początkowego ID_) zarejestrowanych w rejestrze fabrycznym (zdefiniowanym w OSDSetupWizard) jest przedstawiona w tabeli 3.
Tabela 3. Identyfikatory składników
| Identyfikator | Opis |
|---|---|
| ID_ACPowerTask | (ITask, IWizardComponent) Zadanie inspekcji wstępnej, które gwarantuje, że komputer nie będzie działał tylko na baterii |
| ID_AppDiscoveryTask | (ITask, IWizardComponent) Wyspecjalizowane zadanie polegające na wykrywaniu elementów oprogramowania zainstalowanych na komputerze |
| ID_BackgroundTask | (IBackgroundTask, IWizardComponent) Może być użyty do uruchomienia zadania w innym wątku |
| ID_CopyFilesTask | (ITask, IWizardComponent) Zadanie polegające na skopiowaniu jednego lub większej liczby plików |
| ID_FormController | (Kontroler IFormController) Najchętniej nie będziesz musiał sam tworzyć instancji, ponieważ Twoja strona otrzymuje własną instancję |
| ID_InvalidCharactersValidator | (IValidator) Zapewnia, że żadne pole tekstowe nie zawiera znaków z listy dostarczonej walidatorowi |
| ID_Logger | (ILogger) Najchętniej nie będziesz musiał samodzielnie tworzyć instancji, ponieważ Twoja strona otrzyma wskaźnik do udostępnionej instancji |
| ID_NonEmptyValidator | (IValidator) Sprawdzanie poprawności, które zapewnia, że żadne pole nie jest puste |
| ID_PasswordValidator | (IValidator) Sprawdzacz poprawności, który gwarantuje, że żadne dwa pola tekstowe nie mają tej samej zawartości |
| ID_Regex | (IRegEx) Oblicza wyrażenia regularne, szukając dopasowań |
| ID_RegExValidator | (IValidator) Walidator, 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 języka XML. |
| ID_ShellExecuteTask | (ITask, IWizardComponent) Uruchamianie programu zewnętrznego |
| ID_SummaryBag | (ISummaryBag) Dostępne pośrednio ze strony za pośrednictwem metody Form |
| ID_TaskManager | (ITaskManager, IBackgroundCallback, IWizardComponent) Zarządzanie uruchamianiem zestawu zadań i interfejsem użytkownika |
| ID_WmiRepository | (IWmiRepository, IWizardComponent) Umożliwia uruchamianie zapytań usługi Instrumentacja zarządzania Windows (WMI) |
| ID_IXmlDocument | (IXmlDocument) Zapewnia fasadę do czytania i zapisywania dokumentów XML |
Zdefiniowane OSDRefreshWizard.dll, strony udostępnione i inne elementy kontrolne przedstawiono w tabelach 4 i 5.
Tabela 4. Kontrolki katalogu
| Identyfikator | Opis |
|---|---|
| ID_Directory | (IDirectory) Fasada do uzyskiwania informacji o katalogach z systemu plików |
Tabela 5. Zdefiniowane SharedPages.dll
| Identyfikator | Opis |
|---|---|
| ID_ADHelper | (IADHelper) Stanowi fasadę dla ograniczonego zestawu funkcji w usługach Active Directory® Domain Services (AD DS) |
| ID_CpuInfo | (ICpuInfo) Określa, czy procesor jest 32- czy 64-bitowy |
| ID_DomainJoinValidator | (IDomainJoinValidator) Przedstawiono w nim metody sprawdzania, czy zestaw poświadczeń może dołączyć do domeny |
| ID_DriveList | (IDriveList, IBindableList, IWizardComponent) Używa usługi WMI w celu uzyskania listy dysków w komputerze |
| ID_WiredNetworkTask | (ITask) Zadanie sprawdzające, czy użytkownik jest połączony z siecią za pomocą karty sieciowej podłączonej na stałe (zamiast bezprzewodowej) |
Elementy sterujące
Interakcja z kontrolkami na stronie odbywa się za pośrednictwem 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 okna dialogowego | Opis |
|---|---|
| CONTROL_CHECK_BOX | (ICheckBox) Fasada do pracy z kontrolkami pól wyboru |
| CONTROL_COMBO_BOX | (IComboBox) Fasada dla kontrolek pola kombi |
| CONTROL_GENERIC | (IControl) Umożliwia pracę z większością typów kontrolek w celu kontrolowania stanu włączenia 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 umożliwiająca pracę z kontrolkami przycisków radiowych |
| CONTROL_STATIC_TEXT | (IStaticText) Fasada z uprawnieniami do odczytu/zapisu tekstu formantu, takiego jak etykieta lub pole tekstowe |
| CONTROL_TREE_VIEW | (Widok drzewa) Fasada do pracy z kontrolką widoku drzewa |
Składnik listy obrazów
Ten składnik stanowi fasadę kontrolki ImageList na stronie. Listę obrazów tworzy się za pomocą interfejsu IListView lub ITreeView .
Składnik FormController
Kreator utworzy ten składnik i przekaże go na stronę. Dostęp do niego można uzyskać ze strony za pomocą metody Form implementowanej przez klasę bazową WizardPageImpl .
Składnik InvalidCharacterValidator
Jest to rodzaj walidatora, który można umieścić na stronie. Identyfikator to ID_InvalidCharactersValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.InvalidChars".
Ten walidator 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 jakiekolwiek znaki z tej listy, składnik zgłasza błąd.
Składnik NonEmptyValidator
Jest to rodzaj walidatora, który można umieścić na stronie. Identyfikator to 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 jakakolwiek inna kontrolka obsługująca funkcję IStaticText) zawiera pusty ciąg.
Składnik PasswordValidator
Jest to rodzaj walidatora, który można umieścić na stronie. Identyfikator to ID_PasswordValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.Password".
Ten walidator działa z dwiema różnymi kontrolkami tekstowymi (kontrolkami obsługującymi IStaticText) i zgłasza błąd, jeśli nie zawierają tych samych wartości. Innymi słowy, zakończy się niepowodzeniem, jeśli pola tekstowe Hasło i Potwierdź hasło nie są zgodne.
Ponieważ ten walidator wymaga dwóch kontrolek, wymaga więcej konfiguracji niż inne walidatory. 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 element podrzędny kontrolki hasła . W ten sposób, jeśli kontroler formularza wyłączy kontrolę hasła , wyłączy również kontrolkę Potwierdź hasło . Następnie dodaj weryfikator hasła do formularza. Na koniec udostępnij weryfikatorowi haseł interfejs do kontrolki Potwierdź hasło .
Ze względu na wymóg dwóch kontrolek, musisz użyć kodu, aby skonfigurować ten walidator, a nie .config plik XML.
Składnik RegExValidator
Jest to rodzaj walidatora, który można umieścić na stronie. Identyfikator to ID_RegExValidator (zdefiniowany w pliku IValidator.h), który ma wartość tekstową "Microsoft.Wizard.Validation.RegEx".
Ten walidator porównuje zawartość kontrolki tekstu (takiej, która obsługuje IStaticText) z wyrażeniem regularnym i kończy się niepowodzeniem, jeśli tekst nie jest zgodny z wyrażeniem regularnym.
Alternatywnie możesz użyć tego walidatora z predefiniowanym nazwanym wzorcem. Aby użyć wyrażenia regularnego, kod XML musi zawierać właściwość ustawiającą o nazwie Wzorzec. Jeśli zamiast tego chcesz użyć nazwanego wzorca, użyj ustawienia o nazwie NamedPattern ustawionego na jedną z wartości w tabeli 7.
Tabela 7. Nazwane ustawiacze wzorów
| Wzorzec | Opis |
|---|---|
| Nazwa użytkownika | Sprawdza, czy tekst ma postać domeny\użytkownika lub user@domain |
| Nazwa_komputera | Nazwa musi mieć długość od 1 do 15 znaków i nie może zawierać zestawu znaków (takiego jak : oraz ?) |
| Workgroup | Nazwa musi mieć długość od 1 do 15 znaków i nie może zawierać zestawu znaków (takiego jak =, + i ?) |
Składnik FactoryRegistry
Ten komponent śledzi wszystkie fabryki klas i usługi. Implementuje interfejs IFactoryRegistry i jest dostępny pośrednio za pośrednictwem metody kontenera strony. Ponadto rejestr ładuje rozszerzenia bibliotek DLL. Po załadowaniu biblioteki DLL rejestr szuka wyeksportowanej funkcji o nazwie RegisterFactories. Musisz zaimplementować tę funkcję i w niej zarejestrować fabryki klas dla swoich stron, zadań i walidatorów (oraz wszelkie inne fabryki 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 komponent jest dostępny dla Twojej strony za pośrednictwem metody Logger (zaimplementowanej przez WizardPageImpl). Ta metoda służy do zapisywania wpisów w pliku dziennika. Zawartość pliku dziennika jest przydatna w diagnozowaniu problemów, które użytkownicy mogą napotkać podczas uruchamiania Kreatora identyfikatorów UDI.
Składnik PropertyBag
Torba właściwości jest kontenerem zmiennych pamięci. Jest ona dostępna na stronie za pomocą polecenia Container()->Properties(). Zmienne pamięci są przydatne przy przekazywaniu danych tymczasowych między różnymi stronami.
Komponenty TSVariableBag i TSRepository
Składnik TSVariableBag umożliwia odczytywanie i zapisywanie zmiennych sekwencji zadań. Wartości są przechowywane w pamięci do momentu wybrania przez użytkownika opcji Zakończ (domyślnie). Dostęp do torby TSVariable można uzyskać za pośrednictwem metody TSVariables strony (zaimplementowanej przez klasę bazową WizardPageImpl ). Te składniki rejestrują wszystkie odczyty i zapisy zmiennych sekwencji zadań.
Składnik WmiRepository
Ten składnik zapewnia fasadę do pracy z zapytaniami WMI. Możesz wywołać funkcję pomocnika CreateInstance za pomocą ID_WmiRepository , aby uzyskać wystąpienie tego składnika, który obsługuje interfejs IWmiRepository . Ten komponent zwraca rekordy wyników za pośrednictwem interfejsu IWmiIterator .
Klasy pomocnika strony kreatora
Niestandardowe strony kreatora UDI można tworzyć przy użyciu wbudowanych klas pomocników dostarczanych z zestawem SDK UDI. W tabeli 8 wymieniono klasy pomocników, których można użyć do tworzenia niestandardowych stron kreatora.
Tabela 8. Klasy pomocników
| Klasa pomocnika | Opis |
|---|---|
| Klasa ClassFactoryImpl | Jest to przydatna klasa bazowa do tworzenia fabryki klas, którą można następnie zarejestrować w rejestrze fabryki. |
| Klasa szablonu interfejsu | Użyj tej klasy szablonu, jeśli chcesz zbudować składnik, który implementuje 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 referencyjne do zarządzania okresem istnienia w składnikach COM. Ważne jest, aby zwolnić interfejsy po ich zakończeniu. 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 szablonu wskaźnika. |
| Klasa pomocnika StringUtil | Ta klasa dostarcza metod pomocniczych, które ułatwiają pracę z ciągami. |
| Klasa szablonu interfejsu podrzędnego | Ta klasa bazowa ułatwia zaimplementowanie składnika obsługującego interfejs, który dziedziczy po innym interfejsie. |
| Klasa szablonu UnknownImpl | Ta klasa obsługuje większość szczegółów tworzenia składnika COM. |
| Klasa szablonu WizardComponent | Ta klasa bazowa służy do tworzenia składników wymagających dostępu do usług kreatora, takich jak tworzenie składników i rejestrowanie. |
| Klasa szablonu WizardPageImpl | Ta klasa bazowa powinna być używana jako klasa bazowa dla wszystkich niestandardowych stron kreatora |
Klasa ClassFactoryImpl
Jest to przydatna klasa bazowa do tworzenia fabryki klas, którą można następnie zarejestrować w rejestrze fabryki.
Poniżej znajduje się 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ższy fragment jest fragmentem pliku LocationPage.cpp na przykładowej stronie kreatora użytego do zdefiniowania fabryki klas dla tej strony.
IUnknown *LocationPageFactory::CreateNewInstance()
{
return static_cast<IWizardPage *>(new LocationPage);
}
Klasa szablonu interfejsu
Użyj tej klasy szablonu, gdy chcesz zbudować 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 WizardPageImpl (którymi jest 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 pliku .dll z uchwytem wystąpienia podanym dla tej metody:
static inline std::wstring GetModuleFilename(HINSTANCE hModule)
Klasa zwraca pełną ścieżkę i nazwę pliku .exe oraz pliku .dll z uchwytem 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ę z nazwą 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 referencji do zarządzania okresem istnienia, ważne jest, aby zawsze zwalniać interfejsy po zakończeniu ich pracy. Firma Microsoft udostępnia klasę szablonu, która automatycznie obsługuje okres istnienia. Jeśli na przykład chcesz ustawić inteligentny wskaźnik dla interfejsu XML, możesz napisać coś takiego:
Pointer<IXMLDOMNode> pNewChild
pXmlDom->CreateNode(NODE_ELEMENT, L"MyElement", L"", &pNewChild);
Pierwsza linia definiuje wskaźnik inteligentny. Drugi wiersz przedstawia pobieranie inteligentnego wskaźnika za pośrednictwem innego wywołania. Operator & zawsze zwalnia istniejący interfejs, jeśli taki zawiera, i zwraca adres wskaźnika wewnętrznego. Po pobraniu takiego wskaźnika instancja wskaźnika wywołuje metodę Release , 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 Pointer wywołuje klasę QueryInterface , aby pobrać inne interfejsy. Na przykład, gdy rejestr fabryczny tworzy nową instancję komponentu, ma kod taki jak:
PWizardComponent pComp = pUnknown;
if (pComp != nullptr)
pComp->SetContainer(m_pContainer);
Pierwszy wiersz wywołuje 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 szablonu wskaźnika .
Klasa pomocnika StringUtil
Ta klasa jest zdefiniowana w Utilities.h i zapewnia 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, ignorując wielkość liter (patrz Tabela 9).
Tabela 9. Klasa pomocnika StringUtil
| Zwroty | 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ą trochę podobne do metod Microsoft .NET Format w tym sensie, że parametry mają postać {0}. Nie są jednak wykonywane żadne formatowanie danych wejściowych, a jedynie podstawianie:
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)
Są to otoki wokół StringCchPrintf , które zwracają wstring , dzięki czemu nie trzeba samodzielnie przydzielać pamięci na ciągi lub bufory.
Klasa szablonu interfejsu podrzędnego
Ta klasa bazowa ułatwia zaimplementowanie składnika obsługującego interfejs, który dziedziczy po innym interfejsie. Na przykład interfejs ICheckBox dziedziczy po IControl. Oto jak ta klasa jest używana do definiowania CheckBoxWrapper:
classCheckBoxWrapper :public SubInterface<IControl, UnknownImpl<ICheckBox> >
Interfejs bazowy jest pierwszym parametrem, podczas gdy interfejs pochodny jest drugim parametrem.
Klasa szablonu UnknownImpl
Ta klasa jest zdefiniowana w UnknownImpl.h i obsługuje większość szczegółów tworzenia składnika COM. Oto przykład, w jaki sposób można użyć tej klasy bazowej:
classDirectory :public UnknownImpl<IDirectory>
Ten kod definiuje klasę obsługującą interfejs IDirectory .
Klasa szablonu WizardComponent
Ta klasa jest zdefiniowana w pliku IWizardComponent.h i jest przydatną klasą bazową do tworzenia składników, które wymagają dostępu do usług kreatora, takich jak tworzenie i rejestrowanie składników.
Na przykład składnik CopyFilesTask jest zdefiniowany w następujący sposób:
classCopyFilesTask :public WizardComponent<ITask>
{
...
Parametrem dla tej klasy szablonu jest "główny" interfejs, którego chcesz użyć dla swojego komponentu, którym w przypadku zadań jest ITask. Użycie WizardComponent oznacza, że składnik obsługuje zarówno podany interfejs (ITask w tym przykładzie), jak i IWizardComponent.
Za każdym razem, gdy rejestr fabryki klas jest używany do tworzenia nowego składnika, rejestr wywołuje metodę IWizardComponent-SetContainer> tego składnika w celu zapewnienia składnikowi dostępu do usług kreatora.
Klasa szablonu WizardPageImpl
Użyj tej klasy jako klasy bazowej dla stron niestandardowych — na przykład:
class LocationPage :public WizardPageImpl<IDD_LOCATION_PAGE>
Parametr jest identyfikatorem zasobu szablonu okna dialogowego.
Interfejsy stron kreatora
Kreator kodu UDI używa interfejsów w celu uzyskania dostępu do różnych kontrolek na stronie. Na stronie używasz funkcji GetControlWrapper do pobierania otoki kontrolki. Oto przykład:
PStaticText pFormat;
GetControlWrapper(View(), IDC_CHECK_PARTITION, CONTROL_STATIC_TEXT, &pFormat);
W tym przypadku PStaticText jest inteligentnym wskaźnikiem do interfejsu IStaticText . Inteligentne wskaźniki automatycznie wywołują metodę COM Release(), gdy wyjdą poza zakres lub przekażesz adres zmiennej (np. &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 umożliwia sprawdzenie, 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(nazwa użytkownika LPCTSTR, hasło LPCTSTR, domena LPCTSTR, nazwa komputera_LPCTSTR, domena konta LPCTSTR)
Ta metoda umożliwia sprawdzenie, czy zestaw poświadczeń ma prawa 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. |
Interfejs zadania IBackgroundTask
__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
Na stronie postępu ta klasa jest używana do uruchamiania zadań w osobnym wątku. Możesz również użyć tej klasy, gdy chcesz wykonać operacje na oddzielnym wątku. Zadania to dowolna klasa, która obsługuje interfejs ITask .
Interfejs ten 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 klasy zawierającej kod, który ma zostać uruchomiony w innym wątku |
| Identyfikator | Liczba, której można użyć w metodzie Finished wywołania zwrotnego, aby stwierdzić, które zadanie zostało uruchomione; Przydatne w przypadku uruchamiania kilku zadań za pomocą tej samej metody wywołania zwrotnego |
| pWywołanie zwrotne | 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 odbywać się w wątku w tle, a nie w wątku interfejsu użytkownika |
void start(void)
Ta metoda rozpoczyna zadanie od wątku w tle i zwraca elementy pokazane w tabeli 13.
Tabela 13. Zwróć wątek tła
| Zwroty | Opis |
|---|---|
| E_INVALIDARG | Zadanie jest już uruchomione, więc nie możesz go uruchomić w tej chwili. |
| E_FAIL | Wystąpił problem podczas uruchamiania wątku. |
| S_OK | Wątek został rozpoczęty. |
BOOL Running()
Ta metoda zwraca wartość TRUE, jeśli zadanie w tle jest obecnie uruchomione, lub 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 Tabela 14 i Tabela 15). Po zwróceniu wyników tej metody ukończenie tego procesu może zająć trochę czasu.
Tabela 14. HRESULT Zakończ kod wyjścia
| Parametr | Opis |
|---|---|
| Kod zakończenia | Kod zakończenia, który zostanie wysłany do metody wywołania zwrotnego Finished, która będzie również dostępna z metody GetExitCode . |
Tabela 15. Kody wypowiedzenia
| Zwroty | Opis |
|---|---|
| E_FAIL | Wywołanie zakończenia nie powiodło się. |
| S_OK | Żądanie zakończenia wątku powiodło się. |
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 |
|---|---|
| Kod pCode | Wskaźnik do wartości DWORD , która zostanie ustawiona przy zwrocie lub nullptr , jeśli wartość zwracana nie jest potrzebna. Po zakończeniu ten parametr jest ustawiany na STILL_ACTIVE , jeśli wątek jest uruchomiony, kod zwrócony przez metodę Execute zadania lub wartość przekazaną do metody Zakończ, jeśli wywołano tę metodę. |
| Wynik pH | Wskaźnik do HRESULT , który zostanie ustawiony przy return lub nullptr , jeśli nie potrzebujesz wartości HRESULT . |
HRESULT Close(void)
Ta metoda zwalnia wątek w tle. Zwraca E_INVALIDARG , jeśli wątek jest obecnie uruchomiony i S_OK w przeciwnym razie.
Interfejs ICheckBox
__interface ICheckBox : IControl
{
void Check(BOOL check);
BOOL IsButtonChecked();
};
void check (sprawdzenie BOOL)
Ustaw stan zaznaczenia pola wyboru. Gdy metoda ma wartość PRAWDA, pole wyboru jest zaznaczone; jeśli metoda ma wartość FAŁSZ, pole wyboru jest wyczyszczone.
BOOL IsButtonChecked()
Ta metoda raportuje bieżący stan pola wyboru.
Interfejs IComboBox
__interface IComboBox : IControl
{
HRESULT Bind([in] IBindableList *pList);
HRESULT Select(int index);
int Selected(void);
void Add([in] LPCTSTR caption);
HRESULT GetText([out, retval] LPBSTR pText);
void Clear();
};
Omówienie
Ten interfejs jest implementowany przez składnik CheckBoxWrapper . Wystąpienie tego składnika można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_COMBO_BOX.
HRESULT Bind([in] IBindableList *pList)
Użyj tej metody, gdy masz źródło danych, które implementuje interfejs IBindableList . Pole listy inicjuje zawartość podpisami z tej listy.
HRESULT Select(int index)
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)
Pobiera ciąg aktualnie wybranego elementu w polu kombi.
void clear()
Usuń wszystkie elementy z pola kombi.
Interfejs IControl
__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 można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_GENERIC.
HRESULT SetEnable(BOOL enable)
Włączanie lub wyłączanie formantu.
BOOL IsEnabled(void)
Zwraca wartość PRAWDA, jeśli kontrolka jest włączona, lub FAŁSZ, jeśli nie jest.
HRESULT SetVisible(BOOL visible)
Pokaż lub ukryj kontrolkę.
Interfejs ICpuInfo
__interface ICpuInfo : IUnknown
{
BOOL Is64Bit(void);
};
Omówienie
Ten interfejs można uzyskać, tworząc nowy składnik ID_CpuInfo . Pojedyncza metoda raportuje, czy procesor jest 32-, czy 64-bitowy. Należy pamiętać, że w przypadku 32-bitowego systemu operacyjnego na komputerze 64-bitowym ta metoda zwraca wartość PRAWDA, ponieważ raportuje tylko szerokość procesora (nie systemu operacyjnego).
Interfejs IDirectory
__interface IDirectory : IUnknown
{
BOOL FileExists(LPCWSTR name);
BOOL FindFirst([in] LPCWSTR name);
HRESULT FoundName([out, retval] LPBSTR name);
DWORD FoundAttributes(void);
BOOL FindNext(void);
void FinishFind(void);
};
Omówienie
Składnik Directory , który tworzy się za pomocą ID_Directory, zapewnia fasadę do pracy z katalogami w systemie plików.
BOOL FileExists(nazwa LPCWSTR)
Ta metoda zwraca wartość PRAWDA, jeśli istnieje plik o podanej nazwie.
BOOL FindFirst([in] Nazwa LPCWSTR)
Ta metoda znajduje pierwsze dopasowanie dla podanej nazwy. Obsługuje symbole wieloznaczne i zwraca nazwy plików i katalogów. Metoda zwraca wartość PRAWDA, jeśli znaleziono dopasowanie, lub FAŁSZ w przeciwnym razie.
HRESULT FoundName([out, retval] LPBSTR name)
Ta metoda pobiera nazwę znalezionego pliku za pomocą wywołania funkcji FindFirst lub FindNext.
DWORD FoundAttributes(void)
Ta metoda zwraca atrybut dla ostatniego znalezionego pliku lub katalogu. Możesz użyć następującego kodu, aby sprawdzić, czy jest to katalog:
pDirectory->FoundAttributes() & FILE_ATTRIBUTE_DIRECTORY
BOOL FindNext (void)
Znajdź następny. Ta metoda zwraca wartość PRAWDA, jeśli znaleziono inne dopasowanie, lub wartość FAŁSZ w przeciwnym razie.
void FinishFind(void)
Ta metoda zwalnia zasoby używane na potrzeby operacji znajdowania.
IDomainJoinValidator Interface
__interface IDomainJoinValidator : IUnknown
{
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName);
HRESULT IsUsernameValid(LPCWSTR domainName);
BOOL CanModifyComputerAdEntry(LPCWSTR domainName);
};
Omówienie
Wystąpienie tego interfejsu można uzyskać przy użyciu wartości ID_DomainJoinValidator funkcji szablonu CreateInstance .
HRESULT Init(ILogger *pLogger, IWizardPageContainer *pContainer, IStaticText *pUsername, IStaticText *pPassword, IStaticText *pComputerName)
Zainicjuj wystąpienie, jak pokazano w tabeli 17.
Tabela 17. HRESULT init — inicjowanie instancji
| Parametr | Opis |
|---|---|
| pLogger | Instancja rejestratora, która jest dostępna dla Twojej strony za pośrednictwem metody Rejestrator strony |
| pContainer | Przekazuje wyniki z metody kontenera strony |
| pNazwa użytkownika | Pole tekstowe zawierające nazwę użytkownika, którego poprawność ma zostać sprawdzona |
| pPassword (Hasło domyślne) | Pole tekstowe zawierające hasło do sprawdzenia poprawności |
| PComputerName (Nazwa komputera) | Pole tekstowe zawierające nazwę komputera, który docelowo zostanie przyłączony do domeny |
HRESULT IsUsernameValid(LPCWSTR nazwa_domeny)
Ta metoda używa metody IADHelper-ValidLogon> do wykonania pracy. Szczegółowe informacje można znaleźć w tej metodzie.
BOOL CanModifyComputerAdEntry(LPCWSTR domainName)
Sprawdź, czy użytkownik ma prawa modyfikowania wpisu na komputerze. Większość pracy jest wykonywana przez IADHelper-HasAccess>. Jeśli ta metoda zwraca wartość FALSE, sprawdź szczegóły w pliku dziennika.
Interfejs IDriveList
__interface IDriveList : IUnknown
{
HRESULT Init(IWmiRepository *pWmi);
HRESULT SetWhereClause(LPCTSTR whereClause);
HRESULT SetMinimumDriveSize(__int64 size);
HRESULT Update(void);
HRESULT AddProperty(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned);
size_t Count(void);
HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT value);
HRESULT GetCaption(size_t index, LPBSTR pCaption);
}
HRESULT Init(IWmiRepository *pWmi)
Wywołaj tę metodę przed wywołaniem innych składników. Przed wywołaniem tej metody należy utworzyć nowe 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 w poniższym wierszu zostaną zwrócone tylko dyski USB:
pDrives->SetWhereClause(L"WHERE InterfaceType='USB'");
HRESULT SetMinimumDriveSize(__int64 size)
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(ENUM_DISK_QUERY_SECTION section, LPCTSTR propName, LPCTSTR propNameReturned)
Ta metoda powoduje dodanie nazw dodatkowych właściwości, które mają być dostępne w wynikach zapytania. Wywołaj tę metodę przed wywołaniem Update. Tabela 18 przedstawia trzy przydatne właściwości.
Tabela 18. HRESULT AddProperty: Przydatne właściwości
| Sekcja | Właściwość | Opis |
|---|---|---|
| DISKQUERY_LOGICALDISK | Rozmiar | Rozmiar w bajtach przedstawiony w postaci ciągu |
| DISKQUERY_DISKPARTITION | Indeks programu DiskIndex | Numer dysku wyrażony jako liczba całkowita, zaczynając od 0 |
| DISKQUERY_LOGICALDISK | VolumeName (Nazwa woluminu) | Etykieta woluminu |
size_t Count(void)
Liczba rekordów zwróconych przez zapytanie. Wywołaj Update przed wywołaniem tej metody.
HRESULT GetProperty(size_t index, LPCTSTR propName, LPVARIANT value)
Ta metoda pobiera wartość właściwości z wyników zapytania, jak pokazano w tabeli 19.
Tabela 19. HRESULT GetProperty
| Parametr | Opis |
|---|---|
| Index (Indeks) | Indeks od zera do rekordu wyniku |
| propName (Nazwa właściwości) | Nazwa właściwości, na przykład "Rozmiar" |
| Wartość | Po zwróceniu parametr ten zawiera wartość wariantu właściwości |
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Ta metoda pobiera podpis dla rekordu, który jest taki sam jak właściwość Caption.
Interfejs IImageList
__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 komponent ImageList . Wystąpienie tego składnika można pobrać z interfejsu IListView .
HRESULT CreateImageList(int width, int height, UINT flags)
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 uchwyt dla listy obrazów w przypadku, gdy musisz wykonać inne operacje 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. Interfejs HRESULT IImageList
| Parametr | Opis |
|---|---|
| hInstance | Dojście wystąpienia modułu zawierającego zasób mapy bitowej |
| resourceId (identyfikator zasobu) | Identyfikator zasobu do załadowania do listy obrazów |
Interfejs IListView
__interface IListView : IControl
{
int AddItem([in] LPCTSTR text);
int AddColumn(int width, [in] LPCTSTR text);
HRESULT SetSubItem(int index, int column, [in] LPCTSTR text);
int GetWidth(void);
void SetExtendedStyle(DWORD style);
int GetSelectedItem(void);
HRESULT SelectItem(int index);
BOOL IsItemChecked(int index);
int GetItemCount(void);
HRESULT CreateImageList(int width, int height, UINT flags);
int AddImage(HINSTANCE hInstance, int resourceId);
HRESULT SetImage(int index, int imageIndex);
HRESULT Clear(void);
};
Omówienie
Ten interfejs jest implementowany przez składnik ControlWrapper . Wystąpienie tego składnika można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_LIST_VIEW.
int AddItem([in] LPCTSTR text)
Dodawanie nowego wiersza do pola listy. Metoda zwraca indeks właśnie dodanego elementu.
int AddColumn(całkowita szerokość, [in] tekst LPCTSTR)
Dodawanie nowej kolumny do widoku listy.
HRESULT SetSubItem(int index, int column, [in] LPCTSTR text)
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 ma zostać zmodyfikowany |
| kolumna | Indeks kolumny, którą chcesz zaktualizować; pierwsza kolumna jest ustawiana za pomocą AddItem, kolumny druga i następne są ustawiane za pomocą tej metody |
| text (tekst) | Ciąg wyświetlany w kolumnie |
int GetWidth(void)
Ta metoda zwraca szerokość całego pola tekstowego.
void SetExtendedStyle(DWORD style)
Ta metoda pozwala ustawić style rozszerzone w polu listy — na przykład:
m_pList->SetExtendedStyle(LVS_EX_FULLROWSELECT);
int GetSelectedItem(void)
Ta metoda zwraca indeks aktualnie zaznaczonego elementu widoku listy.
HRESULT SelectItem(int index)
Ustaw ten indeks dla elementu zaznaczonego na liście.
BOOL IsItemChecked(int index)
Ta metoda zwraca wartość PRAWDA, jeśli jest zaznaczony 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(int width, int height, UINT flags)
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 w widoku listy. Najpierw należy wywołać metodę CreateImageList.
HRESULT SetImage(int index, int imageIndex)
Ustaw obraz, który będzie wyświetlany po lewej stronie dla określonego elementu widoku listy.
HRESULT Clear(void)
Usuwanie wszystkich elementów z widoku listy.
Interfejs IProgressBar
__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 można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_PROGRESS_BAR.
HRESULT SetPercentage(int position)
Ustaw pozycję paska postępu, używając liczby z przedziału od 0 do 100. Domyślnie nowe paski postępu w systemie Win32® mają maksymalny zakres 100.
int GetPercentage(void)
Ta metoda zwraca bieżącą pozycję paska postępu.
Interfejs IRadioButton
__interface IRadioButton : IControl
{
public:
void SetGroup(int firstId, int lastId);
void CheckRadio(int id);
BOOL IsButtonChecked(int id);
void EnableRadio(int id, BOOL enable);
};
Omówienie
Ten interfejs jest implementowany przez składnik RadioButtonWrapper . Wystąpienie tego składnika można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_RADIO_BUTTON.
void SetGroup(int firstId, int lastId)
Dostarcz otoka z zakresem przycisków radiowych, które powinny być traktowane jako grupa. Wywołaj tę metodę przed wywołaniem funkcji CheckRadio.
void CheckRadio(int id)
Ustaw określony przycisk radiowy na pojedynczy przycisk w zaznaczonej grupie przycisków radiowych. Wywołaj SetGroup przed wywołaniem tej metody.
BOOL IsButtonChecked(int id)
Ta metoda zwraca wartość PRAWDA, jeśli przycisk radiowy jest obecnie zaznaczony; w przeciwnym razie zwraca wartość FAŁSZ.
void EnableRadio(int id, BOOL enable)
Ta metoda włącza lub wyłącza przycisk radiowy.
IStaticText Interface
__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 można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_STATIC_TEXT.
HRESULT SetText([in] LPCTSTR pText)
Ustaw tekst kontrolki.
HRESULT GetText([out, retval] LPBSTR pText)
Ta metoda zwraca bieżącą wartość tekstu kontrolki.
Interfejs ITask
__interface IControl : IUnknown
{
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings);
HRESULT Execute(LPDWORD pReturnCode);
};
Zaimplementuj ten interfejs, jeśli chcesz, aby Twój składnik był dostępny jako zadanie na stronie inspekcji wstępnej lub jeśli chcesz użyć składnika BackgroundTask do wykonywania pracy w wątku w tle.
Oto komponenty, które implementują 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"
Inicjowanie
HRESULT Init(IStringProperties *pProperties, ISettingsProperties *pTaskSettings)
Jeśli piszesz zadanie na stronę inspekcji wstępnej, wywołaj tę metodę, aby zainicjować zadanie. Plik .config zawiera kod XML i może on 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 ustawiających, natomiast parametr pTaskSettings zapewnia dostęp do elementu Task i elementów podrzędnych. Większość zadań wymaga jedynie odczytu danych z parametru pProperties .
Wykonywanie
HRESULT Execute(LPDWORD pReturnCode)
Tutaj piszesz kod wykonujący zadanie. Ta metoda powinna zwrócić S_OK , jeśli nie wystąpiły żadne błędy, i może zwrócić inną wartość HRESULT , jeśli wystąpił błąd podczas wykonywania zadania. W przypadku korzystania ze strony inspekcji wstępnej wartości inne niż S_OK zwracane przez tę metodę są dopasowywane do <elementów Error> w <sekcji ExitCodes> .
Parametr pReturnCode musi zostać zaktualizowany liczbą, która raportuje stan zadania. Wartości te są dopasowywane przez stronę preflights do <elementów ExitCode> .
Interfejs ITreeView
__interface ITreeView : IControl
{
void EnableCheckboxes(void);
HRESULT CreateImageList(int width, int height, UINT flags);
int AddImage(HINSTANCE hInstance, int resourceId);
HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL);
void SetImage(HTREEITEM item, int image, int expandImage);
void Clear(void);
BOOL SetFirstVisible(HTREEITEM item);
BOOL SelectItem(HTREEITEM item);
void CheckItem(HTREEITEM item, UINT checkState);
HTREEITEM SelectedItem(void);
int SetItemHeight(SHORT height);
HRESULT EnableItem(HTREEITEM item, BOOL enable);
void Expand(HTREEITEM hItem, BOOL expand);
HTREEITEM GetChild(HTREEITEM hParent);
HTREEITEM GetParent(HTREEITEM hNode);
HTREEITEM GetNextItem(HTREEITEM hPrevious);
UINT IsChecked(HTREEITEM item);
BOOL IsEnabled(HTREEITEM item);
INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel);
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler);
void SetSelectedBackColor(COLORREF color);
};
Omówienie
Ten interfejs jest implementowany przez składnik TreeViewWrapper . Wystąpienie tego składnika można pobrać za pomocą funkcji pomocnika GetControlWrapper z typem CONTROL_TREE_VIEW.
void EnableCheckboxes(void)
Ta metoda włącza pola wyboru w formancie widoku drzewa przez ustawienie stylu TVS_CHECKBOXES .
HRESULT CreateImageList(int width, int height, UINT flags)
Dodawanie nowej listy obrazów do kontrolki widoku drzewa. Parametr flags jest przekazywany w wywołaniu funkcji ImageList_Create Win32.
int AddImage(HINSTANCE hInstance, int resourceId)
Dodaj obraz do listy obrazów z zasobu (resourceId) w module z dojściem wystąpienia hInstance.
HTREEITEM AddItem(LPCTSTR text, HTREEITEM hParent = NULL)
Dodaj węzeł do widoku drzewa. Nowy węzeł zostanie dodany na najwyższym poziomie, jeśli parametr hParent ma wartość NULL. W przeciwnym razie podaj uchwyt do elementu nadrzędnego w miejscu, w którym chcesz dodać nowy element. Ta metoda zwraca uchwyt do nowego elementu.
void SetImage(HTREEITEM item, int image, int expandImage)
Ustaw obraz, który ma być używany dla elementu widoku drzewa. Możesz ustawić zarówno normalny, jak i rozszerzony obraz.
void Wyczyść(void)
Usuwanie wszystkich elementów z widoku drzewa.
BOOL SetFirstVisible(element HTREEITEM)
Upewnij się, że element widoku drzewa jest widoczny. Widok drzewa będzie przewijany, jeśli jest to konieczne, aby ten element był widoczny.
BOOL SelectItem(element HTREEITEM)
Ustaw aktualnie wybrany element na element dostarczony przez siebie. Następnie możesz wywołać metodę SetFirstVisible , aby upewnić się, że nowo wybrany element jest widoczny.
void CheckItem(HTREEITEM item, UINT checkState)
Ta metoda zasadniczo ustawia obraz, który będzie wyświetlany dla pola wyboru w widoku drzewa. Te obrazy znajdują się w osobnej kontrolce ImageList , którą zarządza widok drzewa. Domyślnie ta lista obrazów zawiera trzy obrazy pokazane w tabeli 22.
Tabela 22.void CheckItem Image List Default
| checkState | Opis |
|---|---|
| 0 | Blank (Puste) |
| 1 | Wyczyszczone |
| 2 | Wybrane |
HTREEITEM SelectedItem(void)
Ta metoda zwraca uchwyt aktualnie zaznaczonego elementu widoku drzewa.
int SetItemHeight(SHORT height)
Ta metoda ustawia wysokość wszystkich elementów w formancie widoku drzewa w pikselach. Zwraca poprzednią wysokość w pikselach.
HRESULT EnableItem(element HTREEITEM, BOOL enable)
Ta metoda włącza lub wyłącza pojedynczy element w drzewie. Wyłączenie elementu z dziećmi nie spowoduje ich wyłączenia.
void Expand(HTREEITEM, hItem, BOOL expand)
Ta metoda rozwija 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 obiektu nadrzędnego dla węzła w widoku drzewa lub wartość NULL, jeśli węzeł znajduje się na najwyższym poziomie.
HTREEITEM GetNextItem(HTREEITEM hPrevious)
Tę metodę można wywołać za pomocą dojścia, które GetChild wraca, aby iterować po wszystkich elementach podrzędnych węzła. Ta metoda zwraca następny element równorzędny w drzewie, który ma tego samego rodzica.
UINT IsChecked(element HTREEITEM)
Ta metoda zwraca wartość 0 , jeśli węzeł widok drzewa nie jest wybrany, lub 1 , jeśli jest.
BOOL IsEnabled(element HTREEITEM)
Ta metoda zwraca wartość PRAWDA, jeśli węzeł widoku drzewa jest włączony, lub wartość FAŁSZ w przeciwnym razie.
INT_PTR CommonControlEvent(WORD controlId, void* pInfo, BOOL *pCancel)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
HRESULT SetEventHandler(ITreeViewEvent *pEventHandler)
Wywołaj tę metodę, jeśli chcesz otrzymywać powiadomienie po zmianie zaznaczonego elementu lub zmianie stanu sprawdzania elementu widoku drzewa przez użytkownika. Należy zaimplementować zdarzenie ITreeViewEvent w składniku, aby odbierać te wywołania zwrotne.
void SetSelectedBackColor(COLORREF color)
Ustawianie koloru tła używanego dla wybranego elementu.
Interfejs IWmiIteration
__interface IWmiIterator : IUnknown
{
HRESULT Next(void);
HRESULT GetProperty(LPCTSTR propertyName, [out] LPVARIANT pValue);
};
Omówienie
Ten interfejs, wraz z IWmiRepository, jest zazwyczaj używany podczas pracy z wywołaniami WMI. Interfejs IWmiIteration umożliwia iterację wartości zwracanych przez zapytanie.
HRESULT Next(void)
Przejście do następnego elementu w wynikach zapytania pokazanego w tabeli 23.
Tabela 23. HRESULT Next(void) zwraca zapytanie
| Wynik HR | Opis |
|---|---|
| S_OK | Przeniesiono do następnego wyniku; możesz użyć funkcji GetProperty , aby pobrać właściwości tego wyniku. |
| S_FALSE | Nie ma więcej elementów na liście. |
| 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 wyniku, jak pokazano w tabeli 24 i tabeli 25.
Tabela 24. HRESULT GetProperty
| Parametr | Opis |
|---|---|
| propertyName (nazwa właściwości) | Nazwa właściwości, którą chcesz pobrać |
| pValue (Wartość docelowa) | Wskazuje strukturę typu WARIANT, która przy zwrocie zawiera wartość właściwości. |
Tabela 25. HRESULT GetProperty Result
| HRESULT | Opis |
|---|---|
| S_OK | Wartość właściwości została pobrana. |
| WBEM_E_NOT_FOUND | W nazwie nie ma żadnej właściwości. |
| E_NOT_VALID_STATE | Brak bieżącego rekordu. |
Uwaga
Metoda GetProperty może zwracać inne kody błędów usługi WMI niż wymienione w tabeli 25. Wymienione wartości to typowe zwracane wyniki.
Interfejs IWmiRepository
__interface IWmiRepository : IUnknown
{
HRESULT SetNamespace(LPCWSTR namespaceName);
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator);
};
Omówienie
Interfejs ten jest implementowany przez komponent WmiRepository (ID_WmiRepository).
HRESULT SetNamespace(LPCWSTR namespaceName)
Ta metoda określa przestrzeń nazw usługi WMI, która zostanie użyta dla zapytania. Wywołaj tę metodę przed wywołaniem funkcji ExecQuery. Jeśli ta metoda nie zostanie wywołana, przestrzenią nazw będzie katalog główny\cimv2. Ta metoda zawsze zwraca S_OK.
HRESULT ExecQuery(LPCWSTR query, [out] IWmiIterator **ppIterator)
Wykonaj zapytanie względem zestawu przestrzeni nazw WMI za pomocą wywołania SetNamespace, jak pokazano w Tabelach 26 i 27.
Tabela 26. HRESULT ExecQuery
| Parametr | Opis |
|---|---|
| Zapytanie | Ciąg zapytania usługi WMI, które ma zostać wykonane |
| ppIterator | Przekazywanie wskaźnika do wskaźnika interfejsu, który po powrocie zostanie wypełniony interfejsem, umożliwiając dostęp do wyników zapytania |
Tabela 27. Wynik zapytania HRESULT
| HRESULT | Opis |
|---|---|
| S_OK | Zapytanie powiodło się |
| Inne | Jeśli kwerenda nie powiodła się, zwraca wartość HRESULT usługi WMI |
Interfejs kontrolera IFormController
__interface IFormController : IUnknown
{
Init(IWizardPageView *pView, IWizardPageContainer *pContainer);
SetPageInfo(ISettingsProperties *pPageInfo);
Validate(void);
AddToGroup(int groupControlId, int controlId);
UpdateCheckGroup(int groupControlId);
AddValidator(int controlId, IValidator *pValidator, IControl *pCOntrol = 0);
AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr);
DisableValidation(int controlId, BOOL disable);
AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type);
AddRadioGroup(LPCWSTR groupName, int radioControlId);
EnableRadioGroup(LPCWSTR groupName, BOOL enable);
InitFields(IFieldCallback *pFieldCallback = nullptr);
SaveFields(IFieldCallback *pFieldCallback = nullptr);
BOOL IsFieldDisabled(int controlId);
InitSection(LPCWSTR key, LPCWSTR sectionCaption);
AddSummaryItem(LPCWSTR first, LPCWSTR second);
SuppressLogValue(LPCWSTR tsVariableName);
SaveText(int controlId, LPCWSTR tsVariableName, LPCWSTR summaryCaption);
LoadText(int controlId, LPCWSTR tsVariableName);
void ControlEvent(WORD eventId, WORD controlId);
BOOL IsValid(void);
};
Omówienie
Każda strona w Kreatorze UDI ma własny kontroler formularza, który implementuje ten interfejs. Za pomocą tego kontrolera można połączyć dane pól z pliku .config XML z kontrolkami na stronie. Kontroler formularza obsługuje wiele szczegółów za Ciebie.
Konfigurowanie formularza
Ogólnie rzecz biorąc, skonfiguruj kontroler formularza w metodzie OnWindowCreated strony. Zazwyczaj wiąże się to z wywołaniem metod przedstawionych w tabeli 28.
Tabela 28. Metoda OnWindowCreated
| Metoda | Opis |
|---|---|
| Inicjowanie | Inicjuje kontroler formularzy |
| Pole dodania | Zapewnia połączenie między polem w pliku .config XML, które jest nazwą ciągu, a kontrolką w oknie dialogowym strony, która jest identyfikatorem |
| AddRadioGroup (Grupa DodajRadia) | Umożliwia połączenie przycisku radiowego zarówno z grupą, jak i z kontrolką w oknie dialogowym. |
| AddToGroup | Zezwala na "podrzędne" kontrolki, które są włączane lub wyłączane wraz z ich rodzicem lub w zależności od tego, który przycisk radiowy jest zaznaczony |
| Pola wejściowe | Wywołaj po wywołaniu wszystkich metod Add w celu skonfigurowania formularza |
| Sprawdź poprawność | Przeprowadza wstępną weryfikację |
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 mógł przetwarzać zdarzenia związane z formularzem.
Zapisywanie danych formularza
W metodzie OnNextSelected wywołuje metody formularzy przedstawione w tabeli 29.
Tabela 29. OnNextSelected Method
| Metoda | Opis |
|---|---|
| Sekcja początkowa | Zawiera nazwę sekcji, która będzie wyświetlana na stronie Podsumowanie tej strony |
| SaveFields | Zapisywanie wartości pól w zmiennych sekwencji zadań i na stronie Podsumowanie |
Inicjowanie
HRESULT Init(IWizardPageView *pView, IWizardPageContainer *pContainer)
Tę metodę zwykle wywołuje się na początku metody OnWindowCreated strony. Polecenie powinno wyglądać mniej więcej tak:
Form()->Init(View(), Container());
SetPageInfo (Informacje o stronie)
HRESULT SetPageInfo(ISettingsProperties *pPageInfo)
Ta metoda jest wywoływana wewnętrznie i nie należy jej wywoływać samodzielnie. Dostarcza kod XML strony do kontrolera formularza.
Sprawdź poprawność
HRESULT Validate(void)
Metoda ta wykonuje wszystkie walidatory dołączone do kontrolek. Jeśli walidator nie przejdzie pomyślnie, kontroler formularza wyświetla komunikat ostrzegawczy i wyłącza przycisk Dalej , a następnie zatrzymuje przetwarzanie walidatorów. Zazwyczaj należy wywołać tę metodę tylko na końcu OnWindowCreated metody; Zawsze zwraca S_OK.
AddToGroup
AddToGroup(int groupControlId, int controlId)
Ta metoda powoduje dodanie kontrolki jako elementów podrzędnych pola wyboru lub przycisku radiowego, jak pokazano w tabeli 30. Wszystkie takie kontrolki podrzędne zostaną wyłączone, jeśli kontrolka nadrzędna nie jest zaznaczona. Ta metoda zawsze zwraca S_OK.
Tabela 30. AddToGroup
| Parametr | Opis |
|---|---|
| groupControlId (identyfikator kontrolki grupy) | Identyfikator pola wyboru lub przycisku radiowego, który będzie kontrolował stan włączenia kontrolki podrzędnej |
| Controlld | Identyfikator kontrolki, którą chcesz dodać jako element podrzędny |
UpdateCheckGroup (Grupa kontrolna aktualizacji)
HRESULT UpdateCheckGroup(int groupControlId)
Ta metoda aktualizuje stan włączenia lub wyłączenia kontrolek podrzędnych grupy na podstawie stanu kontrolki nadrzędnej. Ogólnie rzecz biorąc, nie musisz sam wywoływać tej metody, ponieważ kontroler formularza wywołuje ją za Ciebie.
AddValidator (SprawdźSprawdzanie poprawności)
HRESULT AddValidator(int controlId, IValidator *pValidator, IControl *pControl = 0)
Wywołaj tę metodę tylko wtedy, gdy masz walidator, który chcesz utworzyć w kodzie, a nie za pomocą kodu XML. Ta metoda zawsze zwraca S_OK.
AddValidator (SprawdźSprawdzanie poprawności)
HRESULT AddValidator(int controlId, LPCWSTR validatorId, LPCWSTR message, IValidator **ppValidator = nullptr)
Wywołaj tę metodę tylko wtedy, gdy masz walidator, który chcesz utworzyć w kodzie, a nie za pomocą kodu XML.
DisableValidation (Weryfikacja wyłączenia)
HRESULT DisableValidation(int controlId, BOOL disable)
Wywołaj tę metodę, aby jawnie wyłączyć walidator dla kontrolki lub przywrócić normalną walidację, jak pokazano w Tabeli 31. Ta metoda jest przydatna na przykład przy włączaniu i wyłączaniu reguł dla kontrolek, które nie są objęte sprawdzaniem poprawności formularza i gdy trzeba wyłączyć sprawdzanie poprawności kontrolki. Innymi słowy, normalnie nie wywołałbyś tej metody. Ta metoda zawsze zwraca S_OK.
Tabela 31. HRESULT DisableValidation
| Parametr | Opis |
|---|---|
| controlId (identyfikator kontrolki) | Kontrolka, dla której chcesz włączyć lub wyłączyć sprawdzanie poprawności |
| Wyłącz | Ustaw wartość TRUE, aby wyłączyć sprawdzanie poprawności, lub wartość FALSE, aby przywrócić normalną walidację |
Pole dodania
HRESULT AddField(LPCWSTR fieldName, int controlId, BOOL suppressLog, DialogControlTypes type)
Dodaj mapowanie kontrolki między nazwą w elemencie Pole pliku .config XML a identyfikatorem kontrolki w oknie dialogowym strony, jak pokazano w tabeli 32. Tę metodę należy wywołać przed wywołaniem metody InitFields, ponieważ funkcja InitFields używa tych informacji. Ta metoda zawsze zwraca S_OK.
Tabela 32. HRESULT AddField
| Parametr | Opis |
|---|---|
| fieldname (Nazwa pola) | Nazwa pola wyświetlana w pliku XML strony |
| controlId (identyfikator kontrolki) | Identyfikator kontrolki w szablonie okna dialogowego strony |
| suppressLog | Ustaw wartość na TRUE, jeśli nie chcesz, aby wartości z tego pola były zapisywane w pliku dziennika; zawsze ustawiaj 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 (Grupa DodajRadia)
HRESULT AddRadioGroup(LPCWSTR groupName, int radioControlId)
Ta metoda powoduje dodanie kontrolki do nazwanej grupy przycisków radiowych, jak pokazano w tabeli 33. Należy wywołać to przed metodą InitFields , ponieważ metoda ta używa atrybutów elementu RadioGroup do sterowania ustawieniami wszystkich kontrolek przycisków radiowych w grupie. Grupy opcji można na przykład zablokować, aby wszystkie przyciski radiowe były wyłączone, a kontrolki podrzędne były włączane lub wyłączane tylko w zależności od tego, który przycisk radiowy jest zaznaczony. Ta metoda zawsze zwraca S_OK.
Tabela 33. HRESULT AddRadioGroup
| Parametr | Opis |
|---|---|
| groupName (Nazwa grupy) | Ciąg definiujący grupę przycisków radiowych na tej stronie |
| radioControlId | Identyfikator pojedynczego przycisku radiowego, który ma zostać dodany do tej grupy |
EnableRadioGroup
HRESULT EnableRadioGroup(LPCWSTR groupName, BOOL enable)
Ta metoda umożliwia włączenie lub wyłączenie całej grupy przycisków opcji. Wyłączenie grupy opcji powoduje wyłączenie wszystkich kontrolek przycisków radiowych w grupie, jak również wszystkich elementów podrzędnych tych przycisków radiowych, które zostały dodane za pomocą polecenia DodajDoGrupa. Patrz tabela 34 i tabela 35.
Tabela 34. EnableRadioGroup
| Parametr | Opis |
|---|---|
| groupName (Nazwa grupy) | Nazwa grupy przycisków opcji, która została już zdefiniowana za pomocą wywołania funkcji DodajGrupęRadiową |
| Umożliwianie | Ustaw wartość TRUE, aby włączyć grupę przycisków opcji, lub wartość FALSE, aby wyłączyć grupę |
Tabela 35. HRESULT EnableRadioGroup
| HRESULT | Opis |
|---|---|
| S_OK | Grupa włączona lub wyłączona |
| E_INVALIDARG | Nie ma grupy przycisków radiowych o podanej nazwie |
Pola wejściowe
HRESULT InitFields(IFieldCallback *pFieldCallback = nullptr)
Przed wywołaniem tej metody wywołaj funkcję AddField dla każdego pola, które może kontrolować kod XML. Ta metoda zawsze zwraca S_OK.
Parametr pFieldCallback jest opcjonalny. Jeśli zostanie podany, kontroler formularza wywołuje funkcję SetFieldDefault dla kontrolek, które nie są CONTROL_STATIC_TEXT ani CONTROL_CHECK_BOX. Takie zachowanie pozwala na pobranie wartości domyślnej z pliku XML i ustawienie jej samodzielnie w formancie.
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 pFieldCallback umożliwia obsługę zapisywania wartości dla kontrolek, które nie obsługują CONTROL_STATIC_TEXT.
IsFieldDisabled
BOOL IsFieldDisabled(int controlId)
Ta metoda pozwala ustalić, czy pole zostało wyłączone w pliku XML.
Sekcja początkowa
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 metody SaveFields. Ta metoda zawsze zwraca S_OK.
Tabela 36. HRESULT InitSection
| Parametr | Opis |
|---|---|
| Klucz | Ten parametr powinien być unikatowy dla danej strony. Służy do zapewnienia, że każda strona ma własne informacje podsumowujące. |
| sectionCaption (podpis sekcji) | Nagłówek, który będzie wyświetlany na stronie Podsumowanie dla informacji podsumowujących na tej stronie. Zazwyczaj jako wartość tego parametru jest używana wartość DisplayName(). |
DodajElement podsumowania
HRESULT AddSummaryItem(LPCWSTR first, LPCWSTR second)
Ta metoda umożliwia dodawanie na stronie podsumowania elementów wykraczających poza elementy ustawiane za pomocą kodu XML. Patrz tabela 37.
Tabela 37. HRESULT AddSummaryItem
| Parametr | Opis |
|---|---|
| Po pierwsze | Podpis elementu podsumowania wyświetlany po lewej stronie |
| Sekunda | Wartość, która zostanie wyświetlona 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, kody PIN lub inne poufne wartości, które może wprowadzić użytkownik.
SaveText (ZapiszTekst)
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 samodzielnie wywoływać tej metody, ponieważ kontroler formularza robi to dla wszystkich pól. Patrz tabela 38.
Tabela 38. HRESULT SaveText
| Parametr | Opis |
|---|---|
| controlId (identyfikator kontrolki) | Identyfikator pola tekstowego zawierającego wartość, którą chcesz zapisać (lub inną kontrolkę mogącą zwracać tekst) |
| tsVariableName (Nazwa zmiennej ts) | Nazwa zmiennej sekwencji zadań, którą chcesz zmodyfikować |
| summaryCaption | Podpis tej wartości na stronie Podsumowanie |
Załaduj tekst
HRESULT LoadText(int controlId, LPCWSTR tsVariableName)
Ta metoda odczytuje wartość zmiennej sekwencji zadań i ustawia tę wartość w polu tekstowym.
ControlEvent (Zdarzenie kontrolki)
void ControlEvent(WORD eventId, WORD controlId)
Wywołaj tę metodę w metodzie OnControlEvent , aby upewnić się, że kontroler formularza może przetwarzać zdarzenia kontrolki, co jest niezbędne do poprawnego działania. Wartości przekazywane do tej metody są takie same jak wartości przekazywane do metody OnControlEvent .
IsValid (Jestprawidłowy)
BOOL IsValid(void)
Ta metoda zwraca stan ostatniej weryfikacji formularza. Jeśli którykolwiek z weryfikatorów kontrolek zgłosił błąd, ta metoda zwraca wartość FALSE. Innymi słowy, zwraca wartość PRAWDA tylko wtedy, gdy wszystkie kontrolki na stronie są prawidłowe.
Interfejs IValidator
__interface IValidator : IUnknown
{
HRESULT Init(IControl *pControl, LPCTSTR message);
HRESULT Init(IControl *pControl, IWizardPageContainer *pContainer, IStringProperties *pProperties);
BOOL, IsValid(LPBSTR pMessage);
HRESULT SetProperty(int propertyId, LPVARIANT pValue);
HRESULT SetProperty(int propertyId, IUnknown *pUnknown);
HRESULT SetProperty)(int propertyId, LPCTSTR pValue);
};
Omówienie
Weryfikatory to składniki, które mogą sprawdzać poprawność pojedynczej kontrolki na stronie. Najprostszym sposobem zaimplementowania walidatora jest uczynienie z niego podklasy klasy BaseValidator , która jest zdefiniowana w pliku nagłówkowym BaseValidator.h.
HRESULT Init(IControl *pControl, LPCTSTR message)
Jeśli tworzysz walidatora w kodzie, możesz wywołać tę metodę, aby zainicjować walidator. Patrz tabela 39.
Tabela 39. HRESULT Init
| Parametr | Opis |
|---|---|
| pControl | Kontrolka, którą musi sprawdzić weryfikator |
| 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ę w celu zainicjowania walidatorów, które tworzy na podstawie XML strony. Patrz tabela 40.
Tabela 40. Metoda init HRESULT
| Parametr | Opis |
|---|---|
| pControl | Kontrolka, którą musi sprawdzić weryfikator |
| pContainer | W przypadku, gdy walidator potrzebuje dostępu do rejestratora lub musi stworzyć inne komponenty |
| pProperties | Zapewnia dostęp do właściwości (elementów ustawiających) walidatora |
BOOL, IsValid(LPBSTR pMessage)
Ta metoda zwraca wartość PRAWDA, jeśli kontrolka jest prawidłowa, lub FAŁSZ, jeśli kontrolka jest nieprawidłowa. Po zwróceniu, pMessage powinien zostać wypełniony nowym BSTR zawierającym komunikat do wyświetlenia, gdy kontrolka jest nieprawidłowa.
HRESULT SetProperty(int propertyId, LPVARIANT pValue)
Tę metodę można wdrożyć, jeśli potrzebne są dodatkowe wartości, które nie są zawarte w pliku XML.
HRESULT SetProperty(int propertyId, IUnknown *pUnknown)
Tę metodę można wdrożyć, jeśli potrzebne są dodatkowe wartości, które nie są zawarte w pliku XML.
HRESULT SetProperty)(int propertyId, LPCTSTR pValue)
Tę metodę można wdrożyć, jeśli potrzebne są dodatkowe wartości, które nie są zawarte w pliku XML.
Interfejs IRegEx
__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(dane wejściowe LPCTSTR, wyrażenie regularne LPCTSTR)
Ta metoda uruchamia wyrażenie regularne względem tekstu wejściowego. Do wykonywania rzeczywistej pracy używa funkcji regex_match standardowej biblioteki języka C++. Metoda zwraca wartość PRAWDA, jeśli istnieją dopasowania, lub wartość FAŁSZ w przeciwnym razie.
HRESULT GetMatch(size_t indeks, LPBSTR pValue)
Ta metoda umożliwia pobranie dopasowań z ostatniego wywołania MatchesRegex . Należy pamiętać, że w tej metodzie nie występuje przetwarzanie błędów i zwraca S_OK lub zgłasza wyjątek.
Interfejs ISummaryInfo
__interface ISummaryInfo : IUnknown
{
size_t Count(void);
HRESULT Clear(void);
HRESULT AddInfo(LPCTSTR pFirst, LPCTSTR pSecond);
HRESULT GetInfo(size_t index, LPBSTR pFirst, LPBSTR pSecond);
HRESULT GetCaption(LPBSTR pCaption);
HRESULT SetCaption(LPCTSTR caption);
};
Nie musisz używać tego interfejsu bezpośrednio. Zamiast tego użyj 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 musisz używać tego interfejsu bezpośrednio. Zamiast tego użyj IFormController.
Interfejs ITSVariableBag
__interface ITSVariableBag : IUnknown
{
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue);
void SetValue([in] LPCTSTR variableName, [in] LPCTSTR pValue);
void Clear(void);
HRESULT Remove([in] LPCTSTR variableName);
HRESULT SuppressLogValue([in] LPCTSTR variableName);
void Save(void);
};
Ten interfejs zapewnia dostęp do zmiennych sekwencji zadań. Możesz uzyskać dostęp do tego interfejsu za pomocą metody TSVariables() swojej strony.
void GetValue([in] LPCTSTR variableName, [out] LPBSTR pValue)
Ta metoda odczytuje wartość zmiennej sekwencji zadań.
Uwaga
Wartości są buforowane po pierwszym odczycie.
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 Wyczyść(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 z pamięci określoną wartość sekwencji zadań. Następnym razem, gdy wywołasz funkcję GetValue z tą samą nazwą sekwencji zadań, metoda podejmie próbę pobrania jej z sekwencji zadań.
HRESULT SuppressLogValue([in] LPCTSTR variableName)
Za każdym razem, gdy zapisywane są 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 kody PIN, dla określonej zmiennej sekwencji zadań.
void Save(void)
Ta metoda zapisuje wszystkie wartości sekwencji zadań, które zostały ustawione za pomocą wywołań metody SetValue.
Interfejs ITSVariableRepository
__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 przeznaczony do użytku wewnętrznego przez TSVariableBag do odczytywania i zapisywania zmiennych sekwencji zadań.
Interfejs IWizardFinish
__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 pozycji Zakończ lub Anuluj w Kreatorze kodu UDI. Kreator UDI zawiera zadanie zakończenia , które zapisuje zmienne sekwencji zadań po wybraniu pozycji Zakończenie. W przypadku anulowania kreatora zadanie ustawia tylko zmienną sekwencji zadań OSDSetupWizCancelled na wartość TRUE i nie zapisuje zmian w żadnych innych zmiennych sekwencji zadań.
Jeśli tworzysz własny składnik wykończenia, musisz go zarejestrować za pomocą takiego kodu:
Register<MyFinishTaskFactory>(ID_MyFinishTask, pRegistry);
PWizardFinish pFinish;
CreateInstance(pRegistry, ID_MyFinishTask, &pFinish);
PWizardFinishService pService;
GetService<IWizardFinishService>(pRegistry, &pService);
pService->Register(pFinish);
Interfejs IBindableList
__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 listy.
HRESULT GetCaption(size_t index, LPBSTR pCaption)
Ta metoda zwraca podpis elementu o określonym indeksie.
Interfejs IDataNodes
__interface IDataNodes : IUnknown
{
size_t Count();
HRESULT SetCaptionProperty(LPCTSTR captionProperty);
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue);
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode);
};
Ten interfejs zapewnia dostęp do danych hierarchicznych, które można zapisać na stronie. Ten interfejs można uzyskać za pomocą metod w interfejsie ISettingsProperties , który jest dostępny dla strony za pośrednictwem metody Settings .
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 Settings()->GetDataNode(L"Network", &pData) daje 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 elementu DataItem .
HRESULT SetCaptionProperty(LPCTSTR captionProperty)
Składnik obsługujący ten interfejs obsługuje również element IBindableList, który ułatwia wypełnienie pola kombi danymi z pliku XML strony. Ta metoda określa, która właściwość (ustawiająca) w każdym elemencie DataItem będzie używana dla tego powiązania. Na przykład można wywołać tę metodę za pomocą DisplayName i użyje ona tej właściwości ustawiającej do powiązania danych. Pole kombi będzie wtedy zawierać elementy Publiczny i Zespół deweloperów .
HRESULT GetProperty(size_t index, LPCTSTR propertyName, [out] LPBSTR propertyValue)
Ta metoda pobiera właściwość z jednego z elementów DataItem . Patrz tabela 41 i tabela 42.
Tabela 41. DataItem GetProperty
| Parametr | Opis |
|---|---|
| Index (Indeks) | Wartość indeksu (rozpoczynająca się od 0) elementu danych, dla którego chcesz pobrać wartość właściwości |
| propertyName (nazwa właściwości) | Nazwa właściwości ustawiającej, dla której chcesz pobrać wartość |
| propertyValue (Wartość właściwości | Wartość zwracana przez właściwość. |
Tabela 42. HRESULT GetProperty
| HRESULT | Opis |
|---|---|
| S_OK | Nieruchomość została odzyskana. |
| E_INVALIDARG | Indeks znajduje się poza końcem tablicy. |
HRESULT GetNode(size_t index, [out] ISettingsProperties **ppNode)
Ta metoda jest podobna do metody GetProperty, ale zamiast zwracać jedną wartość z elementu DataItem, zwraca cały element danych zapakowany w interfejs ISettingsProperties . Patrz tabela 43 i tabela 44.
Tabela 43. HRESULT GetNode
| Parametr | Opis |
|---|---|
| Indeks | Wartość indeksu (rozpoczynająca się od 0) elementu danych, dla którego chcesz pobrać wartość właściwości |
| węzeł ppNode | Przy wyjściu, ISettingsProperties interfejs, który otacza węzeł DataItem |
Tabela 44. Wyniki HRESULT GetNode
| HRESULT | Opis |
|---|---|
| S_OK | Węzeł został pobrany. |
| E_INVALIDARG | Indeks znajduje się poza końcem tablicy. |
Interfejs IFactoryRegistry
__interface IFactoryRegistry : IUnknown
{
void Register(LPCTSTR type, IClassFactory *pFactory);
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger);
BOOL Contains(LPCTSTR type);
HRESULT GetFactory(LPCTSTR type, IClassFactory **ppFactory);
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance);
HRESULT SetContainer(IWizardPageContainer *pContainer);
HRESULT RegisterService(REFGUID iid, IUnknown *pService);
HRESULT GetService(REFGUID iid, IUnknown **ppService);
};
Omówienie
Podczas tworzenia nowej strony niestandardowej należy utworzyć co najmniej fabrykę stron — klasę, która implementuje IClassFactory. (Możesz użyć ClassFactoryImpl jako klasy bazowej dla swojej fabryki).
void Register (typ LPCTSTR, IClassFactory *pFactory)
Ta metoda rejestruje fabrykę klas w rejestrze. Patrz tabela 45.
Tabela 45. IClassFactory void Register
| Parametr | Opis |
|---|---|
| Typ | Ciąg identyfikujący fabrykę, którą rejestrujesz; Ogólnie rzecz biorąc, ten parametr powinien zawierać nazwę firmy w tym ciągu, aby upewnić się, że jest ona unikatowa |
| pFactory | Wskaźnik do wystąpienia fabryki klas |
HRESULT LoadAndRegister(LPCTSTR dllName, ILogger *pLogger)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
BOOL zawiera (typ LPCTSTR)
Ta metoda jest zazwyczaj przeznaczona 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 komponentu, bardziej wydajne jest odzyskanie fabryki, a następnie poproszenie jej o utworzenie instancji za Ciebie.
HRESULT CreateInstance(LPCTSTR type, IUnknown **ppInstance)
Ta metoda tworzy nową instancję składnika, biorąc pod uwagę jego typ. Zamiast tego użyj metody szablonu CreateInstance , która umożliwia tworzenie obiektów bezpiecznych dla typu.
HRESULT SetContainer(IWizardPageContainer *pContainer)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
HRESULT RegisterService(REFGUID iid, IUnknown *pService)
Usługi to pojedyncze wystąpienia składnika, które mogą być używane w wielu miejscach. Za pomocą tej metody można zarejestrować usługę na jednej stronie, a następnie pobrać to samo wystąpienie 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 podanego w wierszu polecenia parametru /locale Kreatora UDI. Metoda zwraca jedną z następujących wartości:
Wartość identyfikatora języka podanego w parametrze wiersza polecenia /locale
0, jeśli nie podano parametru wiersza polecenia /locale
Interfejs ILogger
__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 kodów UDI rejestruje informacje w pliku dziennika, co ułatwia rozwiązywanie problemów znalezionych w polu. Warto zapisywać informacje w dzienniku na stronach. Możesz uzyskać wskaźnik do tego interfejsu z poziomu strony za pomocą metody Logger() strony. Wiersze w pliku dziennika zawierają numer "poziomu", który reprezentuje komunikaty o błędach, normalne, pełne informacje lub komunikaty debugowania.
Uwaga
Komunikaty debugowania nie są zapisywane w pliku dziennika, chyba że jest włączona obsługa debugowania. Możesz włączyć obsługę debugowania, dodając następujący wiersz do elementu Style w pliku .config:
<Setter Property="debug">true</Setter>
Inicjowanie
HRESULT Init(LPCWSTR logFilename)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
Dziennik przenoszenia
HRESULT MoveLog(LPCWSTR logFilename)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
Baza logowania
HRESULT LogBase(EMessageType messageType, LPCTSTR component, SYSTEMTIME eventTime, LPCTSTR message)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
Dziennik
HRESULT Log(EMessageType messageType, LPCTSTR component, LPCTSTR message)
Ta metoda jest przeznaczona 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. Patrz 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 liczba). |
| Składnik | Ciąg, który identyfikuje źródło błędu, którym zazwyczaj jest Twoja strona lub napisany składnik |
| Komunikat | Komunikat wyjaśniający, co spowodowało błąd |
Błąd2
HRESULT Error2(HRESULT error, LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda jest podobna do metody Błąd , ale umożliwia dostarczenie dwuczęściowego komunikatu. Ostateczny komunikat będzie zawierał w pliku wyjściowym ciąg "message", a następnie ciąg "message2". Jest to po prostu wygodna metoda.
Normalny
HRESULT Normal(LPCTSTR component, LPCTSTR message)
Ta metoda powoduje zarejestrowanie zwykłego komunikatu. Aby zapoznać się z parametrami, zobacz opis metody błędu .
Normalny 2
HRESULT Normal2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda powoduje zarejestrowanie zwykłego komunikatu. Aby zapoznać się z parametrami, zobacz opis metody Error2 .
Pełne informacje
HRESULT Verbose(LPCTSTR component, LPCTSTR message)
Ta metoda rejestruje pełny komunikat. Aby zapoznać się z parametrami, zobacz opis metody błędu .
Verbose2 (Pełne słowo2)
HRESULT Verbose2(LPCTSTR component, LPCTSTR message, LPCTSTR message2)
Ta metoda rejestruje pełny komunikat. Aby zapoznać się z parametrami, zobacz opis metody Error2 .
Debugowanie
HRESULT Debug(LPCWSTR component, LPCWSTR message)
Ta metoda rejestruje komunikat debugowania. Aby zapoznać się z parametrami, zobacz opis metody błędu . Komunikaty debugowania nie są zapisywane w pliku, chyba że są włączone. Aby uzyskać szczegółowe informacje, zobacz sekcję Omówienie.
Włączanie debugowania
HRESULT EnableDebug(BOOL debug)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
Zamknij
HRESULT Close(void)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
GetLogFilename (Nazwa plikuDziennika)
HRESULT GetLogFilename(LPBSTR pFilename)
Ta metoda pobiera nazwę pliku dziennika.
IOrientation Interface
__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.
ISettings Interface
__interface ISettings : IUnknown
{
int NumDlls();
int NumPages();
HRESULT SetStage(LPCWSTR stageName);
HRESULT GetDllName(long index, __out LPBSTR pDllName);
HRESULT GetPageInfo(long index, __out ISettingsProperties **ppPageInfo);
HRESULT GetStyle(__out ISettingsProperties **ppStyleInfo);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
ISettingsProperties Interface
__interface ISettingsProperties : IUnknown
{
HRESULT GetAttribute(LPCTSTR attributeName, __out LPBSTR attributeValue);
IStringProperties * Properties();
HRESULT SelectNodes(LPCTSTR xPath, __out IXMLDOMNodeList **ppList);
HRESULT SelectSingleNode(LPCTSTR xPath, __out IXMLDOMNode **ppNode);
HRESULT GetDataNode(LPCTSTR name, __out ISettingsProperties **ppNode);
HRESULT GetDataNodes(__out IDataNodes **ppNodes);
HRESULT GetChildDataNodes(LPCTSTR childeName, __out IDataNodes **ppNodes);
};
Omówienie
Ten interfejs umożliwia dostęp do danych strony. Aby przejść do najwyższego poziomu danych strony, użyj metody Settings() strony.
HRESULT GetAttribute(LPCTSTR attributeName, LPBSTR attributeValue)
Metoda ta pozwala na pobieranie wartości atrybutów w węźle głównym, który jest węzłem Strona w przypadku korzystania z metody Settings() strony.
IStringProperties * Properties()
Ta metoda zapewnia dostęp do wartości właściwości ustawiających 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 za pomocą wyrażenia XPath. Jeśli możesz, lepiej skorzystać z jednej z pozostałych metod. Tej metody należy używać tylko wtedy, gdy nie można dotrzeć do węzłów w inny sposób.
HRESULT SelectSingleNode(LPCTSTR xPath, IXMLDOMNode **ppNode)
Wywołaj tę metodę, jeśli chcesz bezpośrednio pobrać pojedynczy węzeł XML za pomocą wyrażenia XPath. Jeśli możesz, lepiej skorzystać z jednej z pozostałych metod. Tej metody należy używać tylko wtedy, gdy nie można dotrzeć do węzła w inny sposób.
HRESULT GetDataNode(Nazwa LPCTSTR, ISettingsProperties **ppNode)
Pobierz element danych na podstawie atrybutu Name tego elementu.
HRESULT GetDataNodes(IDataNodes **ppNodes)
Ta metoda pobiera listę elementów elementu danych w bieżącym węźle. Z poziomu strony wywołaj węzeł GetDataNode , aby pobrać interfejs ISettingsProperty dla danych. Następnie w tym wystąpieniu wywołaj metodę 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 na uzyskanie dostępu do zestawu węzłów elementu DataItem w określonym węźle danych . Używając języka XML z przykładu GetDataNodes , poniższy kod wykonuje dokładnie to samo, co cztery wiersze kodu w przykładzie w obszarze GetDataNodes , ale ze sprawdzaniem błędów:
ISimpleStringProperties Interface
ISimpleStringProperties Interface
__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 sytuacjach, gdy musisz przekazać zestaw właściwości do innego składnika, takiego jak zadanie, ale chcesz dodać wartości programowo, zamiast używać wartości z języka XML. Oto przykład, w jaki sposób można użyć 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 ustawiających pochodzących z języka XML. Ten interfejs jest dostępny dla właściwości strony za pomocą Settings()->Properties().
HRESULT Get(LPCTSTR propertyName, [out] LPBSTR pPropValue)
Ta metoda pobiera pojedynczą wartość właściwości. Patrz tabela 47 i tabela 48.
Tabela 47. IHRESULT Get Property Value
| Parametr | Opis |
|---|---|
| propertyName (nazwa właściwości) | Nazwa właściwości, która ma zostać odczytana |
| pPropValue | Przy wyjściu zawiera wartość właściwości w postaci ciągu znaków (ta wartość będzie miała 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 | Wartość właściwości jest pobierana. |
| E_INVALIDARG | Nie ma żadnej właściwości o podanej nazwie. |
Interfejs ITaskManager
__interface ITaskManager : IUnknown
{
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback);
HRESULT SetFailMessage(LPCWSTR message);
HRESULT Start(void);
HRESULT GetTaskMessage(size_t index, LPBSTR message);
HRESULT GetResultType)(size_t index, LPBSTR type);
HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value);
int GetSelectedIndex(void);
HRESULT Wait(DWORD waitMilliseconds);
size_t FailedCount(void);
size_t WarningCount(void);
size_t SucceedCount(void);
size_t RunningCount(void);
void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo);
void OnControlEvent(WORD eventId, WORD controlId);
void EnableButtons(BOOL enable);
}
Interfejs ten jest implementowany przez składnik TaskManager (ID_TaskManager w pliku ITaskManager.h), który jest składnikiem, który uruchamia zadania na stronie inspekcji wstępnej. Możesz albo korzystać ze strony inspekcji wstępnej bezpośrednio, co jest najczęściej wykonywane, lub zbudować własną stronę, pozwalając temu komponentowi wykonać większość pracy.
HRESULT Init(IWizardPageView *pPageView, int idListView, int idMessage, int idRetryButton, ISettingsProperties *pPageInfo, ITaskManagerCallback *pCallback)
Tę metodę należy wywołać przed wywołaniem jakiejkolwiek innej metody. Inicjuje składnik TaskManager . Patrz tabela 49.
Tabela 49. HRESULT Init
| Parametr | Opis |
|---|---|
| pPageView | Umożliwia uzyskanie dostępu do strony, na której będą wykonywane zadania (Ta strona musi zawierać określony zestaw kontrolek opisanych w kilku następnych parametrach). |
| idListView (Widok listy identyfikatorów) | Identyfikator kontrolki ListView , która służy do wyświetlania listy zadań i stanu tych zadań |
| idMessage (Wiadomość identyfikatora) | Identyfikator kontrolki pola tekstowego, która będzie używana do wyświetlania komunikatu dotyczącego wybranego zadania |
| Przycisk idRetryButton | Identyfikator kontrolki przycisku, który można wybrać w celu ponownego uruchomienia zadań |
| pPageInfo | Otoka wokół kodu XML strony (Menedżer zadań ładuje zestaw zadań do uruchamiania z tego kodu XML). |
| pWywołanie zwrotne | 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 zakończy działanie). |
HRESULT SetFailMessage(LPCWSTR message)
Ta metoda określa komunikat wyświetlany w przypadku niepowodzenia co najmniej jednego zadania.
HRESULT Start(void)
Ta metoda rozpoczyna wszystkie zadania. Każde zadanie rozpoczyna się w osobnym wątku.
HRESULT GetTaskMessage(size_t index, LPBSTR message)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego. Pobiera bieżącą wiadomość dla zadania na podstawie jego indeksu na liście zadań.
HRESULT GetResultType)(indeks size_t, typ LPBSTR)
Ta metoda pobiera bieżący "typ" dla zadania. W tabeli 50 przedstawiono dostępne typy.
Tabela 50. HRESULT GetResultType
| Type | Opis |
|---|---|
| 0 | Reprezentuje zadanie, które zakończyło się powodzeniem |
| 1 | Reprezentuje zadanie, które zwróciło ostrzeżenie |
| -1 | Oznacza zadanie zakończone niepowodzeniem |
Typ jest pobierany przez sprawdzenie kodu zakończenia lub błędu zadania i znalezienie dopasowania w elemencie XML ExitCodes> zadania<.
HRESULT GetProperty(size_t index, LPCTSTR propertyName, LPBSTR value)
Ta metoda jest używana przez strony postępu i inspekcji wstępnej do pobierania właściwości ustawiającej BitmapFilename, aby mogła wyświetlić obraz obok komunikatu o zaznaczonym zadaniu. Innymi słowy można dodać niestandardową funkcję ustawiającą do kodu XML zadania, a następnie pobrać ją 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 metodę GetProperty ) do wyświetlenia dla wybranego zadania. Ta metoda jest stosowana na stronach postępu i inspekcji wstępnej w celu wyświetlenia obrazu wybranego zadania.
HRESULT Wait(DWORD waitMilliseconds)
Ta metoda pomaga głównie w testach jednostkowych, więc test może zapewnić, że zadania zakończą się przed zakończeniem testu jednostkowego. Normalnie nie wywołałbyś tej metody. Funkcja jest zwracana po zakończeniu działania wszystkich zadań lub po upływie czasu 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ń obecnie oznaczonych jako ostrzeżenie.
size_t SucceedCount(void)
Ta metoda zwraca liczbę zadań obecnie oznaczonych jako zakończone pomyślnie.
size_t RunningCount(void)
Ta metoda zwraca liczbę aktualnie uruchomionych zadań.
void OnCommonControlEvent(WORD controlId, LPNMHDR pInfo)
Wywołaj tę metodę z OnCommonControlEvent strony, aby TaskManager mógł przetworzyć potrzebne zdarzenia.
void OnControlEvent(WORD eventId, WORD controlId)
Wywołaj tę metodę z elementu OnControlEvent strony, aby TaskManager mógł przetwarzać potrzebne zdarzenia.
void EnableButtons(BOOL enable)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
Interfejs IWizardComponent
__interface IWizardComponent : IUnknown
{
HRESULT SetContainer(IWizardPageContainer *pContainer);
};
Omówienie
Zazwyczaj nie implementuje się tego interfejsu bezpośrednio, ale za pośrednictwem klasy szablonu WizardComponent . 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ć.
Interfejs IWizardDialogController
__interface IWizardDialogController : IUnknown
{
void Initialize(ISettings *pSettings);
void InitPages(void);
void Start();
void Next();
void Finish();
void Previous();
int NumPages();
void Cancel();
HRESULT Focus(WizardButtons button);
HRESULT SetEnable(WizardButtons button, BOOL enable);
void ShowWarningMessage(LPCTSTR message);
void HideWarningMessage();
void ChangePage(size_t newIndex);
IUnknown *CurrentPage(void);
HRESULT GetCurrentTitle([out, retval] LPBSTR pDisplayName);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
IWizardDialogView Interface
__interface IWizardDialogView : IUnknown
{
HRESULT LoadBannerImage(LPCTSTR bannerFilename);
HRESULT LoadPage(LPCTSTR pageType, ISettingsProperties *pPageSettings, IWizardPageView **view);
HRESULT SetEnable(WizardButtons button, BOOL enable);
HRESULT Focus(WizardButtons button);
void EnableFinish(BOOL isFinish);
void Exit(int exitCode);
void ShowWarningMessage(LPCTSTR message);
void HideWarningMessage(void);
void SetTitle(LPCTSTR title);
void SetPageTitle(LPCTSTR title);
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);
HWND GetHwnd(void);
void UpdateFocus(void);
};
Ten interfejs jest przeznaczony tylko do użytku wewnętrznego.
Interfejs IWizardPage
__interface IWizardPage : IUnknown
{
HRESULT SetPageSettings(ISettingsProperties *pPageSettings);
HINSTANCE GetInstanceHandle(void);
int GetDialogResourceId(void);
void WindowCreated(IWizardPageView *pView, IWizardPageContainer *pContainer);
void WindowShown(void);
void WindowHidden(void);
HRESULT NextSelected(void);
void ControlEvent(WORD eventId, WORD controlId);
void CommonControlEvent(WORD controlId, LPNMHDR pInfo, LPBOOL pCancel);
void UnhandledEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
};
Omówienie
Ten interfejs jest implementowany przez WizardPageImpl, więc zazwyczaj nie trzeba go implementować samodzielnie. Wszystkie te metody są wywoływane przez kreatora podczas interakcji ze stronami niestandardowymi.
IWizardPageContainer Interface
__interface IWizardPageContainer : IUnknown
{
ILogger * Logger(void);
IPropertyBag * Properties(void);
HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance);
HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance);
HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest);
HRESULT GotoPage(LPCTSTR pageName);
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType);
BOOL InPreview(void);
HWND GetHwnd(void);
};
Omówienie
Interfejs ten jest dostępny dla Twojej strony za pośrednictwem metody Container (zaimplementowanej 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 * Właściwości (nieważne)
Ta metoda zapewnia dostęp do zmiennych "pamięci", czyli właściwości znajdujących się w pamięci tylko wtedy, gdy jest uruchomiony Kreator UDI. Te właściwości są dostępne dla innych stron w kodzie lub w pliku XML przy użyciu składni $memoryVarName$ .
HRESULT CreateInstance(LPCTSTR type, [out] IUnknown **ppInstance)
Ta metoda umożliwia utworzenie nowej instancji dowolnego zarejestrowanego składnika. Lepiej jednak używać funkcji szablonu CreateInstance, ponieważ jest ona silnie wpisana.
HRESULT GetService(REFIID iid, [out] IUnknown **ppInstance)
Ta metoda umożliwia pobranie zarejestrowanej usługi. Lepiej jest jednak wywołać funkcję szablonu GetService , która jest silnie wpisana (zamiast używać IUnknown).
HRESULT ReplaceVariables(LPCTSTR source, [out] LPBSTR pDest)
Ta metoda obsługuje pracę ze zmiennymi wewnątrz wartości ciągów. Obsługuje ona formaty przedstawione 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). |
| %Nazwa% | Zmienna sekwencji zadań lub zmienna środowiskowa. Kolejność jest następująca: 1. Użyj wartości zmiennej sekwencji zadań, jeśli istnieje. 2. Użyj wartości zmiennej środowiskowej, jeśli istnieje. 3. W przeciwnym razie usuń ten tekst z ciągu. |
Tabela 52. Parametr HRESULT
| Parametr | Opis |
|---|---|
| Źródło | Ciąg wejściowy $ , który może zawierać dowolną kombinację zmiennych lub % nie zawierać żadnych zmiennych |
| pDest powiedział: | Po zwróceniu zawiera nowy ciąg, który zawiera wszystkie tokeny zamienione zgodnie z tabelą 51 |
HRESULT GotoPage(LPCTSTR pageName)
Ta metoda nie została w pełni przetestowana. Chodzi o to, że możesz przełączyć się bezpośrednio do określonej strony na podstawie nazwy strony zdefiniowanej w pliku .config XML. Wywołanie tej metody pomija element OnNextSelected na stronie. Ponadto działanie tej metody może ulec zmianie, dlatego korzystaj z niej na własne ryzyko.
int ShowMessageBox(LPCTSTR message, LPCTSTR lpCaption, UINT uType)
Ta metoda powoduje wyświetlenie okna komunikatu z podanym tekstem i podpisem. Parametrem uType jest dowolna wartość, którą można dostarczyć do funkcji MessageBox Win32.
BOOL InPreview(void)
Ta metoda zwraca wartość TRUE, jeśli kreator został uruchomiony w trybie podglądu przez podanie przełącznika /preview . W trybie podglądu przycisk Dalej nigdy nie jest wyłączony. Ta metoda pozwala na pominięcie kodu w trybie podglądu, który może na przykład powodować problemy, jeśli na stronie nie ma prawidłowych danych.
HWND GetHwnd(puste)
Ta metoda zwraca HWND dla głównego okna dialogowego. Z tej metody należy korzystać ostrożnie. Ogólnie rzecz biorąc, interfejs programowania aplikacji UDI Wizard został zaprojektowany w taki sposób, aby nigdy nie pracować bezpośrednio z klamkami okiennymi.
Interfejs IWizardPageView
__interface IWizardPageView : IUnknown
{
HRESULT GetControlWrapper(int itemId, DialogControlTypes controlType, IUnknown **ppControl);
HWND GetHwnd(void);
HWND GetControl(int itemId);
HRESULT Show (void);
HRESULT Hide(void);
HRESULT Focus(int itemId);
IWizardPage * Page(void);
IFormController * Form(void);
HRESULT FocusWizardButton(WizardButtons button);
HRESULT SetEnable(WizardButtons button, BOOL enable);
void ShowWarningMessage(LPCTSTR message);
void HideWarningMessage(void);
};
Ten interfejs jest dostępny dla kodu na stronie za pośrednictwem metody View (zaimplementowanej przez WizardPageImpl).
HRESULT GetControlWrapper(int itemId, DialogControlTypes, controlType, IUnknown *ppControl)
Kreator kodu UDI używa otejki, która w rzeczywistości jest fasadą do interakcji z kontrolkami na stronie. Użycie tych fasad zamiast rzeczywistych kontrolek znacznie ułatwia pisanie testów dla strony, ponieważ można dostarczyć 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(puste)
Ta metoda zwraca uchwyt okna dla strony. Ogólnie rzecz biorąc, dostęp do tej klamki nie powinien być potrzebny.
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 jest przeznaczona tylko do użytku wewnętrznego.
HRESULT Hide(void)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
HRESULT Focus(int itemId)
Ustawianie fokusu wejściowego na określoną kontrolkę.
IWizardPage * Page(void)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
IFormController * Form(void)
Ta metoda jest przeznaczona tylko do użytku wewnętrznego.
HRESULT FocusWizardButton (przycisk WizardButtons)
Ustawia fokus na jednym z przycisków kreatora. WizardButtons ma dwie wartości: BackButton i NextButton.
HRESULT SetEnable(WizardButtons button, BOOL enable)
Zażądaj włączenia lub wyłączenia jednego z przycisków kreatora. Przycisk może nie odpowiadać żądanemu stanowi. Na przykład w przypadku uruchomienia Kreatora kodów UDI z przełącznikiem /preview przyciski będą zawsze włączone. WizardButtons ma dwie wartości: BackButton i NextButton.
void ShowWarningMessage(LPCTSTR message)
Ta metoda powoduje wyświetlanie komunikatu ostrzegawczego u dołu obszaru zawartości strony. Może to być dowolny tekst.
void HideWarningMessage(void)
Ukrywanie komunikatu ostrzegawczego wyświetlonego przy wywołaniu funkcji ShowWarningMessage.
Interfejs IXmlDocument
__interface IXmlDocument : IUnknown
HRESULT Load(LPCTSTR filename);
HRESULT LoadXml(LPCTSTR xml);
HRESULT Save(LPCWSTR filename);
HRESULT GetParseErrorMessage(LPBSTR pMessage);
HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes);
HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode);
HRESULT AddSchema(LPCTSTR filename, LPCTSTR ns);
HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value);
HRESULT CreateNode(DOMNodeType type, LPCWSTR name, LPCWSTR ns, IXMLDOMNode **ppNode);
};
Omówienie
Interfejs ten jest implementowany przez komponent ID_IXmlDocument , który jest fasadą zaprojektowaną w celu ułatwienia pracy z dokumentami XML w języku C++.
HRESULT Load(LPCTSTR filename)
Ta metoda pozwala załadować dokument XML z pliku zewnętrznego. Funkcja zwraca S_OK , jeśli plik został załadowany bez błędów, lub S_FALSE , jeśli wystąpił błąd. Gdy wystąpi błąd, możesz go wyświetlić, wywołując metodę GetParseErrorMessage.
HRESULT LoadXml(LPCTSTR xml)
Ta metoda powoduje załadowanie dokumentu XML z ciągu, a nie z pliku zewnętrznego. Poza źródłem odczytu kodu XML zachowanie metody jest takie samo jak w przypadku metody ładowania .
HRESULT Save(LPCWSTR filename)
Ta metoda zapisuje dokument XML znajdujący się w pamięci w pliku zewnętrznym.
HRESULT GetParseErrorMessage(LPBSTR pMessage)
Ta metoda zwraca nowy ciąg znaków z komunikatem o błędzie podczas ładowania dokumentu XML, jeśli taki występuje. Zawsze zwraca S_OK.
HRESULT SelectNodes(LPCTSTR xpath, IXMLDOMNodeList **ppNodes)
Ta metoda umożliwia pobranie kolekcji węzłów z dokumentu za pomocą wyrażenia XPath. Zawsze zwraca S_OK.
HRESULT SelectSingleNode(LPCTSTR xpath, IXMLDOMNode **ppNode)
Ta metoda umożliwia pobranie jednego węzła z dokumentu za pomocą wyrażenia XPath. Zawsze zwraca S_OK.
HRESULT AddSchema(LPCTSTR nazwa_pliku, LPCTSTR ns)
Ta metoda dodaje nazwę pliku schematu zewnętrznego, który będzie używany do sprawdzania poprawności schematu dokumentu XML po załadowaniu. Podana przestrzeń nazw jest ciągiem, którego można używać w zapytaniach XPath, chociaż nie zostało to przetestowane.
HRESULT AddAttribute(IXMLDOMNode *pNode, LPCWSTR name, LPCWSTR value)
Ta metoda dodaje nowy atrybut do istniejącego węzła w dokumencie XML. Patrz tabela 53.
Tabela 53. HRESULT AddAttribute
| Parametr | Opis |
|---|---|
| pNode | 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żna dodać go jako element podrzędny do innego węzła, wywołując metodę appendChild elementu nadrzędnego.
Funkcje pomocnicze
Funkcja szablonu CreateInstance
HRESULT CreateInstance(IWizardPageContainer *pContainer, LPCTSTR type, I **ppObject)
Ta funkcja jest zdefiniowana w pliku IWizardPageContainer.h i zapewnia bezpieczną otokę nad metodą 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.
Funkcja szablonu GetService
void GetService(IWizardPageContainer *pContainer, I **ppService)
Ta funkcja jest zdefiniowana w pliku IWizardPageContainer.h i zapewnia bezpieczną otokę 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 ITSVariableBag zamiast tego można użyć metody TSVariables klasy WizardPageImpl ).
UDI Wizard Designer Configuration File Diagram Reference
Ten plik jest używany przez narzędzie UDI Wizard Designer. Dla każdego niestandardowego pliku .dll tworzony jest osobny plik, który może zawierać niestandardowe edytory stron kreatora, niestandardowe zadania lub niestandardowe walidatory. Plik musi kończyć się.config i znajdować się w folderze installation_folder\Bin\Config (gdzie installation_folder jest folderem , w którym zainstalowano zestaw MDT).
Tabela 54 zawiera listę elementów w pliku konfiguracyjnym UDI Wizard Designer i ich opisy. Element DesignerConfig jest węzłem głównym dla tego odwołania.
Tabela 54. Elementy w pliku konfiguracyjnym UDI Wizard Designer i ich opisy
| Nazwa elementu | Opis |
|---|---|
| DesignerConfig | Określa katalog główny dla wszystkich pozostałych elementów |
| DesignerMappings (Mapy projektantów) | Grupuje zestaw elementów strony |
| Strona | Określa edytor stron kreatora do załadowania do narzędzia UDI Wizard Designer, który służy do edytowania ustawień konfiguracji strony kreatora |
| Parametr | Określa parametr, który jest przekazywany do elementu nadrzędnego Task lub Validator i odpowiada elementowi Setter w pliku konfiguracyjnym UDI Wizard Uwaga: Atrybuty tego elementu są różne, jeśli element nadrzędny jest elementem Task lub Validator . |
| Zadanie | Określa zadanie w bibliotece zadań |
| Element zadania | Określa grupę parametrów przekazywanych do zadania |
| Biblioteka zadań | Grupuje zestaw elementów zadania |
| Walidator | Określa weryfikator w bibliotece weryfikatora |
| Biblioteka walidatora | Grupuje zestaw elementów 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ń | Po pierwsze: ten element jest wymagany. |
| Elementy nadrzędne | Brak |
| Spis treści | DesignerMappings, BibliotekaZadań, BibliotekaWalidatorów |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<DesignerConfig>
+ <TaskLibrary>
+ <ValidatorLibrary>
+ <DesignerMappings>
</DesignerConfig>
DesignerMappings (Mapy projektantów)
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 bibliotece DLL odpowiadającej temu plikowi konfiguracji UDI Wizard Designer nie ma niestandardowej strony kreatora). |
| 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 do UDI Wizard 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 (Mapy projektantów) |
| Spis treści | Poprawnie sformułowana zawartość XML |
Atrybuty elementów
Tabela 58 zawiera listę atrybutów elementu Page i opis każdego z nich.
Tabela 58. Atrybuty i odpowiadające im wartości elementu strony
| Atrybut | Opis |
|---|---|
| Opis | Określa tekst dostarczający informacji o parametrze, który jest wyświetlany w narzędziu UDI Wizard Designer |
| DesignerAssembly | 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 MDT). |
| DesignerType (TypProjektanta) | 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 programu Microsoft .NET). |
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę edytora strony, która jest wyświetlana w narzędziu UDI Wizard Designer |
| Biblioteka 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 zestaw MDT, a platforma to x86 w przypadku wersji 32-bitowej lub x64 w przypadku wersji 64-bitowej). Uwaga: Upewnij się, że architektura procesora DLL jest zgodna z zainstalowaną architekturą procesora MDT. Jeśli na przykład zainstalowano 32-bitową wersję zestawu MDT, upewnij się, że używasz 32-bitowej biblioteki DLL dla strony kreatora. |
| Obraz | Określa nazwę obrazu strony w formacie PNG (Portable Network Graphics) (plik .png musi istnieć w folderze installation_folder\Bin\Images (gdzie installation_folder jest folderem , w którym zainstalowano zestaw MDT). |
| Type | Określa edytor stron kreatora i musi być zgodny z nazwą użytą podczas rejestrowania strony niestandardowej |
Uwagi
Kreator UDI Wizard Designer używa elementu Page jak szablonu do utworzenia początkowego kodu XML dla nowego kreatora. Kreator UDI Wizard Designer sprawdza poprawność schematu, aby upewnić się, że elementy strony i elementy podrzędne mają prawidłowy format. Ten element zapewnia mapowanie między typem strony Kreator UDI a informacjami potrzebnymi Kreatorowi UDI Designer do edycji i tworzenia stron tego typu za pomocą niestandardowego edytora stron.
Przykład
Żaden.
Parametr
Ten element określa parametr, który jest przekazywany do elementu nadrzędnego Task lub Validator i odpowiada elementowi Setter w pliku konfiguracyjnym Kreatora UDI.
Informacje o elemencie
Tabela 59 zawiera informacje o elemencie Param .
Tabela 59. Informacje o elemencie parametru
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden element dla każdego elementu nadrzędnego elementu zadania lub weryfikatora |
| Elementy nadrzędne | Element zadania, weryfikator |
| Spis treści | Poprawnie sformułowana zawartość XML |
Atrybuty elementów
Tabela 60 zawiera listę atrybutów elementu Param i opis każdego z nich.
Tabela 60. Atrybuty i odpowiadające im wartości elementu Param
| Atrybut | Opis |
|---|---|
| Opis | Określa tekst dostarczający informacji o parametrze, który jest wyświetlany w narzędziu UDI Wizard Designer Uwaga: Ten atrybut jest prawidłowy tylko dla elementu Validator. |
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę parametru walidatora, która jest wyświetlana dla odpowiedniej strony Kreatora UDI w UDI Wizard Designer (Ta nazwa jest zwykle bardziej opisowa niż atrybut Name). Uwaga: Ten atrybut jest prawidłowy tylko dla elementu Validator. |
| Nazwa | Określa nazwę parametru, który jest przekazywany do zadania lub walidatora, w zależności od elementu nadrzędnego (Ten atrybut stanie się atrybutem Property w elemencie Setter w pliku konfiguracyjnym Kreatora UDI). Uwaga: Ten parametr jest używany zarówno dla elementów nadrzędnych elementu TaskItem , jak i walidatora . |
Uwagi
Żaden.
Przykład
Żaden.
Zadanie
Ten element określa zadanie w bibliotece zadań.
Informacje o elemencie
Tabela 61 zawiera informacje o elemencie Zadanie .
Tabela 61. Informacje o elemencie zadania
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden w elemencie TaskLibrary (ten element nie jest opcjonalny, jeśli element TaskLibrary jest określony). |
| Elementy nadrzędne | Biblioteka zadań |
| Spis treści | Element zadania |
Atrybuty elementów
Tabela 62 zawiera listę atrybutów elementu Task i opis każdego z nich.
Tabela 62. Atrybuty i odpowiadające im wartości elementu zadania
| Atrybut | Opis |
|---|---|
| Opis | Określa tekst dostarczający informacji o zadaniu, który jest wyświetlany w narzędziu UDI Wizard Designer |
| Biblioteka 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 zestaw 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 oraz w narzędziu UDI Wizard Designer |
| Type | Określa typ zadania, który jest zarejestrowany w rejestrze fabrycznym 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 elementu zadaniaTaskItem
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden dla każdego elementu zadania |
| Elementy nadrzędne | Zadanie |
| Spis treści | Parametr |
Atrybuty elementów
Tabela 64 zawiera listę atrybutów elementu TaskItem i opis każdego z nich.
Tabela 64. Atrybut i odpowiadające mu wartości elementu TaskItem
| Atrybut | Opis |
|---|---|
| Typ | Określa typ elementu, który zostanie utworzony w pliku konfiguracyjnym Kreatora udi. Zostanie utworzony element XML odpowiadający wartości tego atrybutu. Jeśli na przykład wartość tego atrybutu to File, element File zostanie utworzony w pliku konfiguracyjnym Kreatora UDI. 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 drugi element podrzędny Param z atrybutem Name ustawionym na Dest) - Funkcja ustawiająca, która wymaga jednego elementu podrzędnego Param |
Uwagi
Żaden.
Przykład
Żaden.
Biblioteka zadań
Ten element grupuje zestaw elementów zadania .
Informacje o elemencie
Tabela 65 zawiera informacje o elemencie TaskLibrary .
Tabela 65. Informacje o elemencie biblioteki zadań
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub jeden w elemencie DesignerConfig (Ten element jest opcjonalny, jeśli w bibliotece DLL nie ma zadań niestandardowych odpowiadających temu plikowi konfiguracji UDI Wizard Designer). |
| 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>
Walidator
Ten element określa walidator w bibliotece walidatorów.
Informacje o elemencie
Tabela 66 zawiera informacje o elemencie walidatora .
Tabela 66. Informacje o elemencie walidatora
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub więcej w elemencie ValidatorLibrary (ten element jest opcjonalny). |
| Elementy nadrzędne | Biblioteka walidatora |
| Spis treści | Parametr |
Atrybuty elementów
Tabela 67 zawiera listę atrybutów elementu Validator i opis każdego z nich.
Tabela 67. Atrybuty i odpowiadające im wartości elementu walidatora
| Atrybut | Opis |
|---|---|
| Opis | Określa tekst dostarczający informacji o weryfikatorze, który jest wyświetlany w narzędziu UDI Wizard Designer |
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę walidatora wyświetlaną w UDI Wizard Designer (Ta nazwa jest zwykle bardziej opisowa niż atrybut Name). |
| Biblioteka DLL | Określa nazwę pliku .dll skojarzonego z weryfikatorem (plik .dll musi istnieć w folderze installation_folder\Templates\Distribution\Tools\platform (gdzie installation_folder jest folderem , w którym zainstalowano zestaw MDT, a platforma to x86 dla wersji 32-bitowej lub x64 dla wersji 64-bitowej). |
| Nazwa | Określa nazwę walidatora, która jest wyświetlana na odpowiedniej stronie Kreatora UDI oraz w narzędziu UDI Wizard Designer |
| Type | Określa typ weryfikatora, który jest rejestrowany przez czynnik rejestru i używany do wywoływania określonego weryfikatora w pliku .dll |
Uwagi
Żaden.
Przykład
Żaden.
Biblioteka walidatora
Ten element grupuje zestaw elementów walidatora .
Informacje o elemencie
Tabela 68 zawiera informacje o elemencie ValidatorLibrary .
Tabela 68. Informacje o elemencie ValidatorLibrary
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub jeden w elemencie DesignerConfig (Ten element jest opcjonalny, jeśli w bibliotece DLL nie ma niestandardowych modułów sprawdzania poprawności odpowiadających temu plikowi konfiguracyjnemu UDI Wizard Designer). |
| Elementy nadrzędne | DesignerConfig |
| Spis treści | Walidator |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<DesignerConfig> + <TaskLibrary> - <ValidatorLibrary> +<Validator DLL="" Description="Wymaga tekstu w polu" Type="Microsoft.Wizard.Validation.NonEmpty" Name="NonEmpty"> +<Validator DLL="" Description="Nie zezwala na pewne znaki w polu" Type="Microsoft.Wizard.Validation.InvalidChars" Name="InvalidChars"> +<Validator DLL="" Description="Musi być zgodny ze wstępnie zdefiniowanym wzorcem" Type="Microsoft.Wizard.Validation.RegEx" Name=" NamedPattern"> +<Validator DLL="" Description="Wymagaj, aby zawartość była zgodna z wyrażeniem regularnym" Type="Microsoft.Wizard.Validation.RegEx" Name="RegEx"></ValidatorLibrary> + <DesignerMappings></DesignerConfig>
Dokumentacja UDI Wizard Designer
Sterowanie
Kontrolki używane do tworzenia niestandardowych edytorów stron kreatora do użycia w UDI Wizard Designer to wystąpienia kontrolki użytkownika WPF. W tabeli 69 wymieniono kontrolki, za pomocą których można tworzyć niestandardowe edytory stron kreatora.
Tabela 69. Kontrolki, których można użyć do utworzenia niestandardowych edytorów stron kreatora
| Sterowanie | Opis |
|---|---|
| KolekcjaTControl | Ta kontrolka służy do edytowania danych przechowywanych w elemencie Dane w elemencie Page . |
| PoleElementControl | Ta kontrolka służy do edytowania pola, które jest zwykle połączone z kontrolką TextBox na stronie .xaml. |
| Kontrolka ustawiająca | Ta kontrolka służy do modyfikowania wartości elementu ustawiającego w pliku konfiguracyjnym Kreatora UDI. |
KolekcjaTControl
Ta kontrolka zapewnia wiele możliwości edytowania danych. Najlepszym sposobem, aby dowiedzieć się, jak używać tej kontrolki, jest przyjrzenie się przykładowi, który pokazuje, jak edytować dane w elemencie Dane strony. W szczególności w przykładzie pokazano, jak dodawać, usuwać i edytować elementy w tej kontrolce.
PoleElementControl
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 konfigurowania wartości domyślnej pola na stronie kreatora za pomocą 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 (Dane pól)
Ta właściwość ciągu zawiera informacje umożliwiające połączenie kontrolki 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 nazywa się ControlRoot i jest określony w parametrze ElementName . Powiązanie jest wykonywane z właściwością DataContext.Location interfejsu edytora strony ControlRoot . DataContext to model widoku, który wskazuje element Page w pliku konfiguracyjnym Kreatora UDI. Lokalizacja jest właściwością widoku, który zwraca listę możliwych lokalizacji i jest zdefiniowany przez element Dane w pliku konfiguracyjnym Kreatora UDI. Każda lokalizacja jest definiowana przez element DataItem w pliku konfiguracyjnym kreatora UDI.
HeaderText (Tekst nagłówka)
Ta właściwość ciągu umożliwia określenie nagłówka dla kontrolki FieldElementControl . Nagłówek pełni rolę tytułu kontrolki i jest sformatowany jako pogrubiony, pomarańczowy tekst wyświetlany bezpośrednio nad kontrolką.
InstructionText (Tekst instrukcji)
Ta właściwość ciągu umożliwia określenie tekstu informacyjnego dla kontrolki PoleElementControl . Zazwyczaj tekst jest używany do krótkiego opisu pola oraz wyjaśnienia, jak konfiguracja pola wpłynie na odpowiednią stronę kreatora.
HideEnableButton (UkryjEnableButton)
Ta właściwość logiczna pozwala kontrolować widoczność przycisku, który zmienia stan między odblokowanym a zablokowanym (włączonym lub wyłączonym). Jeśli ustawiono na:
To prawda, że przycisk nie jest widoczny
Fałsz, przycisk jest widoczny (jest to wartość domyślna).
HideDefaultTab
Ta właściwość logiczna umożliwia sterowanie widocznością sekcji zawierającej kontrolkę służącą do ustawiania wartości domyślnej. Mimo że ta właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, a raczej sekcja, którą można ukryć. Jeśli ustawiono na:
To prawda, że sekcja nie jest widoczna
Fałsz, sekcja jest widoczna (jest to wartość domyślna).
HideBorder (UkryjObramowanie)
Ta właściwość logiczna umożliwia sterowanie widocznością obramowania wokół kontrolki pola. Jeśli ustawiono na:
To prawda, że obramowanie nie jest widoczne
Fałsz, obramowanie jest widoczne (jest to wartość domyślna).
Ukryj obraz
Ta właściwość logiczna umożliwia sterowanie widocznością obrazu konfigurowaną przez właściwość FieldImageSource . Jeśli ustawiono na:
To prawda, że obraz nie jest widoczny
Fałsz, obraz jest widoczny (jest to wartość domyślna).
HideValidationTab (UkryjKartę sprawdzania poprawności)
Ta właściwość logiczna pozwala kontrolować widoczność sekcji, w której zarządzana jest lista walidatorów. Mimo że ta właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, a raczej sekcja, którą można ukryć. Jeśli ustawiono na:
To prawda, że sekcja nie jest widoczna
Fałsz, sekcja jest widoczna (jest to wartość domyślna).
HideSummaryTab
Ta właściwość logiczna umożliwia sterowanie widocznością sekcji, w której jest konfigurowany podpis podsumowania pola. Podpis i odpowiadająca mu wartość pola są wyświetlane na typie strony kreatora Strona podsumowania w przepływie etapowym. Mimo że ta właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, a raczej sekcja, którą można ukryć. Jeśli ustawiono na:
To prawda, że sekcja nie jest widoczna
Fałsz, sekcja jest widoczna (jest to wartość domyślna).
HideTaskSequenceTab
Ta właściwość logiczna umożliwia sterowanie widocznością sekcji, w której konfigurujesz zmienną sekwencji zadań odpowiadającą temu polu. Mimo że ta właściwość odwołuje się do karty, w kontrolce FieldElementControl nie ma karty, a raczej sekcja, którą można ukryć. Jeśli ustawiono na:
To prawda, że sekcja nie jest widoczna
Fałsz, sekcja jest widoczna (jest to wartość domyślna).
Kontrolka ustawiająca
Ta kontrolka służy do modyfikowania wartości elementu Setter w pliku konfiguracyjnym Kreatora UDI. Ta kontrolka zawiera kontrolkę podrzędną służącą do modyfikowania wartości elementu ustawiającego .
Przykład
Poniższy fragment pliku .xaml ilustruje użycie kontrolki SetterControl do modyfikowania elementu Setter o nazwie KeyLocationSetter za pomocą 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
Dane ustawiające
Musisz powiązać to z właściwością widoku lub modelu widoku, która łączy się z ustawiającą. Jest to podobne do sposobu powiązania z polem, zgodnie z opisem dla kontrolki FieldElementControl.
HeaderText (Tekst nagłówka)
Ta właściwość umożliwia ustawienie tekstu, który będzie wyświetlany w nagłówku kontrolki. Pomyśl o tej właściwości jako o tytule kontrolki; Domyślnie jest on wyświetlany jako pogrubiony, pomarańczowy tekst.
InstructionText (Tekst instrukcji)
Ustaw tę właściwość na tekst, który ma być wyświetlany poniżej nagłówka — zwykle jest to tekst instrukcji informujący użytkownika edytora niestandardowego, kiedy i dlaczego chce zmodyfikować zachowanie pola.
Interfejsy
W tabeli 70 wymieniono interfejsy, za pomocą których można tworzyć niestandardowe edytory stron kreatora.
Tabela 70. Interfejsy, za pomocą których można tworzyć niestandardowe edytory stron kreatora
| Berło | Opis |
|---|---|
| IDataService | Ten interfejs służy do łączenia pól z elementami danych w pliku konfiguracyjnym Kreatora kodu UDI. |
| IMessageBoxService | Ten interfejs zapewnia dostęp do metod wyświetlania okien komunikatów. |
IDataService
Ten interfejs zawiera kilka właściwości i metod, ale potrzebna jest tylko jedna właściwość. Jest to jedyna udokumentowana tutaj właściwość.
Możesz użyć wstrzykiwania zależności, aby uzyskać wskaźnik do tego interfejsu za pomocą 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 usługi IDataService .
Tabela 71. Właściwości interfejsu usługi IDataService
| Berło | Opis |
|---|---|
| CurrentPage (Bieżąca strona) | Ta właściwość zapewnia dostęp do elementów, atrybutów i wartości XML poniżej kontekstu bieżącej strony edytowanej w pliku konfiguracyjnym Kreatora UDI |
CurrentPage (Bieżąca strona)
XElement CurrentPage { get; set; }
Ta właściwość umożliwia uzyskanie dostępu do pliku XML bieżącej strony. Nigdy nie należy ustawiać tej właściwości, ale można dowolnie modyfikować kod XML strony. Przykładowy edytor stron z przykładami modyfikowania pliku XML. Ta właściwość jest używana przede wszystkim w przypadku danych niestandardowych. W przypadku pól i właściwości (ustawiających) możesz użyć wstępnie utworzonych kontrolek, które zadbają o wszystkie szczegóły.
IMessageBoxService
Ten interfejs zapewnia dostęp do metod wyświetlania okien komunikatów. Być może zastanawiasz się, po co Ci interfejs do wyświetlania okna komunikatu. Rzeczywistość jest taka, że nie: Microsoft używa tego interfejsu w kodzie, ponieważ pomaga on w pisaniu automatycznych testów dla stron projektanta.
Korzystanie z tych metod ma jednak jedną użyteczną korzyść: okna dialogowe zawsze mają "właściciela" ustawionego na Kreatora UDI, co zapewnia, że okno dialogowe jest poprawnie zgrupowane z oknem głównym.
Możesz użyć wstrzykiwania zależności, aby uzyskać wskaźnik do tego interfejsu za pomocą kodu takiego jak ten w klasie:
[Dependency]
public IMessageBoxService MessageBoxes { get; set; }
Metody
Tabela 72 zawiera listę metod interfejsu IMessageBoxService .
Tabela 72. Metody dla interfejsu IMessageBoxService
| Metoda | Opis |
|---|---|
| ShowMessageBox (Pole wiadomości ShowMessageBox) | Ta przeciążona metoda służy do wyświetlania okna komunikatu z następującymi elementami: - ShowMessageBox(String message, String podpis, MessageBoxImage icon) - ShowMessageBox(wiadomość ciągowa, podpis ciągu, przycisk MessageBoxButton, ikona MessageBoxImage) - ShowMessageBox(wyjątek wyjątku) |
| ShowDialogWindow (Pokaż okno dialogowe) | Ta metoda umożliwia utworzenie nowego okna dialogowego. |
| ShowWizardWindow (Pokaż okno kreatora) | Ta metoda służy do wyświetlania edytora niestandardowego w oknie dialogowym, które zawiera przyciski Dalej i Wstecz służące do nawigacji. |
ShowMessageBox (Pole wiadomości ShowMessageBox)
Ta metoda powoduje wyświetlenie okna komunikatu, które jest polem podrzędnym edytora stron kreatora niestandardowego. Ten element jest przeciążony: Tabela 73 zawiera listę członków i krótki opis każdego z nich. Aby uzyskać pełne informacje o każdym elemencie (w tym składnię, użycie i przykłady), zobacz sekcję odpowiadającą poszczególnym elementom.
Tabela 73. Przeciążone elementy członkowskie metody ShowMessagBox
| Członek zespołu | Opis |
|---|---|
| ShowMessageBox(String message, String podpis, MessageBoxImage icon) | Wyświetla okno komunikatu z ikoną i przyciskiem OK |
| ShowMessageBox(wiadomość ciągowa, podpis ciągu, 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 z informacją o wyjątku i przyciskiem OK |
ShowMessageBox(String message, String podpis, MessageBoxImage icon)
void ShowMessageBox(String message, String caption, MessageBoxImage icon);
Ta metoda powoduje wyświetlenie okna komunikatu z przyciskiem OK . Patrz tabela 74.
Tabela 74. Parametry metody ShowMessageBox(String message, String podpis, MessageBoxImage icon)
| Parametr | Opis |
|---|---|
| Wiadomość | Komunikat wyświetlany w obszarze zawartości okna komunikatu |
| podpis | Tekst, który ma być wyświetlany na pasku tytułu okna dialogowego |
| Ikona | Typ ikony wyświetlanej w oknie wiadomości |
ShowMessageBox(wiadomość ciągowa, podpis ciągu, przycisk MessageBoxButton, ikona MessageBoxImage)
MessageBoxResult ShowMessageBox(string message, string caption, MessageBoxButton button, MessageBoxImage icon);
Ta metoda powoduje wyświetlenie okna komunikatu z zestawem przycisków, które mają być wyświetlane, oraz informację, który przycisk został wybrany. Patrz tabela 75.
Tabela 75. Parametry metody ShowMessageBox(wiadomość ciągowa, podpis ciągu, przycisk MessageBoxButton, ikona MessageBoxImage)
| Parametr | Opis |
|---|---|
| Wiadomość | Komunikat wyświetlany w obszarze zawartości okna komunikatu |
| podpis | Tekst, który ma być wyświetlany na pasku tytułu okna dialogowego |
| Przycisk | Które przyciski mają być wyświetlane |
| Ikona | Typ ikony wyświetlanej w oknie wiadomości |
ShowMessageBox(wyjątek wyjątku)
void ShowMessageBox(Exception exception);
Ta metoda powoduje wyświetlenie okna komunikatu z informacją o wyjątku. W tym oknie komunikatu znajduje się jeden przycisk OK . Patrz 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 użyto wyjątku. wiadomość jako zawartość). |
ShowDialogWindow (Pokaż okno dialogowe)
void ShowDialogWindow(Type viewType, DialogInteraction dialogPayload);
Ta metoda tworzy nowe okno dialogowe, którego zawartość stanowi tekst wprowadzany w parametrze viewType . Narzędzie UDI Designer tworzy nowe wystąpienie tego typu i opakowuje je w okno dialogowe zawierające przyciski OK i Anuluj.
Dane są przekazywane do kontrolki za pomocą parametru dialogPayload. Rozwiązanie SampleEditor w katalogu SDK zawiera przykład użycia tej funkcji.
ShowWizardWindow (Pokaż okno kreatora)
void ShowWizardWindow(Type viewType, DialogInteraction dialogPayload);
Ta metoda pozwala na wyświetlenie edytora niestandardowego w oknie dialogowym, które zawiera przyciski Dalej i Wstecz służące do nawigacji. Firma Microsoft nie udostępniła przykładowego sposobu użycia tej metody.
Plik konfiguracji Kreatora UDI — wykaz schematu
Ten plik jest używany przez Kreatora UDI i konfigurowany przez Kreatora UDI Designer. Ten plik służy do konfigurowania:
Strony kreatora wyświetlone w Kreatorze kodu UDI
Kolejność stron kreatora w Kreatorze kodów UDI
Ustawienia pól na poszczególnych stronach kreatora
Dostępne grupy etapów w narzędziu UDI Wizard Designer
Dostępne etapy w ramach każdego kreatora wdrażania w narzędziu UDI Wizard Designer
77 wyświetla elementy w pliku konfiguracyjnym UDI Wizard i ich opisy. Element Wizard jest węzłem głównym dla tego odwołania.
Tabela 77. Elementy w pliku konfiguracyjnym kreatora UDI i ich opisy
| Nazwa elementu | Opis |
|---|---|
| Data (Dane) | Grupuje poszczególne elementy DataItem w elemencie Page i jest nazywany atrybutem Name . |
| DataItem (Element danych) | Grupuje poszczególne elementy Setter w elemencie Page . Dane hierarchiczne można utworzyć, uwzględniają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 zawierać element DataItem dla nazwy wyświetlanej i inny element DataItem dla odpowiedniej litery dysku. |
| Domyślne | Określa wartość domyślną dla pola określonego w elemencie nadrzędnym Field lub RadioGroup . Wartością domyślną jest wartość ujęta w nawias kwadratowy dla tego elementu. |
| Biblioteka DLL | Określa bibliotekę DLL, do której mają się odwoływać Kreator UDI i Kreator UDI Designer. |
| Biblioteki DLL | Grupuje poszczególne elementy biblioteki DLL . |
| Błąd | Określa możliwy kod błędu, który może zostać zwrócony przez zadanie. Wartość kodu błędu jest zwracana przez HRESULT zadania i jest przechwytywana przez ten element w celu zapewnienia bardziej szczegółowych informacji o błędzie. |
| Kod wyjścia | Określa możliwy kod zakończenia zadania. Kody zakończenia to kody zwrotne, których oczekuje 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 zwrotne, których nie ma na liście w innych elementach ExitCode . |
| ExitCodes (Kody wyjścia) | Grupuje zestaw elementów ExitCode i Error dla elementu Task lub elementu Error . |
| Pole | Określa wystąpienie kontrolki w elemencie Page , która służy do dostosowywania danych XML. Nie wszystkie kontrolki umożliwiają dostosowywanie za pomocą języka XML — tylko kontrolki używające elementu Field . |
| Pola | Grupuje poszczególne elementy pól 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 File , aby skopiować więcej niż jeden plik w ramach jednego zadania. |
| Strona | Określa wystąpienie strony oraz uwzględnia wszystkie ustawienia konfiguracyjne strony. |
| PageRef (Odnośnik strony) | Określa odniesienie do wystąpienia strony wewnątrz stołu montażowego w grupie etapów. |
| Strony | Grupuje poszczególne elementy strony . |
| RadioGroup | Określa grupę przycisków radiowych w elemencie Field . |
| Grupa etapowa | Określa grupę składającą się z jednego lub większej liczby etapów. |
| Grupy etapowe | Grupuje zestaw grup etapów w pliku konfiguracyjnym Kreatora udi. |
| Rozgrywający | Określa ustawienie wartości właściwości właściwości, której nazwa jest określona przez właściwość właściwości . |
| Etap | Określa etap w grupie StageGroup i zawiera co najmniej jeden element PageRef . |
| Styl | Grupuje poszczególne elementy ustawiające , które konfigurują wygląd i działanie Kreatora UDI, w tym tytuł wyświetlany w górnej części kreatora i obraz transparentu wyświetlany w Kreatorze identyfikatorów UDI. |
| Zadanie | Określa zadanie, które ma zostać uruchomione na stronie określonej w elemencie strony nadrzędnej. |
| Zadania | Grupuje zestaw zadań dla elementu strony . |
| Walidator | Określa weryfikator dla kontrolki pola określonej w nadrzędnym elemencie Field . |
| Kreator | Określa katalog główny dla wszystkich pozostałych elementów. |
Data (Dane)
Ten element grupuje poszczególne elementy DataItem w elemencie Page i jest nazwany przez atrybut Name .
Informacje o elemencie
Tabela 78 zawiera informacje o elemencie Dane .
Tabela 78. Informacje o elementach danych
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub więcej w każdym elemencie strony (ten element jest opcjonalny). |
| Elementy nadrzędne | Page, DataItem |
| Spis treści | DataItem, Setter |
Atrybuty elementów
Tabela 79 zawiera listę atrybutów elementu Dane i opis każdego z nich.
Tabela 79. Atrybuty i odpowiadające im wartości elementu danych
| Atrybut | Opis |
|---|---|
| Nazwa | Określa nazwę elementu danych . |
Uwagi
Atrybut Name umożliwia kodowi pobieranie określonego zestawu danych.
Przykład
Żaden.
DataItem (Element danych)
Ten element grupuje poszczególne elementy Setter w elemencie Page . Dane hierarchiczne można utworzyć, uwzględniają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 zawierać 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. Informacje o elemencie elementu danych
| 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, Ustawiacz |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Domyślne
Ten element określa wartość domyślną dla pola określonego w elemencie nadrzędnym Field lub RadioGroup . Wartością domyślną jest wartość ujęta w nawias kwadratowy tego elementu.
Informacje o elemencie
Tabela 81 zawiera informacje o elemencie domyślnym .
Tabela 81. Domyślne informacje o elemencie
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub więcej w obrębie elementu Field lub RadioGroup (ten element jest opcjonalny). |
| Elementy nadrzędne | Pole, RadioGroup |
| Spis treści | Może być dowolną, poprawnie sformułowaną zawartością XML, ale zazwyczaj jest to standardowy tekst. |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
W poniższym przykładzie wartość domyślna pola TimeZone (Strefa czasowa ) jest ustawiona jako "Standardowy czas pacyficzny":
<Field Name="TimeZone" Enabled="true" VarName="OSDTimeZone" Summary="Time Zone:">
<Default>Pacific Standard Time</Default>
Biblioteka DLL
Ten element określa bibliotekę DLL do załadowania i odwołania przez Kreatora UDI i Kreatora UDI Kreatora Designer.
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 w elemencie DLL |
| Element nadrzędny | Biblioteki DLL |
| Spis treści | Brak zawartości dozwolonej dla tego elementu |
Atrybuty elementów
Tabela 83 zawiera listę atrybutów elementu DLL i 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, do której będą się odwoływać Kreator UDI i Kreator UDI Designer |
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 | Kreator |
| Spis treści | Biblioteka 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 wychwytywana przez HRESULT zadania w celu zapewnienia bardziej szczegółowych informacji o błędzie.
Informacje o elemencie
Informacje o elemencie Error znajduje się w tabeli 85.
Tabela 85. Informacje o elemencie błędu
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub więcej w obrębie każdego elementu ExitCode (ten element jest opcjonalny). |
| Elementy nadrzędne | ExitCodes (Kody wyjścia) |
| Spis treści | Poprawnie sformułowana zawartość XML |
Atrybuty elementów
Tabela 86 zawiera listę atrybutów elementu Error i opis każdego z nich.
Tabela 86. Informacje o elemencie błędu
| Atrybut | Opis |
|---|---|
| Stan | Określa stan zwrócony zadania, które napotkało błąd. Zazwyczaj wartość tego atrybutu to Błąd. Ta wartość jest wyświetlana w kolumnie Województwo na stronie kreatora w Kreatorze kodu UDI. |
| Text (Tekst) | Określa tekst opisujący warunek błędu, który napotkało zadanie. |
| Type | Określa, czy ten element oznacza błąd, ostrzeżenie czy sukces. Wartość określona wpolu Type musi być unikatowa w elemencie ExitCodes . Prawidłowe wartości tego elementu: - **0.**Element reprezentuje sukces. - 1. Element reprezentuje ostrzeżenie. - -1. Ten element reprezentuje błąd. |
| Wartość | Określa wartość kodu, który zadanie zwraca jako wartość liczbową. Określenie wartości gwiazdki (*) wskazuje domyślny element dla kodów zwrotnych, które nie są wymienione w innych elementach błędu . |
Uwagi
Żaden.
Przykład
Żaden.
Kod wyjścia
Ten element określa możliwy kod zakończenia zadania. Kody zakończenia to kody zwrotne, których oczekuje 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 zwrotne, których nie ma na liście 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 ExitCodes elemencie (ten element jest opcjonalny). |
| Elementy nadrzędne | ExitCodes (Kody wyjścia) |
| Spis treści | Co najmniej jeden element ExitCode i zero lub więcej elementów Error |
Atrybuty elementów
Tabela 88 zawiera listę atrybutów elementu ExitCode i opis każdego z nich.
Tabela 88. Atrybuty i odpowiadające im wartości elementu ExitCode
| Atrybut | Opis |
|---|---|
| Stan | Określa stan zwracany przez zadanie. Wartość tego atrybutu jest wyświetlana w kolumnie Województwo na odpowiedniej stronie kreatora w Kreatorze kodu UDI. Można użyć dowolnych wartości tego atrybutu, które są znaczące dla danego zadania. Poniżej przedstawiono typowe wartości używane dla tego atrybutu: - Sukces - Ostrzeżenie - Błąd |
| Text (Tekst) | Określa tekst opisowy istniejącego kodu zadania. |
| Type | Określa, czy ten element oznacza błąd, ostrzeżenie czy sukces. Wartość określona w typie musi być unikatowa w elemencie ExitCodes . Prawidłowe wartości tego elementu: - 0. Element reprezentuje sukces. - 1. Element reprezentuje ostrzeżenie. - -1. Ten element reprezentuje błąd. |
| Wartość | Określa wartość kodu, który zadanie zwraca jako wartość liczbową. Określenie wartości gwiazdki (*) wskazuje domyślny element dla kodów powrotnych, które nie są wymienione w innych elementach ExitCode . |
Uwagi
Żaden.
Przykład
Żaden.
ExitCodes (Kody wyjścia)
Ten element grupuje zestaw elementów ExitCode i Error dla elementu Task lub Error .
Informacje o elemencie
Tabela 89 zawiera informacje o elemencie ExitCodes .
Tabela 89. ExitCodes — informacje o elemencie
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Po jednym w każdym elemencie zadania |
| Elementy nadrzędne | Zadanie |
| Spis treści | Błąd, kod wyjścia |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Pole
Ten element określa wystąpienie formantu w elemencie Page służącego do dostosowywania za pomocą kodu XML. Nie wszystkie kontrolki umożliwiają dostosowywanie za pomocą języka XML — tylko kontrolki używające 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ślnie, Validator |
Atrybuty elementów
Tabela 91 zawiera listę atrybutów elementu Field wraz z opisem każdego z nich.
Tabela 91. Atrybuty i odpowiadające im wartości elementu pola
| Atrybut | Opis |
|---|---|
| Włączone | Określa, czy pole jest włączone dla danych wejściowych użytkownika (atrybut może mieć wartość Prawda lub Fałsz). |
| Nazwa | Określa nazwę pola. |
| Podsumowanie | Określa tekst opisowy wyświetlany na stronie Kreatora podsumowań dla wartości ustawianej przez to pole |
| VarName (Nazwa zmiennej) | Określa nazwę zmiennej sekwencji zadań odczytaną lub skonfigurowaną przy użyciu pola w elemencie nadrzędnym Field |
Uwagi
Ten element może zawierać zero lub więcej elementów Default i zero lub więcej elementów Validator .
Przykład
Żaden.
Pola
Ten element grupuje poszczególne elementy Field w elemencie Page .
Informacje o elemencie
Tabela 92 zawiera informacje o elemencie Fields .
Tabela 92. Informacje o elemencie pól
| 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 File , aby skopiować więcej niż jeden plik w ramach jednego zadania.
Informacje o elemencie
Tabela 93 zawiera informacje o elemencie File .
Tabela 93. Informacje o elemencie pliku
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden dla każdego zadania, 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 opis każdego z nich.
Tabela 94. Atrybuty i odpowiadające im 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, który kopiuje typ zadania Microsoft.Wizard.CopyFilesTask . Ten atrybut obsługuje symbole wieloznaczne, dzięki czemu można kopiować wiele plików za pomocą jednego elementu File . 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 konfiguracyjne 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 w każdym elemencie Pages |
| Elementy nadrzędne | Strony |
| Spis treści | Dane, Pola, Ustawiająca, Zadania |
Atrybuty elementów
Tabela 96 zawiera listę atrybutów elementu Page wraz z opisem każdego z nich.
Tabela 96. Atrybuty i odpowiadające im wartości elementu strony
| Atrybut | Opis |
|---|---|
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę strony kreatora wyświetlanej w narzędziu UDI Wizard Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
| Nazwa | Określa nazwę strony kreatora wyświetlanej w narzędziu UDI Wizard Designer. |
| Type | Określa typ strony kreatora, który odnosi się bezpośrednio do określonej strony kreatora w bibliotece DLL. |
Uwagi
Żaden.
Przykład
Żaden.
PageRef (Odnośnik strony)
Ten element określa odwołanie do wystąpienia strony w ramach Stage w StageGroup.
Informacje o elemencie
Tabela 97 zawiera informacje o elemencie PageRef .
Tabela 97. Informacje o elemencie PageRef
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden element w elemencie stołu montażowego |
| Elementy nadrzędne | Etap |
| Spis treści | Brak |
Atrybuty elementów
Tabela 98 zawiera listę atrybutów elementu PageRef wraz z jego opisem.
Tabela 98. Atrybuty i odpowiadające im wartości elementu PageRef
| Atrybut | Opis |
|---|---|
| Strona | Określa wystąpienie strony w ramach stołu montażowego w grupie StageGroup. Ustaw tę wartość na atrybut Name elementu Page . |
Uwagi
Żaden.
Przykład
Żaden.
Strony
Ten element grupuje poszczególne elementy strony .
Informacje o elemencie
Tabela 99 zawiera informacje o elemencie Pages .
Tabela 99. Informacje o elemencie strony
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Jeden |
| Elementy nadrzędne | Kreator |
| 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 z elementem 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 Pola (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 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 wprowadzania danych przez użytkownika. Atrybut można ustawić na: - True (prawda). Określa, że przyciski radiowe są wyłączone i użytkownicy nie mogą wybrać przycisku radiowego w grupie. - False (fałsz). Określa, że przyciski radiowe są włączone i użytkownicy mogą wybrać przycisk radiowy w grupie. |
| Nazwa | Określa nazwę grupy opcji opcji opcji radia. |
Uwagi
Żaden.
Przykład
Żaden.
Grupa etapowa
Ten element określa grupę etapu 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 | Grupy etapowe |
| Spis treści | Etap |
Atrybuty elementów
Tabela 103 zawiera listę atrybutów elementu StageGroup i opis atrybutu.
Tabela 103. Atrybuty i odpowiadające im wartości elementu StageGroup
| Atrybut | Opis |
|---|---|
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę grupy etapów wyświetlanej w narzędziu UDI Wizard Designer. Ta nazwa jest zwykle bardziej opisowa niż atrybut Name . |
Uwagi
Żaden.
Przykład
Żaden.
Grupy etapowe
Ten element grupuje zestaw grup etapów w pliku konfiguracyjnym UDI Wizard.
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 | Kreator |
| Spis treści | Grupa etapowa |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
Żaden.
Rozgrywający
Ten element określa ustawienie właściwości dla wartości właściwości, której nazwa jest we właściwości Property .
Informacje o elemencie
Tabela 105 zawiera informacje o elemencie Setter .
Tabela 105. Informacje o elemencie ustawiającym
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub więcej w każdym elemencie nadrzędnym (ten element jest opcjonalny). |
| Elementy nadrzędne | Dane, Element danych, Strona, Styl, Zadanie, Walidator |
| Spis treści | Zawiera wartość ciągu w atrybucie Property . |
Atrybuty elementów
Tabela 106 zawiera listę atrybutów elementu Setter i jego opis.
Tabela 106. Atrybuty i odpowiadające im wartości dla elementu ustawiającego
| Atrybut | Opis |
|---|---|
| Właściwość | Określa ustawianą nazwę właściwości. Nazwa właściwości jest ustawiana na wartość ujętą w nawias kwadratowy tego atrybutu. |
Uwagi
Żaden.
Przykład
Żaden.
Etap
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 etapu
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden element w elemencie StageGroup |
| Elementy nadrzędne | Grupa etapowa |
| Spis treści | PageRef (Odnośnik strony) |
Atrybuty elementów
Tabela 108 zawiera listę atrybutów elementu Stage i opis każdego z nich.
Tabela 108. Atrybuty i odpowiadające im wartości elementu stołu montażowego
| Atrybut | Opis |
|---|---|
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę strony kreatora wyświetlanej w narzędziu UDI Wizard 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 parametrem wiersza polecenia /stage: name . |
Uwagi
Żaden.
Przykład
Żaden.
Styl
Ten element grupuje poszczególne elementy Setter , które konfigurują wygląd i działanie Kreatora UDI, w tym tytuł wyświetlany w górnej części kreatora i obraz transparentu 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 | Kreator |
| Spis treści | Rozgrywający |
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 nadrzędnym Page .
Informacje o elemencie
Tabela 110 zawiera informacje o elemencie Zadanie .
Tabela 110. Informacje o elemencie zadania
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Co najmniej jeden element w elemencie Zadania |
| Elementy nadrzędne | Zadania |
| Spis treści | ExitCodes, File, Setter |
Atrybuty elementów
Tabela 111 zawiera listę atrybutów elementu Zadanie wraz z opisem każdego z nich.
Tabela 111. Atrybuty i odpowiadające im wartości elementu zadania
| Atrybut | Opis |
|---|---|
| DependsOn (Zależnie od | Określa, czy zadanie jest zależne od innego zadania. Wartość tego atrybutu jest ustawiana na atrybut Name innego elementu Task . Uwaga: Tego atrybutu nie można skonfigurować za pomocą narzędzia UDI Wizard Designer. Można jednak ręcznie dodać ten atrybut do elementu Task , bezpośrednio modyfikując plik .xml. |
| DisplayName (Nazwa wyświetlana) | Określa przyjazną dla użytkownika nazwę zadania wyświetlaną w kreatorze UDI Wizard 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 bibliotece DLL zawierającej 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 elementach zadań
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub jeden w każdym elemencie strony (ten element jest opcjonalny). |
| Elementy nadrzędne | Strona |
| Spis treści | Zadanie |
Atrybuty elementów
Tabela 113 zawiera listę atrybutów elementu Zadania wraz z opisem każdego z nich.
Tabela 113. Atrybuty i odpowiadające im wartości elementu Zadania
| Atrybut | Opis |
|---|---|
| NameTitle (NazwaTytuł) | Określa podpis wyświetlany u góry kolumny zawierającej nazwy zadań na odpowiedniej stronie kreatora. |
| StatusTitle (Tytuł statusu) | Określa podpis wyświetlany u góry kolumny zawierającej stan zadań na odpowiedniej stronie kreatora. |
Uwagi
Żaden.
Przykład
Żaden.
Walidator
Ten element określa walidator dla kontrolki pola określonej w elemencie nadrzędnym Field .
Informacje o elemencie
Tabela 114 zawiera informacje o elemencie walidatora .
Tabela 114. Informacje o elemencie walidatora
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Zero lub jeden w elemencie Field |
| Elementy nadrzędne | Pole |
| Spis treści | Rozgrywający |
Atrybuty elementów
Tabela 115 wymienia atrybut elementu Validator i podaje jego opis.
Tabela 115. Atrybuty i odpowiadające im wartości elementu walidatora
| Atrybut | Opis |
|---|---|
| Wpisać | Określa typ walidatora, który jest zdefiniowany w bibliotece DLL zawierającej walidator |
Uwagi
Żaden.
Przykład
Żaden.
Kreator
Ten element określa katalog główny dla wszystkich innych elementów.
Informacje o elemencie
Tabela 116 zawiera informacje o elemencie Wizard .
Tabela 116. Informacje o elemencie kreatora
| Atrybut | Wartość |
|---|---|
| Liczba wystąpień | Jeden |
| Elementy nadrzędne | Brak |
| Spis treści | Biblioteki DLL, strony, grupy etapów, styl |
Atrybuty elementów
Ten element nie ma atrybutów.
Uwagi
Żaden.
Przykład
<Wizard>
+ <DLLs>
+ <Style>
+ <Pages>
+ <StageGroups>
</Wizard>