我只想问你关于如何“终止”正在运行的应用程序/流程的意见/建议是C#
现在,我确实有以下代码:
Process myProcess;
private void btnOpen_Click(object sender, RoutedEventArgs e)
{
DirectoryInfo di = new DirectoryInfo(System.Environment.GetFolderPath(Environment.SpecialFolder.Programs));
myProcess = Process.Start(di + @"\Wosk\Wosk.appref-ms"); // opening a file coming for Startup Menu
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
myProcess.Kill(); // not working - Cannot process request because the process has exited
}
我也试过myProcess.Close();但没有发生任何事情。
答案 0 :(得分:3)
答案 1 :(得分:3)
根据您的评论,当您点击关闭按钮时,Process
实例已经退出。这可以在任何时候发生,这是你需要防范的事情。最简单的方法是简单地捕获在已经退出的进程上调用Kill
所产生的异常。
try {
myProcess.Kill();
} catch ( InvalidOperationException ) {
// Process is already finished so nothing to do
}
答案 2 :(得分:3)
您正在启动使用ClickOnce安装的程序。 .appref-ms由辅助程序rundll32.exe执行,该程序启动进程并快速退出。要终止已启动的进程,您需要使用Process.GetProcessesByName()找到实际运行的.exe并使用Kill方法。
我们无法告诉您进程名称是什么,包含在.appref-ms文件中。但是使用TaskMgr.exe很容易看到。
答案 3 :(得分:3)
Process[] islemler = Process.GetProcessesByName("osk");
foreach (Process islem in islemler)
islem.Kill();
答案 4 :(得分:2)
首先请更换:
di + @"\Wosk\Wosk.appref-ms"
使用:
Path.Combine(di.FullName, @"Wosk\Wosk.appref-ms")
现在要点:我不知道Wosk.appref-ms
是什么或者这个过程是如何开始的。如果这是一个文件,它将使用与此文件扩展名关联的默认程序打开。问题可能与您启动的进程仅启动另一个进程并立即终止有关。这就是为什么当你试图杀死它时它说它已经退出了,但它产生的实际过程仍在运行。在这种情况下,您必须使用Process.GetProcesses()枚举正在运行的进程,找到该进程并将其停止。