Wie kann meine C # -Anwendung prüfen, ob eine bestimmte Anwendung / ein bestimmter Prozess (Hinweis: nicht der aktuelle Prozess) im 32-Bit- oder 64-Bit-Modus ausgeführt wird?
Beispielsweise möchte ich möglicherweise einen bestimmten Prozess nach seinem Namen abfragen, z. B. 'abc.exe', oder basierend auf der Prozess-ID-Nummer.
c#
process
32bit-64bit
Satya
quelle
quelle
Antworten:
Eine der interessanteren Möglichkeiten, die ich gesehen habe, ist folgende:
Verwenden Sie diesen Code, um herauszufinden, ob ANDERE Prozesse im 64-Bit-Emulator (WOW64) ausgeführt werden:
quelle
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
Und deshalb muss Microsoft Kompatibilitäts-Shims für Versionslügen erstellen, um solche Fehler im Code zu umgehen. Was passiert, wenn Windows Vista (6.0) herauskommt? Und die Leute haben Microsoft schlecht gemacht, weil sie Windows 7 Version 6.1 statt 7.0 erstellt haben. Es behebt so viele App-kompatible Fehler.processHandle = Process.GetProcessById(process.Id).Handle;
statt nur verwendenprocessHandle = process.Handle;
?Wenn Sie .Net 4.0 verwenden, ist dies ein Einzeiler für den aktuellen Prozess:
Siehe Environment.Is64BitProcessProperty (MSDN).
quelle
Is64BitProcess
? Vielleicht kann ich damit herausfinden, ob ich als 64-Bit-Prozess arbeite.Is64BitProcess
( referencesource.microsoft.com/#mscorlib/system/environment.cs ). Es handelt sich jedoch nur um eine fest codierte return-Anweisung, die vom Kompilierungssymbol gesteuert wird.Die ausgewählte Antwort ist falsch, da sie nicht das tut, was gefragt wurde. Es wird geprüft, ob es sich bei einem Prozess um einen x86-Prozess handelt, der stattdessen unter x64 ausgeführt wird. Daher wird "false" für einen x64-Prozess unter x64-Betriebssystem oder einen x86-Prozess unter x86-Betriebssystem zurückgegeben.
Außerdem werden Fehler nicht richtig behandelt.
Hier ist eine korrektere Methode:
quelle
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
wird für einen 32-Bit-Prozess immer true zurückgeben. Besser zu verwenden,System.Environment.Is64BitOperatingSystem
wenn .NET4 unterstützt wirdSie können die Größe eines Zeigers überprüfen, um festzustellen, ob er 32 oder 64 Bit hat.
quelle
quelle
Hier ist die einzeilige Prüfung.
quelle
Ich benutze dies gerne:
Auf diese Weise kann ich leicht schreiben, wenn ich eine Datei suchen oder überprüfen muss:
quelle
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
anstatt "C: \ Programme" fest zu codieren?