如何在c#中从32位进程运行64位进程?

时间:2015-05-06 15:27:31

标签: c# .net process 32bit-64bit

我在这里看到了一些类似的问题,但找不到我的问题的答案..

这个几乎得到了它: 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。

2 个答案:

答案 0 :(得分:4)

也许您只是在寻找Environment.ExpandEnvironmentVariables

  

使用与变量值等效的字符串替换嵌入在指定字符串中的每个环境变量的名称,然后返回结果字符串。

P.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%windir%\\sysnative\\cmd.exe");

答案 1 :(得分:2)

您的问题与32位或64位无关......操作系统根据PE标头计算启动时所需的过程类型,启动新过程的方式没有区别

您的问题是环境变量未按照您启动流程的方式进行扩展。看到这个答案:

https://stackoverflow.com/a/9675482/61164