C# 卸下撞车垃圾
我需要编写一个工具,用于侦听某些目标进程(在客户环境中崩溃),一旦它崩溃,它应该通过启动DebugDiag并向其传递命令行参数来生成转储。代码需要用C语言编写。我已经做了一些编码,但该工具从未检测到启动的进程。 代码如下:C# 卸下撞车垃圾,c#,command-line,debugdiag,C#,Command Line,Debugdiag,我需要编写一个工具,用于侦听某些目标进程(在客户环境中崩溃),一旦它崩溃,它应该通过启动DebugDiag并向其传递命令行参数来生成转储。代码需要用C语言编写。我已经做了一些编码,但该工具从未检测到启动的进程。 代码如下: static void Main(string[] args) { ManagementEventWatcher startWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FRO
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");
}
}
还请告知这是否是将命令行参数传递给DebugDiag的方法
@布鲁诺,我用ProcDump实现了你的建议。现在它只工作一次,这意味着当我启动我的目标进程(32位)时,ProcDump也会启动,但我的应用程序是这样的:当我在其中启动一个工作区时,它会启动另一个同名进程,而这次ProcDump无法启动,调试时,我发现它抛出了一个异常,表示32位进程无法调试64位进程,并且我的所有目标进程都是32位的。。。
代码:
使用Procdump.exe。
它是由sysinternals开发的一个完整工具,用于生成
转储、小型转储等。
它可以通过命令行调用
看见
Windows和DebugDiag对此有内置支持()-为什么要重新发明轮子?我知道有内置支持。但是,我不能期望我的客户进行配置。相反,他们应该能够启动一个简单的.exe(即我的代码)并执行必要的操作。这不是降低我的查询级别的确切原因。我并不打算重新发明任何轮子。
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");
}
}