Что вернет «Environment.SpecialFolder.SystemX86» в 32-битной ОС Windows? - PullRequest
1 голос
/ 21 мая 2019

У меня есть приложение, которое должно порождать 32-битный процесс CMD.

bool is64BitOS = Environment.Is64BitOperatingSystem;
Environment.SpecialFolder systemFolder = is64BitOS ? Environment.SpecialFolder.SystemX86 : 
Environment.SpecialFolder.System;
processName = Path.Combine(Environment.GetFolderPath(systemFolder),"cmd.exe");

Мне было интересно, нужно ли мне проверять битность ОС для обработки различий между 64-битным и 32-битным путями Windows CMD
или
Будет ли «Environment.SpecialFolder.SystemX86» обрабатывать различия, и мне не о чем беспокоиться?

PS: мое приложение скомпилировано с целевой платформой 'AnyCPU'

1 Ответ

1 голос
/ 22 мая 2019

В 32-битной системе вы получите то же значение, что и для SpecialFolder.System, так что нет, в этом нет необходимости. Вы можете использовать SpecialFolder.SystemX86, чтобы однозначно получить системную папку, содержащую 32-разрядные двоичные файлы.

Источник: Environment.GetFolderPath делегирует SHGetFolderPath, с SpecialFolder.SystemX86 отображением CSIDL_SYSTEMX86, что задокументировано здесь для сопоставления %windir%\system32 в 32-битных системах. Это значение было введено в Windows 2000, поэтому, если вы не планируете работать на очень старой и неподдерживаемой версии Windows (с такой же древней версией .NET), проверять не нужно.

Обратите внимание, что результаты зависят только от разрядности вашей ОС, а не от разрядности вашего процесса; 32-разрядные и 64-разрядные процессы будут возвращать одинаковые значения (но, конечно, перенаправление файловой системы означает, что 32-разрядные процессы обычно обращаются к SysWOW64 под капотом, когда они получают доступ к System32).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...