在process.start期间“只完成了readprocessmemory或writeprocessmemory请求的一部分”

时间:2012-11-28 18:43:20

标签: c# process process.start

  

可能重复:
  C# Only part of a ReadProcessMemory or WriteProcessMemory request was completed during Process.Kill()

我正试图从我当前的流程开始一个新流程。我正在使用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框架(旧的,我知道,但必要)。

1 个答案:

答案 0 :(得分:1)

我明白了。问题完全在我的newProc应用程序中。它因为args.Len检查而提前退出。返回的例外只是误导,让我有点疯狂的追逐。