【问题标题】:Process.Kill does not work for process associated with default web browser [duplicate]Process.Kill 不适用于与默认 Web 浏览器关联的进程 [重复]
【发布时间】:2015-09-20 03:10:47
【问题描述】:

我用 C# 编写了一个控制台应用程序,它通过以下命令打开了一个浏览器。

Process webprocess =  Process.Start("http://www.hashgurus.com");

但是工作完成后我想关闭浏览器。我正在尝试终止该进程,但它不起作用。

webprocess.Kill();

【问题讨论】:

  • 你试过Kill
  • 非常大的进程,如浏览器,通常作为单实例应用程序工作。换句话说,如果浏览器已经在运行并且您运行此代码,浏览器只会要求第一个实例显示网页并终止。一种判断方法是查看在另一个选项卡中打开的页面。 Kill() 无法工作,进程已经终止。

标签: c#


【解决方案1】:
Process webBrowser = Process.Start( url );
webBrowser.WaitForExit();
webBrowser.Kill();
webBrowser.WaitForExit();

注意,我不知道这如何与大多数现代网络浏览器一样的多进程浏览器一起工作。如果您想确定,请使用递归 kill-all-child-processes 方法来确保树中的所有子进程都被杀死。但是我相信多进程浏览器中的子进程进程会检测到它们的父进程是否被杀死,然后在这种情况下提交仪式 seppuku。

【讨论】:

  • 这不起作用。进程 webprocess = Process.Start(url);当我调试时,我得到 Webprocess = null
【解决方案2】:

您可以尝试获取所有进程的列表并遍历它们并杀死您想要的那些。您需要使用System.Diagnostics

以下是它如何工作的一些步骤:

  1. 制作进程数组
  2. 将数组中的项目设置为所有正在运行的进程(我认为通过诊断有类似 GetProcesses() 方法)
  3. 对于数组中的每个进程
  4. 检查窗口的标题(我认为是.MainWindowTitle
  5. 如果它是您要杀死的浏览器,则杀死该进程(例如检查进程名称是否为“chrome”,如果是则杀死

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多