2016-12-13 5 views
-1

일부 대상 프로세스 (고객 환경에서 충돌)를 수신하는 툴을 작성해야하며 충돌이 발생하면 DebugDiag를 실행하여 명령 줄 매개 변수를 전달하여 덤프를 생성해야합니다. 코드는 C#으로 작성해야합니다. 이미 코딩을했는데 도구가 프로세스를 감지하지 못했습니다. 다음은 코드입니다 :크래시 덤프 덤핑

static void Main(string[] args) 
{ 
    ManagementEventWatcher startWatch = new ManagementEventWatcher(
    new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")); 
    startWatch.EventArrived 
         += new EventArrivedEventHandler(startWatch_EventArrived); 
    startWatch.Start(); 

    Console.WriteLine("Press ENTER to exit"); 
    Console.ReadLine(); 
    startWatch.Stop(); 

} 


    static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) 
    { 
     string name = e.NewEvent.Properties["ProcessName"].Value as string; 
     Console.WriteLine("Process started: {0}", name); 
     if (name != null && name.Contains("My Process.exe")) 
     { 
      string procpath = "C:\\Program Files\\DebugDiag"; 
      string filename = Path.Combine(procpath, "DbgHost.exe"); 
      var proc = System.Diagnostics.Process.Start(filename, "-dump My Process.exe"); 
     } 
    } 

이 내가 ProcDump를 사용하여 제안을 구현, DebugDiag @Bruno에 명령 줄 매개 변수를 전달하는 방법 인 경우도 알려 주시기 바랍니다. 이제는 한 번 작동합니다. 즉, 목표 프로세스 (32 비트)를 실행하면 ProcDump가 실행되지만 내 응용 프로그램은 작업 공간을 시작할 때 같은 이름의 다른 프로세스를 시작하고 이번에는 ProcDump가 라우트하지 못했습니다. 디버깅에 나는 32 비트 프로세스가 64 비트 프로세스를 디버깅 할 수 없습니다 내 모든 대상 프로세스가 말하는 예외가 발생했습니다 것을 발견 32 비트 전용 ... 코드 :

static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) 
{ 
    string name = e.NewEvent.Properties["ProcessName"].Value as string; 
    Console.WriteLine("Process started: {0}", name); 
    if (name != null && name.Contains("MyProcess.exe")) 
    { 
     string procpath = "C:\\Procdump"; 
     string filename = Path.Combine(procpath, "procdump.exe"); 
     var proc = System.Diagnostics.Process.Start(filename, "-e -f -mp -n 25 -w -accepteula MyProcess.exe MyProcess_crash"); 
    } 
} 
+0

() - 왜 바퀴를 재발견? – Polyfun

+0

내장 된 지원이 있다는 것을 알고 있습니다. 그러나 나는 고객이 구성을 할 것으로 기대할 수 없다. 대신 그들은 간단한 .exe (즉, 내 코드)를 실행하고 필요를 수행 할 수 있어야합니다. 내 쿼리를 다운 그레이드하는 정확한 이유는 아니 었습니다. 나는 어떤 바퀴를 재발견하려고하지 않았다. – Sandeep

답변

1

사용 Procdump.exe. 덤프, 미니 덤프 등을 생성하는 sysinternals가 개발 한 완벽한 도구입니다. 이보기 명령 라인으로 호출이다 https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

Windows 및 DebugDiag이를 지원하는 기능이 내장되어있다
+0

입력 한 내용대로 수정보기 – Sandeep