【问题标题】:issue with starting and a killing a process in windows 7在 Windows 7 中启动和终止进程的问题
【发布时间】:2012-12-06 06:15:37
【问题描述】:

我正在尝试从 c# 代码将浏览器实例作为进程启动。然后我想杀死浏览器的同一个实例。我尝试使用 process id 找到相同的实例。但是任务管理器中的进程ID和我启动进程时得到的初始ID不同。 有什么解决办法?为什么会这样?开发环境是windows 7。

  int ID= 0;
  void Start()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");
        startInfo.Arguments = "http://www.google.com";
        Process ieProcess = Process.Start(startInfo);
        ID= ieProcess.Id;
    }
  void Stop()
   {
    foreach (Process p in System.Diagnostics.Process.GetProcessesByName("iexplore"))
     {
       if ((p.Id == ID))
        {
                p.Kill();
        }
     }

【问题讨论】:

  • afaik 当您通过此方法启动 Internet Explorer 时,如果已经启动了一个,它将向原始页面发送打开另一个页面消息,以便您启动的进程将打开然后关闭。虽然我可能错了
  • 不要这样做。使用自动化界面。然后你可以调用Quit关闭IE窗口。
  • @user1687824 我已经编辑了我的答案。看看吧。
  • @RaymondChen 你能分享一些链接来展示如何做到这一点吗?会有很大帮助

标签: c# .net


【解决方案1】:

如果 IE 已经启动,此代码将不起作用。关闭所有 IE 浏览器,然后尝试运行代码。如果它有效,那么您可能需要寻找以下链接中建议的解决方案

类似帖子-
Process.kill() denied in Windows 7 32bits even with Administrator privileges

【讨论】:

    【解决方案2】:

    为什么不将代码添加到问题中?对于有兴趣帮助您的人来说,这将使生活变得轻松。如果你得到不同的 PID,很可能你的代码有问题! (我只是在猜测,没有看到您尝试过的内容。)

    也看看这些问题。
    1) Getting PID of process started by Process.start()
    2) Programmatically kill a process in vista/windows 7 in C#
    3) Process.kill() denied in Windows 7 32bits even with Administrator privileges



    添加代码可以更容易地理解问题所在,这就是您的问题。

    IE 为程序的一个实例创建多个进程。 (more details about it) 这就是为什么你会得到不同的 PID(针对不同的进程)。

    您的代码所做的只是杀死它的一个进程(通过在Stop() 方法中使用if 条件!)。所以当你再次尝试执行Start()(启动相同的进程)时,剩余的进程可能会生成InvalidOperationException

    所以你的代码应该做的是杀死所有活动的iexplore 进程。这可以通过简单地删除Stop() 方法的if 条件来完成。

    foreach(Process p in Process.GetProcessesByName("iexplore"))
    {
       p.Kill();
    }
    

    让我知道这是否有效。

    【讨论】:

    • 感谢您的回复。但问题是我不想关闭其他选项卡。我只想启动一个链接,一段时间后我想关闭它。有什么方法可以存储已经打开的实例并再次启动?
    • 在这种情况下,您必须知道您需要关闭的选项卡的 PID!我认为无法获取特定选项卡的 PID!
    【解决方案3】:

    我有一个类似的问题,只是我不想杀死我启动的 IE 进程,我想让它成为焦点。 我有一个启动 5 个 IE 窗口的应用程序。(不是选项卡,而是唯一的窗口) 我存储用于启动每个 IE 窗口的 PID。 在特定时间,我希望能够:

    • 选择一个PID,
    • 找到与该 PID 相关的 IE 窗口
    • 使其成为焦点(尽量减少其他)

    这适用于 XP 和 IE6(环境需要) 现在,当我使用 Win 7 和 IE 8 时,找不到我存储的 PID, 因此我不再能够更改焦点窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2016-08-14
      • 1970-01-01
      • 2015-02-03
      • 2011-04-19
      • 2018-01-18
      • 2017-11-26
      相关资源
      最近更新 更多