Что вернет Environment.SpecialFolder.SystemX86 в 32-разрядной ОС Windows?

У меня есть приложение, которое должно запускать 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.

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

Jeppe Stig Nielsen 21.05.2019 09:58

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

Panagiotis Kanavos 22.05.2019 12:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
508
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В 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).

Другие вопросы по теме