-1

このアプリケーションを nagios (http://www.nagios.org/) で監視する必要があるため、Windows フォームのロード時に実行中の Windows プロセス (タスク マネージャーに表示されるプロセス) を作成する必要があります。そのため、フォームが読み込まれるとバックグラウンド プロセスで exe が実行され、フォームが閉じられるとプロセスも停止する必要があります。

アップデート

そのため、フォームが読み込まれると、現在の ApplicationName.exe がタスク マネージャーの [プロセス] タブに表示され、フォームが閉じられると、ApplicationName.exe も停止する必要があります。

また、デバッグなしで開始すると、ApplicationName.exe がタスク マネージャーの [プロセス] タブに表示されますが、デバッグを開始 (F5) すると、[プロセス] タブに ApplicationName.exe が表示されないこともわかりました。ここで、デバッグを開始しても、[プロセス] タブに ApplicationName.exe が表示されることを確認したいと思います。それ、どうやったら出来るの?

4

3 に答える 3

0

サンプルのwinformアプリであるTest.exeがあります。そしてそれをプロセスとして使用しました

    public Process process = new Process(); 
    protected override void OnLoad(EventArgs e)
    {
        process.StartInfo.Verb = "open";
        process.StartInfo.FileName = "Test.exe"; //Give your App or Process Name
        process.StartInfo.WorkingDirectory = @"C:\Users\sali\Documents\Visual Studio2010\Projects\Test\Test\bin\Debug"; //Give your App or Process path
        process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        process.Start();
    }

それが役に立てば幸いです または、何か違うものが必要な場合は、お気軽にお問い合わせください

于 2012-04-10T15:08:04.593 に答える
0

作成した Windows フォーム アプリケーションが実行時にプロセスのリストに表示されるようにしたい場合は、いずれにせよ表示されることがわかります。独自のプロセスで実行するために特別なことをする必要はありません。たとえば、VS2010 で簡単なすぐに使える Windows フォーム アプリケーションを作成しました。

バニラ Windows フォーム アプリケーション

そして、それを(デバッグなしで)実行しました。これは、タスクマネージャーのプロセスリストにあります。

実行中のプロセスのタスク マネージャーのリスト

(注: 私は Win8 を実行しているため、タスク マネージャーの外観が少し異なる場合があります。)

ただし、自分が作成したものではない Windows フォーム アプリケーションがユーザーによっていつ開始および停止されたかを知る必要がある場合は、この質問への回答または のプロセスの作成/変更/シャットダウン イベントで説明されているように、Windows フックを確認する必要があります。 Windows Management Instrumentation (WMI) API

于 2012-04-10T14:47:18.293 に答える
0

明確化が必要です: Nagios モニターを実行している追加のプロセスですか、それともあなたが作成した何かですか?

どちらの方法でも、 Process.Start() を使用して、独自のアプリケーション内から別のアプリケーションを開始できます。

//event handler for the form's Load event
public void MyWindow_FormLoad(object sender, EventArgs e)
{
   //kick off the process you want
   Process.Start(@"C:\Program Files\MyOtherApp\MyOtherApp.exe");
}

引数を指定したり、プロセスの起動動作をカスタマイズしたりできるオーバーロードがあります。しかし、これは基本的な呼び出しであり、(実際のプログラムの場所が与えられた場合) デフォルトの起動動作 (Windows エクスプローラーでダブルクリックしたかのように) で別の EXE を新しいプロセスとして開始する必要があります。

ここで、2 つのプログラムを相互に通信させる方法など、さらに必要な場合は、適切な詳細を使用して質問を拡張する必要があります。

コメントから編集: ああ。わかりました、それは少し違います。

通常、特定の時点で実行されている EXE は、デフォルトでタスク マネージャーのプロセス リストに表示され、特別なコーディングは必要ありません。見られたくないプロセスはウイルスの特徴の 1 つであるため、プロセスをそのリストに表示しないようにすることは実際には非常に困難です。

ただし、Visual Studio からデバッグ モードでアプリを実行すると、コードは VS のプロセス境界内からコンパイルおよび実行され、独自のプロセスとして表示されません。タスク マネージャーで独自のプロセスとして表示するには、コンパイルされたアプリケーションを VS の外部から実行する必要があります。実行中のプロセスを開始した後、VS のデバッガーを実行中のプロセスに「アタッチ」することで、引き続きデバッグできます。ただし、これは、アプリが安定していて、手動でアタッチするのに十分長く実行されている必要があることを意味します。「休止」状態に達するまでにほとんどまたはすべての実行を終了したプログラムは、デバッグしたいことを実行する前にアタッチするのを待つために、いくつかの変更が必要になります。

于 2012-04-10T14:25:43.273 に答える