У меня есть приложение, которое должно запускать 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.
Почему вас волнует разрядность терминал? Вам вообще не нужно cmd для запуска любого процесса, просто используйте Process.Start с путем к исполняемому файлу. Все примеры, которые показывают вызов cmd и передачу исполняемого файла в качестве аргумента, просто неверны, если только они не предназначены для явного создания терминала.





В 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).
Это хороший вопрос, на который я не знаю ответа. В реализациях .NET для Unix обе папки могут быть
"". Попробуйте онлайн! (исходный код закодирован в URL)