2

これで私を助けてくれることを願っています.私のC#は非常に錆びています.

フォームの読み込み時に実行可能ファイルを実行しています。

    private void Form1_Load(object sender, EventArgs e)
    {
        ProcessStartInfo exe = new ProcessStartInfo();
        exe.Arguments = "arguments";
        exe.FileName = "file.exe";
        Process.Start(exe);
    }

ボタンを使用してそのプロセスを強制終了したいのですが、それを達成する方法がわかりません。

    private void button1_Click(object sender, EventArgs e)
    {

    }

ありがとう。

4

3 に答える 3

5

Process.Startタイプのオブジェクトを返しますProcess。それを変数に保存してから、メソッドを使用できKillますImmediately stops the associated processmsdn

たとえば、Form1レベルでフィールドを宣言します。

class Form1
{
    private Process process;

    private void Form1_Load(object sender, EventArgs e)
    {
        //running notepad as an example
        process = Process.Start("notepad"); 
    }

    //and then at button handler kill that process
    private void button1_Click(object sender, EventArgs e)
    {
        //consider adding check for null
        process.Kill();
    }
}
于 2013-11-13T02:54:04.033 に答える
2

プロセスを正常に終了し、すべてのウィンドウを閉じるProcess.CloseMainWindowを呼び出す必要があります。異常終了を引き起こすProcess.Killとは対照的です。CloseMainWindow は、ユーザー インターフェイスを持つアプリケーションに適しています。

process =  Process.Start(exe);//in form load set field

private void button1_Click(object sender, EventArgs e)
{
   process.CloseMainWindow();
}

MSDNのコメントには、非同期動作に関する重要な情報やその他の関連する詳細が含まれています。

Kill はプロセスの終了を強制しますが、CloseMainWindow は終了を要求するだけです。グラフィカル インターフェイスを持つプロセスが実行されている場合、そのメッセージ ループは待機状態になります。メッセージ ループは、Windows メッセージがオペレーティング システムによってプロセスに送信されるたびに実行されます。CloseMainWindow を呼び出すと、メイン ウィンドウを閉じる要求が送信されます。これにより、適切な形式のアプリケーションでは、子ウィンドウが閉じられ、アプリケーションで実行中のすべてのメッセージ ループが取り消されます。CloseMainWindow を呼び出してプロセスを終了する要求によって、アプリケーションが強制的に終了されることはありません。アプリケーションは、終了する前にユーザーの確認を求めるか、終了を拒否することができます。アプリケーションを強制終了するには、Kill メソッドを使用します。CloseMainWindow の動作は、ユーザーがアプリケーションを閉じる動作と同じです。システム メニューを使用してメイン ウィンドウを開きます。したがって、メイン ウィンドウを閉じてプロセスを終了する要求によって、アプリケーションがすぐに終了することはありません。

等...

于 2013-11-13T03:10:48.663 に答える
0

これを試して

try
{
Process [] proc Process.GetProcessesByName("notepad");
proc[0].Kill();
}
于 2013-11-13T03:06:51.693 に答える