アセンブリがあります。それを呼び出しましょうFoo.exe。Bar1.exeこの実行可能ファイルは、またはのような別のアプリケーションによって起動されますBar2.exe。
実行すると、またはプロセスが実行Foo.exeされているかどうかを10秒ごとにチェックします。そうでない場合は、いくつかのものをクリーンアップしてシャットダウンします。Bar1Bar2
これは通常のユーザーシナリオで機能します。しかし、開発する場合、1つの大きな問題があります。アプリケーションは、アプリケーションがデバッグ中であるBar1かどうかを確認できません。どちらの場合も、タスクマネージャーで使用できます。Bar2Bar.svhost.exe
つまり、Bar.svhost.exeが無視され、Foo.exeデバッグプロセス中に終了する場合、これは不可能です。
しかし、もしBar.svhost.exe見られるなら、Foo.exe決して終わらない、私達は手動で殺さなければならないが、それからそれはきちんと掃除されなかった。
問題を解決する方法はありますか?
(マシン上で複数または実行できるが、1回だけ実行する必要があるため、またはを終了するFoo.exeことはできません。したがって、それ自体をチェックする必要があります。プロセスを「強制終了」すると、クリーンアップされます)Bar1Bar2Bar1Bar2FooFoo.exe
追加:ここに問題の擬似コードの例があります
//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;
}