Pracuję nad projektem, który przechwytuje wszystkie interakcje użytkownika. MSDN mówi (this)Wdrożenie Win32 Hooks DLL do aplikacji Zbudowane przeciwko "Any CPU"
SetWindowsHookEx może być użyty do wstrzyknięcia biblioteki DLL do innego procesu. 32-bitowa biblioteka DLL nie może zostać wstrzyknięta do procesu 64-bitowego, a 64-bitowa biblioteka DLL nie może zostać wstrzyknięta do procesu 32-bitowego. Jeśli aplikacja wymaga użycia haków w innych procesach, wymagane jest, aby 32-bitowa aplikacja wywoływała SetWindowsHookEx w celu wstrzyknięcia 32-bitowej biblioteki DLL w 32-bitowe procesy , a 64-bitowe wywołanie aplikacji SetWindowsHookEx w celu wstrzyknięcia 64-bitowa biblioteka DLL na procesy 64-bitowe.
Moje pytanie brzmi, co się stanie, jeśli aplikacja została zbudowana przeciwko Any CPU
. Czy muszę zadzwonić pod numer SetWindowsHookEx
z biblioteki DLL zbudowanej na bazie Any CPU
.
Pisałem HookLogger_32.exe ładuje HookFunctions_32.dll (zarówno x86) i HookLogger_64.exe ładuje HookFunctions_64.dll (zarówno x64) ustalanie WH_CBT
i WH_MOUSE
globalnie (nie konkretny wątek).
Pliki HookLogger_32.exe, HookLogger_64.exe, HookFunctions_32.dll i HookFunctions_64.dll są napisane w C++.
Po kliknięciu na aplikację .NET zbudowaną na bazie Any CPU
, te biblioteki DLL zostają wstrzyknięte (przez SetWindowHookEx
). System operacyjny Windows zawiesza się & Muszę na siłę zrestartować mój komputer.
Gdy ta sama aplikacja .NET jest zbudowana przeciwko architekturze x86 lub x64, a po kliknięciu aplikacji po uruchomieniu HookLoggers (zarówno 32 & 64 bit) wszystko działa poprawnie.
Przyczyny tego niezdefiniowanego zachowania.
Platforma, na której pracuję, to komputer 64-bitowy.
Czy działa poprawnie, gdy jest zbudowany na 32/64 lub też ulega awarii? –
@ pst: działa poprawnie, gdy jest zbudowany dla 32/64. Jest to aplikacja WPF na świecie. – sri
Wygląda na to, że to może być powiązane: http: // stackoverflow.com/questions/1507268/force-x86-clr-on-any-cpu-net-assembly – rene