2012-11-28 1 views
2

가능한 중복 :
C# Only part of a ReadProcessMemory or WriteProcessMemory request was completed during Process.Kill()Process.Start를하는 동안 "는 readprocessmemory 또는 WriteProcessMemory의 요청의 일부만 완료되었습니다"

내 현재에서 새로운 프로세스를 킥오프하기 위해 노력하고있어 방법. 나는 이것을하기 위해 processInfo와 process.start를 사용하고있다. 새 프로세스는 이전에 빌드 한 exe를 실행하기로되어 있는데 cmd 라인에서 정상적으로 실행되는 newProc.exe라고합니다.

코드 Visual Studio 디버거 나 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(); 
     } 
    } 

나는이 실행

, 들어, newProc.exe이 시작되지 않습니다. 디버거에서 Process.Start 다음에 'proc'을 보면 MainModule 멤버에 예외가 발생하는 것을 볼 수 있습니다. 예외 메시지는 "ReadProcessMemory 또는 WriteProcessMemory 요청의 일부만 완료되었습니다"입니다.

System.Diagnostics.NtProcessManager.GetModuleInfos (INT32 PROCESSID, 부울 firstModuleOnly) System.Diagnostics.Process.get_MainModule()

일부 연구에 깊은 그 예외의 스택 트레이스를 살펴보면 32 비트 대 64 비트 문제에서 예외 지점으로. exe, newProc exe와 호출 한 exe는 모두 64 비트 애플리케이션입니다. 나는 응용 프로그램 속성과 작업 관리자 ("* 32"태그를 찾음)를 통해 확인했습니다. 나는 Visual Studio에서 x64와 Any CPU 모두에 플랫폼을 설정하려고했지만 행운은 없다.

Process.Start가 이러한 조건에서 읽을 수없는 이유에 대한 아이디어가 있습니까?

참고 : 이것은 Win7 64 비트에 있습니다. 두 exes 모두 C# 응용 프로그램입니다. 둘 다 2.0 프레임 워크를 사용하고 있습니다.

+0

기본 코드가 괜찮다고 생각합니다. pathToNewProc을 @ "c : \ windows \ notepad.exe"와 같은 경로로 변경하면 예상대로 작동합니다. notepad.exe 프로세스가 시작됩니다. 이것은 내가 newProc.exe가 어떻게 설치되는지에 대해 잘못된 것이 있다고 생각하게한다. 그러나 나는 그 문제가 뭔지 전혀 모른다. – greenhat

답변

1

나는 그것을 알아 냈다. 문제는 완전히 내 newProc 응용 프로그램에있었습니다. 인수로 일찍 퇴장했다. 수표. 돌려주게되었던 예외는 단지 오도하고 있었고, 야생의 거위 쫓기의 작은 조각에 나를 데려 갔다.

관련 문제