いくつかの独自のプロセスを監視し、必要に応じてそれらを再起動する組み込みシステムのウォッチドッグサービスをコーディングしています。(質問する前に、マルウェアとは何の関係もありません。これは単なるビジネス要件です)
作成したばかりのプロセスからフレンドリ名を取得する必要があります。これにより、後でその名前を使用してそのプロセスを取得し、その状態を監視できます。
私の問題は次のとおりです。
Process.ProcessName
直後Process.Start()
に読み込もうとするInvalidOperationException
と、プロセスがまだ完全に作成されていないため、が表示されます。を使用する場合も同じことが起こります
Process.WaitForInputIdle()
が、これにはメッセージポンプが必要であり、多くの実行可能ファイルは実際のアプリケーションのUIレスランチャーである可能性があるため、これはオプションではない可能性があります。プロセスを作成した直後、他のことをする前に、わかりやすい名前を取得する必要があります。
コードスニペットは次のとおりです。
var startInfo = new ProcessStartInfo { FileName = "notepad.exe" };
var process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForInputIdle();
var friendlyName = process.ProcessName;
InvalidOperationException
たとえば、開始されているプロセスがFirefoxの場合、これにより最後の行にがスローされます。
では、これをどのように行うのでしょうか?より安全な方法はありますか?
編集:明確にするためのコードスニペットを追加しました。EDIT2:明確にするために質問全体を言い換え、無関係なものを省きました。