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

3

我在这里看到一些类似的问题,但是没有找到我的答案。

这个链接几乎解决了问题: 如何从32位进程启动64位进程

但是我缺少关于如何实现的解释。

我正在尝试实现以下内容:

P.StartInfo.FileName = "%windir%\\sysnative\\cmd.exe";

我可能做错了什么 - 因为使用这种方式设置时,什么也没有发生,但使用这种方式设置时却可以:

P.StartInfo.FileName = "c:\\windows\\sysnative\\cmd.exe";

我原以为这两者是一样的——都能正常工作。我做错了什么?

如何让进程解析%windir%,而不是将其视为文本?

我想像第二个例子那样设置,但我从一个外部文件获取文件名,而且我不能改变它,它写成了%windir%\sysnative\cmd。

2个回答

5
也许您只是在寻找Environment.ExpandEnvironmentVariables?该方法能够将指定字符串中嵌入的每个环境变量名称替换为变量值的字符串等效项,然后返回结果字符串。
P.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%windir%\\sysnative\\cmd.exe");

2

你的问题与32位或64位无关......启动新进程的方式没有区别,操作系统会根据PE头文件确定需要启动的进程类型。

你的问题在于环境变量在启动进程的方式中没有被扩展。请参考以下答案:

https://dev59.com/-WHVa4cB1Zd3GeqPm3Sn#9675482


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接