2

可能重复:
C# 在 Process.Kill() 期间仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分

我正在尝试从我当前的流程中启动一个新流程。我正在使用 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) 在 System.Diagnostics.Process.get_MainModule()

对 32 位与 64 位问题的异常点进行了一些研究。两个 exe,newProc exe 和我提出的代码的调用 exe,都是 64 位应用程序。我通过应用程序属性和任务管理器(寻找“*32”标签)进行了检查。我尝试在 Visual Studio 中将平台设置为 x64 和 Any CPU,但没有运气。

关于为什么 Process.Start 在这些条件下无法阅读的任何想法?

注意:这是在 Win7 64 位上。两个 exe 都是 C# 应用程序。两者都使用 2.0 框架(我知道但有必要)。

4

1 回答 1

1

我想到了。问题完全出在我的 newProc 应用程序中。由于 args.Len 检查,它提前退出。返回的异常只是误导性的,让我有点胡思乱想。

于 2012-11-28T20:49:40.390 回答