c# - 查看是否正在调试其他程序集

标签 c# visual-studio process

我们有一个程序集,我们称它为 Foo.exe。此可执行文件将由另一个应用程序启动,例如 Bar1.exeBar2.exe

如果 Foo.exe 运行,它会每 10 秒检查一次 Bar1Bar2 进程是否正在运行。如果不是,它会清理一些东西并关闭。

这适用于普通用户场景。但是如果我们开发我们有一个大问题: 应用程序无法查看应用程序 Bar1Bar2 是否正在调试,在这两种情况下 Bar.svhost.exe 在任务中可用经理。

这意味着,如果 Bar.svhost.exe 将被忽略,Foo.exe 在调试过程中结束,这是不可能的。

但是如果 Bar.svhost.exe 会被看到,Foo.exe 永远不会结束,我们必须手动杀死它,但它没有被正确清理。

知道如何解决这个问题吗?

(从 Bar1Bar2 结束 Foo.exe 是不可能的,因为多个 Bar1Bar2 可以在机器上运行,但是 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/

相关文章:

c# - 如何限制泛型函数只接受某种类型的类

c# - 如何设置从代码应用了样式的按钮的背景颜色?

c# - 第三方 dll 在 ASP.NET MVC 项目中找不到其依赖项

C# 用户名比较(2 个字符串)

visual-studio - Visual Studio,调试时的库源

java - 我如何在java中 fork 一个外部进程

c - 将标准输出/输入/错误重定向到/从文本框

C# 十进制数据类型性能

C# ObservableCollection 添加报错

java - Android Stduio 中无法出现 "Build APK"[libGDX]