我们有一个程序集,我们称它为 Foo.exe
。此可执行文件将由另一个应用程序启动,例如 Bar1.exe
或 Bar2.exe
。
如果 Foo.exe
运行,它会每 10 秒检查一次 Bar1
或 Bar2
进程是否正在运行。如果不是,它会清理一些东西并关闭。
这适用于普通用户场景。但是如果我们开发我们有一个大问题:
应用程序无法查看应用程序 Bar1
或 Bar2
是否正在调试,在这两种情况下 Bar.svhost.exe
在任务中可用经理。
这意味着,如果 Bar.svhost.exe
将被忽略,Foo.exe
在调试过程中结束,这是不可能的。
但是如果 Bar.svhost.exe
会被看到,Foo.exe
永远不会结束,我们必须手动杀死它,但它没有被正确清理。
知道如何解决这个问题吗?
(从 Bar1
或 Bar2
结束 Foo.exe
是不可能的,因为多个 Bar1
或Bar2
可以在机器上运行,但是 Foo
只需要运行一次。因此 Foo.exe
必须检查自己。而“Kill "该过程将让它清理)
添加: 这是问题的伪代码示例
//Bar1.exe and Bar2.exe
void Main()
{
if (!FooIsRunning())
StartFoo();
DoSomething();
}
//Foo.exe
void Main()
{
Initialize();
while (BarIsRunning());
Cleanup();
}
private bool BarIsRunning()
{
var processes = Process.GetProcesses();
if (processes.Any(p => p.ProcessName.Contains("Bar.exe"))
return true;
var vshostProcess = processes.FirstOrDefault(p => p.ProcessName.Contains("Bar.vshost.exe");
return vshostProcess != null && ProcessIsDebugging(process);
}
private bool ProcessIsDebugging(Process process)
{
// How to...
return true;
}
最佳答案
你检查过了吗Debugger.IsAttached ?
关于c# - 查看是否正在调试其他程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848051/