Udostępnij za pośrednictwem


Korzystanie z funkcji NDF

Firma Microsoft zapewnia dostęp do funkcji NDF za pośrednictwem publicznego interfejsu API. Gdy wystąpi problem, aplikacja może używać tego interfejsu API do korzystania z tej funkcji w kontekście określonej aplikacji.

Istnieją trzy etapy przeprowadzania diagnostyki z NDF: tworzenie incydentu, uruchamianie diagnostyki i naprawy oraz zamykanie incydentu. To omówienie wskazuje, które funkcje NDF mogą być istotne dla określonego scenariusza. Szczegółowe informacje na temat każdej funkcji można znaleźć w sekcji Referencja NDF .

Tworzenie zdarzenia

Sesja diagnostyki NDF wymaga określonego zdarzenia do zdiagnozowania. Istnieje kilka funkcji, których można użyć do utworzenia zdarzenia. Wybierz funkcję, która jest najbardziej zgodna z tym, co aplikacja próbowała zrobić, gdy wystąpił błąd.

Uruchamianie diagnostyki i napraw

Istnieją dwa sposoby uruchamiania diagnostyki i naprawy funkcji.

  • Korzystanie z interfejsu użytkownika systemu Windows (zalecane)

    W przypadku uruchamiania w standardowym interfejsie użytkownika systemu Windows można po prostu wywołać funkcję NdfExecuteDiagnosis. Kreator NDF uruchomi się i wspomoże użytkownika w zidentyfikowaniu (a, jeśli to możliwe, także rozwiązaniu) problemu. Funkcja zostanie zwrócona po zakończeniu tego procesu. Interfejs użytkownika jest opcjonalnie modalny dla twojej aplikacji.

  • Używanie niestandardowego interfejsu użytkownika (tylko system Windows 7 lub nowszy)

    Różne funkcje są dostępne do użycia w scenariuszach, w których nie jest wyświetlany interfejs użytkownika lub gdy standardowe środowisko systemu Windows nie jest używane (takie jak Media Center, aplikacje osadzone i wiersz polecenia). Ta opcja pomija funkcjonalność doświadczenia użytkownika udostępnioną w Kreatorze NDF, która obejmuje ograniczenie wyników do w pełni obsługiwanych podstawowych przyczyn, a także heurystyki w celu przedstawienia napraw użytkownikowi w zalecanej kolejności. W przypadku korzystania z tych funkcji należy samodzielnie podać wszelkie takie funkcje. Należy również pamiętać, aby zwolnić pamięć używaną przez wyniki diagnostyki.

    Aby rozpocząć diagnostykę, wywołaj funkcję NdfDiagnoseIncident. Wszelkie znalezione problemy zostaną zwrócone do aplikacji jako kolekcja struktur RootCauseInfo opisujących zidentyfikowane przyczyny źródłowe i możliwe naprawy.

    Po wybraniu naprawy (lub monitowaniu użytkownika o wybranie naprawy) NdfRepairIncident należy wywołać w celu podjęcia próby naprawy i ustalenia, czy problem został rozwiązany.

    W niektórych przypadkach naprawa może zostać wykonana pomyślnie, ale nie rozwiąże problemu. W takich przypadkach zaleca się zamknięcie istniejącego zdarzenia, a następnie otwarcie nowego. Zapewni to zidentyfikowanie wszelkich nowych problemów niezamaskowanych przez początkową naprawę. Załóżmy na przykład, że żadne sieci bezprzewodowe nie były widoczne. Po zresetowaniu karty sieci bezprzewodowe są widoczne, ale żadna z nich nie znajduje się na liście preferowanych. Jest to nowy problem, który wymaga nowej diagnozy do zidentyfikowania. Jeśli taka druga próba diagnozy nie zidentyfikuje dodatkowych problemów, można podjąć inną próbę naprawy, aby rozwiązać pierwotny problem, lub poinformować użytkownika, że nie można rozwiązać problemu.

    NdfDiagnoseIncident i NdfRepairIncident są synchronicznymi interfejsami API. Jeśli chcesz anulować działanie zainicjowane przez te funkcje, wywołaj NdfCancelIncident z innego wątku. Funkcja zostanie wznowiona w następnym dostępnym punkcie zatrzymania w procesie diagnostyki lub naprawy.

    W dowolnym momencie możesz opcjonalnie wywołać NdfGetTraceFile, aby pobrać kopię dziennika NDF dla bieżącej sesji diagnostyki i dołączyć ją do dzienników aplikacji. Dziennik jest czyszczony po pobraniu, a kolejne wywołania będą pobierać tylko zdarzenia, które miały miejsce po ostatnim wywołaniu tej funkcji.

Zamykanie zdarzenia

Po zakończeniu diagnozowania zdarzenia wywołaj NdfCloseIncident, aby zwolnić zasoby systemowe skojarzone z wykonywaniem diagnostyki tego zdarzenia. (Należy pamiętać, że nie zwalnia to obiektów utworzonych przez NdfDiagnoseIncident.