ターゲットプロセス(顧客環境でクラッシュする)をリッスンするツールを作成する必要があります。クラッシュすると、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");
}
}
WindowsとDebugDiagを参照することにより呼び出し可能であるが)(このためのサポートが組み込まれています - なぜ車輪の再発明? – Polyfun
私は内蔵のサポートがあることを知っています。しかし、私は顧客が構成を行うことを期待できません。代わりに、単純な.exe(つまり自分のコード)を起動し、必要な処理を行うことができるはずです。それが私の質問をダウングレードする正確な理由ではありませんでした。私はどんな車を再発明するつもりはなかった。 – Sandeep