这个问题在这里已有答案:
我在这里看到了一些类似的问题,但找不到我的问题的答案..
这个几乎得到了它:How to start a 64-bit process from a 32-bit process
但我错过了关于如何做到这一点的解释。
我想要实现以下目标:
P.StartInfo.FileName = "%windir%\\sysnative\\cmd.exe";
但是可能做错了 - 因为当我以这种方式设置时没有任何反应,但是当设置它时:
P.StartInfo.FileName = "c:\\windows\\sysnative\\cmd.exe";
我认为是一样的 - 一切都很好。我究竟做错了什么?
我如何“告诉”解决%windir%的过程而不是按原样处理它?!
我会像在第二个例子中那样设置它,但我从外部文件中获取文件名,我不允许更改它,它写为%windir%\ sysnative \ cmd。
也许你只是在寻找Environment.ExpandEnvironmentVariables
?
将嵌入在指定字符串中的每个环境变量的名称替换为等效于变量值的字符串,然后返回结果字符串。
P.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%windir%\\sysnative\\cmd.exe");
您的问题与32位或64位无关......操作系统根据PE标头计算启动时所需的过程类型,启动新过程的方式没有区别。
您的问题是环境变量不会以您启动流程的方式进行扩展。看到这个答案: