0

我正在尝试从 ac# 代码将浏览器实例作为进程启动。然后我想杀死浏览器的同一个实例。我尝试使用 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();
        }
     }
4

3 回答 3

1

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

类似的 post
-Process.kill() 在 Windows 7 32 位中被拒绝,即使具有管理员权限

于 2012-12-06T07:27:42.663 回答
0

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

  • 选择一个PID,
  • 找到与该 PID 相关的 IE 窗口
  • 使其成为焦点(最小化其他)

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

于 2013-01-23T21:33:56.020 回答
0

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

看看这些问题。
1) 获取由 Process.start() 启动的进程的 PID
2) 在 C# 中以编程方式杀死 vista/windows 7 中的进程
3) Process.kill() 在 Windows 7 32 位中被拒绝,即使具有管理员权限



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

IE 会为程序的一个实例创建多个进程。(有关它的更多详细信息)这就是您获得不同 PID(针对不同进程)的原因。

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

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

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

让我知道这是否有效。

于 2012-12-06T06:37:39.197 回答