Debugowanie akcji niestandardowych
Możesz debugować akcje niestandardowe oparte na bibliotekach linków dynamicznych przy użyciu narzędzi debugowania dla systemu Windows. Nie można używać debugowania dynamicznego z akcjami niestandardowymi opartymi na plikach wykonywalnych lub skryptach .
Techniki opisane w tej sekcji mogą ułatwić debugowanie akcji niestandardowych Instalatora Windows. Zobacz sekcję Narzędzia programistyczne sterowników w zestawie Windows Driver Kit (WDK), aby uzyskać informacje o narzędziach debugowania dla systemu Windows.
Instalator Windows używa zmiennej środowiskowej MsiBreak, aby określić, która akcja niestandardowa ma być debugowana. Jeśli masz dostęp do kodu źródłowego akcji niestandardowej, możesz użyć debugowania bez narzędzia MsiBreak. Aby rozpocząć debugowanie bez narzędzia MsiBreak, umieść tymczasowe pole komunikatu na początku kodu akcji. Gdy podczas instalacji pojawi się okno komunikatu, dołącz debuger do procesu, który jest właścicielem okna komunikatu. Następnie można ustawić niezbędne punkty przerwania i zamknąć pole komunikatu, aby wznowić wykonywanie. Nie można debugować wcześniejszych etapów akcji niestandardowej przy użyciu tej metody.
Aby użyć zmiennej środowiskowej MsiBreak do debugowania akcji niestandardowej, ustaw wartość msiBreak na nazwę akcji niestandardowej w tabeli CustomAction. MsiBreak może być systemem lub zmienną środowiskową użytkownika. Jeśli zmienna jest ustawiona jako zmienna systemowa, może być konieczne ponowne uruchomienie systemu, gdy wartość zostanie zmieniona w celu wykrycia nowej wartości.
Aby użyć zmiennej środowiskowej MsiBreak do debugowania osadzonego interfejsu użytkownika, ustaw wartość MsiBreak na MsiEmbeddedUI.
Instalator Windows sprawdza tylko zmienną środowiskową MsiBreak, jeśli użytkownik jest administratorem. Instalator ignoruje wartość MsiBreak, jeśli użytkownik nie jest administratorem, nawet jeśli jest to aplikacja zarządzana .
Jeśli debugujesz akcję niestandardową uruchamianą z podwyższonym poziomem uprawnień (systemu) w sekwencji wykonywania, dołącz debuger do usługi Instalatora Windows. Podczas przeprowadzania debugowania niestandardowej akcji, która jest uruchamiana z uprawnieniami uzyskanymi drogą personifikacji w sekwencji wykonywania, system wyświetla okno dialogowe, które wskazuje, który proces powinien zostać debugowany. Użytkownik zostanie poproszony o wyświetlenie okna dialogowego wskazującego, który proces ma być debugowany. Aby uzyskać więcej informacji na temat akcji niestandardowych z podwyższonym poziomem uprawnień, zobacz Bezpieczeństwo Akcji Niestandardowych [Custom Action Security].
Po dołączeniu debugera do prawidłowego procesu instalator wyzwala punkt przerwania debugera bezpośrednio przed wywołaniem punktu wejścia biblioteki DLL. W punkcie przerwania biblioteka DLL jest już załadowana do procesu i określony adres punktu wejścia. Jeśli nie udało się załadować biblioteki DLL dla akcji niestandardowej lub nie istnieje punkt wejścia dla tej akcji, nie zostanie wyzwolony żaden punkt przerwania. Ponieważ punkt przerwania jest aktywowany przed wywołaniem funkcji DLL, po jego aktywacji należy użyć debugera, aby krok po kroku przejść do momentu wywołania punktu wejścia akcji niestandardowej. Alternatywnie można ustawić punkt przerwania w dowolnym miejscu akcji niestandardowej i wznowić normalne działanie.
Instalator systemu Windows wykonuje biblioteki DLL, które nie są zapisane w tabeli Binary , bezpośrednio w miejscu, gdzie się znajdują. Instalator nie zna oryginalnej nazwy biblioteki DLL przechowywanej w tabeli Binary i uruchamia niestandardową akcję DLL pod tymczasową nazwą pliku. Forma nazwy pliku tymczasowego to MSI?????. TMP. W systemie Windows XP ten plik tymczasowy jest przechowywany w bezpiecznej lokalizacji, często <WindowFolder>\Installer.
Należy pamiętać, że wiele bibliotek DLL utworzonych do debugowania zawiera nazwę i ścieżkę odpowiedniego pliku PDB w ramach samej biblioteki DLL. Podczas debugowania tego typu biblioteki DLL w systemie, w którym można znaleźć plik PDB w lokalizacji przechowywanej w dll, symbole mogą być ładowane automatycznie przez narzędzie debugera. W sytuacjach, gdy nie można odnaleźć pliku PDB w lokalizacji przechowywanej, gdzie debuger nie obsługuje ładowania symboli z lokalizacji przechowywanej lub gdy biblioteka DLL nie została skompilowana przy użyciu informacji debugowania, może być konieczne umieszczenie plików symboli w folderze z tymczasowym plikiem DLL.
Instalator dodaje informacje o debugowaniu skryptów akcji niestandardowych do pliku dziennika instalacji.
There is a problem with this Windows Installer package. A script
required for this install to complete could not be run. Contact your
support personnel or package vendor. {Custom action [2] script error
[3], [4]: [5] Line [6], Column [7], [8] }