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