C# 使用wpf应用程序关闭.exe文件并单击按钮

C# 使用wpf应用程序关闭.exe文件并单击按钮,c#,process,system.diagnostics,kill-process,C#,Process,System.diagnostics,Kill Process,我想关闭电脑上使用WPF编程运行的可执行文件(.EXE),我已通过以下方式成功启动此.EXE文件: if (_MyPath != "") { Process StartApp = new Process(); string str = @_MyPath; StartApp.StartInfo.FileName = str; StartApp.Start(); } else { MessageBox.Show("Path Empty", "Error", Messag

我想关闭电脑上使用WPF编程运行的可执行文件(.EXE),我已通过以下方式成功启动此.EXE文件:

if (_MyPath != "")
{
   Process StartApp = new Process();
   string str = @_MyPath;
   StartApp.StartInfo.FileName = str;
   StartApp.Start();
}
else
{
   MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}

现在,我的目的是通过单击按钮来关闭此.EXE文件的进程?

首先,您需要使用process.getprocesss来查找有问题的进程

或者甚至可以按名称获取进程:

一旦被发现,你就杀人。以下是一些文档:


首先,您需要使用process.GetProcesses查找有问题的流程

或者甚至可以按名称获取进程:

一旦被发现,你就杀人。以下是一些文档:


首先,您需要使用process.GetProcesses查找有问题的流程

或者甚至可以按名称获取进程:

一旦被发现,你就杀人。以下是一些文档:


首先,您需要使用process.GetProcesses查找有问题的流程

或者甚至可以按名称获取进程:

一旦被发现,你就杀人。以下是一些文档:


保存进程的引用,当您想要停止它时,调用Kill方法:

StartApp.Kill();

保存进程的引用,如果要停止它,请调用Kill方法:

StartApp.Kill();

保存进程的引用,如果要停止它,请调用Kill方法:

StartApp.Kill();

保存进程的引用,如果要停止它,请调用Kill方法:

StartApp.Kill();

将流程实例存储在字段中,并对其调用或

CloseMainWindow向应用程序发送一条window close消息,让应用程序在关闭前询问用户,执行任何必需的操作,甚至决定忽略该请求

另一方面,Kill要求操作系统立即终止目标进程,可能会导致数据丢失。它也是一个异步调用,这意味着您必须调用以等待进程结束

在这两种情况下,如果目标进程在调用Kill或CloseMainWindow之前终止,或者正在终止,或者操作系统根本无法终止它(可能是由于安全限制),则需要处理可能引发的异常

为了避免某些异常,您可以通过调用

您可以尝试以下方法:

Process  _childApp;

private void SpawnProcess()
{
...
    if (_MyPath != "")
    {
       _childApp= new Process();
       string str = @_MyPath;
       _childApp.StartInfo.FileName = str;
       _childApp.Start();
    }
    else
    {
       MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
...
}

private void StopProcess()
{
    if (_childApp.HasExited)
        return;
    try
    {
        _childApp.Kill();
        if (!_childApp.WaitForExit(5000))
        {
          MessageBox.Show("Closing the app takes too long","Warning",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
        }
    }
    catch(Exception exc)
    {
          MessageBox.Show(exc.ToString(),"Failed to close app",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
}

将流程实例存储在字段中,并对其调用或

CloseMainWindow向应用程序发送一条window close消息,让应用程序在关闭前询问用户,执行任何必需的操作,甚至决定忽略该请求

另一方面,Kill要求操作系统立即终止目标进程,可能会导致数据丢失。它也是一个异步调用,这意味着您必须调用以等待进程结束

在这两种情况下,如果目标进程在调用Kill或CloseMainWindow之前终止,或者正在终止,或者操作系统根本无法终止它(可能是由于安全限制),则需要处理可能引发的异常

为了避免某些异常,您可以通过调用

您可以尝试以下方法:

Process  _childApp;

private void SpawnProcess()
{
...
    if (_MyPath != "")
    {
       _childApp= new Process();
       string str = @_MyPath;
       _childApp.StartInfo.FileName = str;
       _childApp.Start();
    }
    else
    {
       MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
...
}

private void StopProcess()
{
    if (_childApp.HasExited)
        return;
    try
    {
        _childApp.Kill();
        if (!_childApp.WaitForExit(5000))
        {
          MessageBox.Show("Closing the app takes too long","Warning",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
        }
    }
    catch(Exception exc)
    {
          MessageBox.Show(exc.ToString(),"Failed to close app",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
}

将流程实例存储在字段中,并对其调用或

CloseMainWindow向应用程序发送一条window close消息,让应用程序在关闭前询问用户,执行任何必需的操作,甚至决定忽略该请求

另一方面,Kill要求操作系统立即终止目标进程,可能会导致数据丢失。它也是一个异步调用,这意味着您必须调用以等待进程结束

在这两种情况下,如果目标进程在调用Kill或CloseMainWindow之前终止,或者正在终止,或者操作系统根本无法终止它(可能是由于安全限制),则需要处理可能引发的异常

为了避免某些异常,您可以通过调用

您可以尝试以下方法:

Process  _childApp;

private void SpawnProcess()
{
...
    if (_MyPath != "")
    {
       _childApp= new Process();
       string str = @_MyPath;
       _childApp.StartInfo.FileName = str;
       _childApp.Start();
    }
    else
    {
       MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
...
}

private void StopProcess()
{
    if (_childApp.HasExited)
        return;
    try
    {
        _childApp.Kill();
        if (!_childApp.WaitForExit(5000))
        {
          MessageBox.Show("Closing the app takes too long","Warning",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
        }
    }
    catch(Exception exc)
    {
          MessageBox.Show(exc.ToString(),"Failed to close app",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
}

将流程实例存储在字段中,并对其调用或

CloseMainWindow向应用程序发送一条window close消息,让应用程序在关闭前询问用户,执行任何必需的操作,甚至决定忽略该请求

另一方面,Kill要求操作系统立即终止目标进程,可能会导致数据丢失。它也是一个异步调用,这意味着您必须调用以等待进程结束

在这两种情况下,如果目标进程在调用Kill或CloseMainWindow之前终止,或者正在终止,或者操作系统根本无法终止它(可能是由于安全限制),则需要处理可能引发的异常

为了避免某些异常,您可以通过调用

您可以尝试以下方法:

Process  _childApp;

private void SpawnProcess()
{
...
    if (_MyPath != "")
    {
       _childApp= new Process();
       string str = @_MyPath;
       _childApp.StartInfo.FileName = str;
       _childApp.Start();
    }
    else
    {
       MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
...
}

private void StopProcess()
{
    if (_childApp.HasExited)
        return;
    try
    {
        _childApp.Kill();
        if (!_childApp.WaitForExit(5000))
        {
          MessageBox.Show("Closing the app takes too long","Warning",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
        }
    }
    catch(Exception exc)
    {
          MessageBox.Show(exc.ToString(),"Failed to close app",
                                              MessageBoxButton.OK,
                                              MessageBoxImage.Error);
    }
}


你需要找到有问题的过程,一旦找到,你就杀了@Ahmedilya因为OP已经有了一个对流程对象的引用是的,我重新阅读了它,之前错过了它。很抱歉你需要找到有问题的过程,一旦找到,你就杀了@Ahmedilya因为OP已经有了一个对流程对象的引用是的,我重新阅读了它,之前错过了它。很抱歉你需要找到有问题的过程,一旦找到,你就杀了@Ahmedilya因为OP已经有了一个对流程对象的引用是的,我重新阅读了它,之前错过了它。很抱歉你需要找到有问题的过程,一旦找到,你就杀了@Ahmedilya因为OP已经有了一个对流程对象的引用是的,我重新阅读了它,之前错过了它。很抱歉当你已经有了一个对itAgreed@PanagiotisKanavos的引用时,就不需要搜索这个过程了——我重新阅读了它,并找到了答案。但如果他们真的这么做了,我会采取更多的解决方案