我正试图从我当前的流程开始一个新流程。我正在使用processInfo和process.start来执行此操作。新进程应该运行我之前构建的exe,称之为newProc.exe,从cmd行运行正常。
调用exe的代码
class Program
{
static void Main(string[] args)
{
StartNewProc();
}
public static void StartNewProc()
{
string pathToNewProc = @"c:\path\to\newproc.exe";
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = pathToNewProc;
processInfo.Arguments = "Some cmd line argument";
processInfo.CreateNoWindow = false;
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process proc = Process.Start(processInfo);
proc.WaitForExit();
}
}
当我在visual studio调试器或cmd行中运行它时,newProc.exe不会启动。在调试器中查看它,如果我在Process.Start之后查看'proc',我可以看到MainModule成员中抛出异常。异常消息是“只完成了ReadProcessMemory或WriteProcessMemory请求的一部分”。
深入研究该异常的stackTrace
System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)at System.Diagnostics.Process.get_MainModule()
对该异常的一些研究指出了32位与64位问题。两个exes,newProc exe和我提出的代码的调用exe是64位应用程序。我通过应用程序属性和任务管理器(查找“* 32”标签)进行了检查。我已经尝试在Visual Studio中将平台设置为x64和任何CPU,但没有运气。
关于为什么Process.Start在这些条件下无法读取的任何想法?
注意:这是在Win7 64bit上。两个exes都是C#应用程序。两者都在使用2.0框架(旧的,我知道,但必要)。
答案 0 :(得分:1)
我明白了。问题完全在我的newProc应用程序中。它因为args.Len检查而提前退出。返回的例外只是误导,让我有点疯狂的追逐。