【问题标题】:Process.WaitForExit() not waiting for multiple Chrome instancesProcess.WaitForExit() 不等待多个 Chrome 实例
【发布时间】:2015-03-18 02:23:52
【问题描述】:

我正在尝试使用 .NET 框架 4.0 从 WPF 应用程序启动 Chrome,其代码类似于以下内容:

var arg = string.Format("--app=\"{0}\" --window-size=1024,1000", "http://bing.com");
this._process = Process.Start("chrome.exe", arg);
this._process.WaitForExit();
// Perform relevant operations once the process completes/ exit

我正在以应用模式打开 chrome。

案例 1:当我没有打开其他 Chrome 实例/窗口时,WaitForExit 会阻止控件,直到通过代码创建的 Chrome 窗口关闭 - 这就是我要寻找的。

案例 2: 如果我已经有一个 Chrome 实例正在运行。然后它不会等待通过代码创建的 chrome 实例退出并移动到下一行。我希望有与案例 1 类似的体验,即应该阻止控件,直到用户关闭 chrome 实例。

当我已经打开了多个 Chrome 实例时,我需要做些什么才能使其正常工作吗?

【问题讨论】:

  • 旁注:“不工作”和“不做我想做的事”是somwehat不同的事情......在这种情况下“chrome.exe”立即存在的事实并没有使@987654323 @broken,它只是不符合你的目标......
  • 当您启动 chrome 时,它​​会查找现有的 chrome 进程。如果找到一个,它会告诉该进程打开一个新的选项卡/窗口,然后退出。你还想等什么?您打开要关闭的 chrome 选项卡/窗口?
  • 嗨,Alexei,Blorgbeard 我已添加编辑问题并提供了其他信息。希望问题现在很清楚。
  • “它不会等待通过代码创建的chrome实例退出” - 它确实等待,只是您创建的实例(实际进程)在告诉现有实例打开后立即退出而是窗户。 Chrome 有 很多 个命令行开关;你也许能找到一些让它按照你想要的方式运行的东西。看看here
  • 嗨@Blorgbeard,你是对的。 'Process.Start' 确实创建了一个新实例并立即退出。事实上,它可能会创建多个进程。现在我的问题是识别由“Process.Start”创建的进程(或实例)。

标签: c# .net wpf process


【解决方案1】:

您可以使用 Process.GetProcessesByName 来获取所有打开的 chrome 进程,并为每个进程调用 WaitForExit

【讨论】:

  • 嗨,Phenix,如果我将 WaitForExit 放在所有打开的 chrome 进程上,它确实有效,但我只需要等待通过代码创建的进程。因此,并没有真正解决我的问题。
  • “案例 2:如果我已经有一个 Chrome 实例正在运行”。这个chrome进程是通过你的代码创建的吗它在你的过程中
  • 嗨@Pehnix_yu,其他chrome实例不是由代码创建的。我已经有了要等待的进程对象(this._process)。问题是当我们有多个实例运行时(不管它们是否由代码创建)然后 this._process.WaitForExit() 不会等待由代码创建的 chrome 进程关闭。
【解决方案2】:
Process.Start(@"%AppData%\..\Local\Google\Chrome\Application\chrome.exe", 
              "http:\\www.YourUrl.com");

你也可以用dis试试

 Process.Start("chrome", @"http://www.stackoverflow.net/");

【讨论】:

  • 这和等待浏览器退出有什么关系?
  • 这与 OP 询问的内容无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多