[英]close .exe file using wpf application and button click
我想关闭使用WPF以编程方式在我的PC上运行的可执行文件(.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.CloseMainWindow或Process.Kill 。
CloseMainWindow向应用程序发送一个窗口关闭消息,该消息使应用程序可以要求用户在关闭之前执行任何必需的操作,甚至决定忽略该请求。
杀死另一方面,询问操作系统immediatelly杀死目标过程中,可能导致数据丢失。 这也是一个异步调用,这意味着您必须调用Process.WaitForExit才能等待进程结束。
在这两种情况下,您都需要处理可能的异常,如果目标进程在调用Kill或CloseMainWindow之前终止,正在终止或操作系统根本无法终止它,则可能引发该异常(可能是由于安全限制) )
为了避免某些异常,您可以通过调用Process.HasExited来简单地检查子应用程序是否已完成,然后再尝试将其终止。
您可以尝试这样的事情:
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);
}
}
首先,您可能需要使用Process.GetProcesses查找有问题的进程。
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.getprocesses(v=vs.110).aspx
或者甚至可以按名称获取进程:
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.getprocessesbyname(v=vs.110).aspx
然后一旦发现,你就杀死了。 这里是一些文档:
http://msdn.microsoft.com/zh-CN/library/system.diagnostics.process.kill(v=vs.110).aspx
保存该过程的引用,并在要停止该过程时调用Kill方法:
StartApp.Kill();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.