C#: 使用按钮运行进程并终止它

3

希望你能帮我翻译一下,我的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)
    {

    }

谢谢。

处理过程能实现你想要的吗?http://www.dotnetperls.com/kill - Alexandre TryHard Leblanc
如果您也是“其他”进程的作者,您可能希望考虑使用同步对象,例如一个命名的互斥体,来进行停止请求的通信。第二个进程可以在事件上等待,并在退出之前执行任何适当的操作。 - HABO
3个回答

5

Process.Start 返回一个类型为 Process 的对象。您可以将其保存在变量中,然后使用方法 Kill,该方法“立即停止关联的进程”(msdn

例如,在 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();
    }
}

谢谢,它正常工作。然而,如果应用程序被强制关闭,有没有办法终止进程? - user2077474

3
你应该调用 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的行为与用户使用系统菜单关闭应用程序的主窗口的行为相同。因此,通过关闭主窗口退出进程的请求不会立即强制应用程序退出。
等等...

0

试一下

try
{
Process [] proc Process.GetProcessesByName("notepad");
proc[0].Kill();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接