Как мое приложение C # может проверить, работает ли конкретное приложение / процесс (примечание: не текущий процесс) в 32-битном или 64-битном режиме?
Например, мне может потребоваться запросить конкретный процесс по имени, например «abc.exe», или на основе идентификационного номера процесса.
c#
process
32bit-64bit
сатья
источник
источник
Ответы:
Я видел один из наиболее интересных способов:
Чтобы узнать, запущены ли ДРУГИЕ процессы в 64-битном эмуляторе (WOW64), используйте этот код:
источник
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
Вот почему Microsoft должна создать прокладки совместимости с ложными версиями - чтобы обойти подобные ошибки в коде. Что произойдет, когда выйдет Windows Vista (6.0)? А потом люди ругают Microsoft за то, что она делает Windows 7 версии 6.1, а не 7.0, она исправляет так много ошибок совместимости приложений.processHandle = Process.GetProcessById(process.Id).Handle;
вместо простоprocessHandle = process.Handle;
?Если вы используете .Net 4.0, это однострочный вариант для текущего процесса:
См. Environment.Is64BitProcessProperty (MSDN).
источник
Is64BitProcess
? Возможно, я смогу использовать то, что он делает, чтобы выяснить, работаю ли я как 64-битный процесс.Is64BitProcess
( referencesource.microsoft.com/#mscorlib/system/environment.cs ). Однако это просто жестко запрограммированный оператор возврата, управляемый символом компиляции.Выбранный ответ неверен, так как он не соответствует тому, о чем просили. Вместо этого он проверяет, является ли процесс процессом x86, работающим в ОС x64; поэтому он вернет "false" для процесса x64 в ОС x64 или процесса x86, запущенного в ОС x86.
Кроме того, он неправильно обрабатывает ошибки.
Вот более правильный способ:
источник
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
всегда будет возвращать истину для 32-битного процесса. Лучше использовать,System.Environment.Is64BitOperatingSystem
если поддерживаетсяВы можете проверить размер указателя, чтобы определить, 32-битный он или 64-битный.
источник
источник
Вот проверка одной строки.
источник
Мне нравится использовать это:
Таким образом, если мне нужно найти или проверить файл, я могу легко написать:
источник
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
вместо жесткого программирования `C: \ Program Files`?