Jak moja aplikacja C # może sprawdzić, czy dana aplikacja / proces (uwaga: nie bieżący proces) działa w trybie 32-bitowym lub 64-bitowym?
Na przykład, mógłbym chcieć zapytać o konkretny proces według nazwy, np. „Abc.exe”, lub na podstawie numeru ID procesu.
c#
process
32bit-64bit
satya
źródło
źródło
Odpowiedzi:
Jednym z bardziej interesujących sposobów, jakie widziałem, jest:
Aby dowiedzieć się, czy INNE procesy działają w emulatorze 64-bitowym (WOW64), użyj tego kodu:
źródło
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
I dlatego Microsoft musi stworzyć podkładki pod kątem zgodności wersji - aby obejść takie błędy w kodzie. Co się stanie, gdy pojawi się system Windows Vista (6.0)? A potem ludzie robią złe usta Microsoftowi za stworzenie Windows 7 w wersji 6.1 zamiast 7.0, naprawia tak wiele błędów kompatybilnych z aplikacjami.processHandle = Process.GetProcessById(process.Id).Handle;
zamiast po prostuprocessHandle = process.Handle;
?Jeśli używasz .Net 4.0, jest to jedna linijka dla obecnego procesu:
Zobacz Environment.Is64BitProcessProperty (MSDN).
źródło
Is64BitProcess
? Być może będę mógł użyć tego, co robi, aby dowiedzieć się, czy pracuję jako proces 64-bitowy.Is64BitProcess
( referencesource.microsoft.com/#mscorlib/system/environment.cs ). Jednak jest to tylko zakodowana na stałe instrukcja return, kontrolowana przez symbol kompilacji.Wybrana odpowiedź jest nieprawidłowa, ponieważ nie spełnia tego, o co pytano. Sprawdza, czy proces jest procesem x86 działającym w systemie operacyjnym x64; więc zwróci wartość „false” dla procesu x64 w systemie operacyjnym x64 lub procesu x86 działającego w systemie operacyjnym x86.
Ponadto nie obsługuje poprawnie błędów.
Oto bardziej poprawna metoda:
źródło
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
zawsze zwróci wartość true dla procesu 32-bitowego. Lepiej używać,System.Environment.Is64BitOperatingSystem
jeśli .NET4 jest obsługiwanyMożesz sprawdzić rozmiar wskaźnika, aby określić, czy ma 32 bity czy 64 bity.
źródło
źródło
Oto sprawdzenie jednej linii.
źródło
Lubię tego używać:
W ten sposób, jeśli muszę zlokalizować lub zweryfikować plik, mogę łatwo napisać:
źródło
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
zamiast na stałe zakodować `C: \ Program Files`?