2016-12-13 10 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にコマンドラインパラメータを渡す方法がある場合もご連絡ください。 ProcDumpを起動すると、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

WindowsとDebugDiagを参照することにより呼び出し可能であるが)(このためのサポートが組み込まれています - なぜ車輪の再発明? – Polyfun

+0

私は内蔵のサポートがあることを知っています。しかし、私は顧客が構成を行うことを期待できません。代わりに、単純な.exe(つまり自分のコード)を起動し、必要な処理を行うことができるはずです。それが私の質問をダウングレードする正確な理由ではありませんでした。私はどんな車を再発明するつもりはなかった。 – Sandeep

答えて

関連する問題