일부 대상 프로세스 (고객 환경에서 충돌)를 수신하는 툴을 작성해야하며 충돌이 발생하면 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");
}
}
() - 왜 바퀴를 재발견? – Polyfun
내장 된 지원이 있다는 것을 알고 있습니다. 그러나 나는 고객이 구성을 할 것으로 기대할 수 없다. 대신 그들은 간단한 .exe (즉, 내 코드)를 실행하고 필요를 수행 할 수 있어야합니다. 내 쿼리를 다운 그레이드하는 정확한 이유는 아니 었습니다. 나는 어떤 바퀴를 재발견하려고하지 않았다. – Sandeep