C# 什么将';Environment.SpecialFolder.SystemX86';在32位Windows操作系统上返回?

C# 什么将';Environment.SpecialFolder.SystemX86';在32位Windows操作系统上返回?,c#,windows,c#-4.0,C#,Windows,C# 4.0,我有一个应用程序,它应该产生一个32位CMD进程 bool is64BitOS = Environment.Is64BitOperatingSystem; Environment.SpecialFolder systemFolder = is64BitOS ? Environment.SpecialFolder.SystemX86 : Environment.SpecialFolder.System; processName = Path.Combine(Environment.GetFold

我有一个应用程序,它应该产生一个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:我的应用程序是在32位系统上使用“AnyCPU”目标平台编译的,您将获得与
SpecialFolder.system
相同的值,因此不需要这样做。您可以使用
SpecialFolder.SystemX86
明确获取包含32位二进制文件的系统文件夹

来源:
Environment.GetFolderPath
委托给
SHGetFolderPath
,并将
SpecialFolder.SystemX86
映射到
CSIDL\u SystemX86
,在32位系统上映射到
%windir%\system32
。此值是在Windows 2000中引入的,因此,除非您计划在非常旧且不受支持的Windows版本(具有同样古老的.NET版本)上运行,否则无需进行检查


请注意,结果只取决于操作系统的位,而不是进程的位;32位和64位进程将返回相同的值(但是,当然,文件系统重定向意味着32位进程在访问
System32
时通常会在后台访问
SysWOW64
)。

这是一个我不知道答案的好问题。在.NET的Unix实现中,这两个文件夹可能都是
。你为什么关心航站楼的位子?生成任何进程都不需要
cmd
,只需使用
process.Start
和可执行文件的路径即可。所有显示调用
cmd
并将可执行文件作为参数传递的示例都是错误的,除非它们打算显式创建终端