【问题标题】:Cannot update Process variable无法更新流程变量
【发布时间】:2014-01-06 17:30:24
【问题描述】:

我正在尝试终止一个进程,但我无法将值绑定到进程变量。这就是我的代码得到的;

URL = (string)result[1];
Process browser = Process.Start(@"chrome.exe","http:\\www.youtube.com/watch?v=" + URL);
Audio.SetApplicationVolume(APP, 15);

resultaat = (string)result[2];
Videolengte = Convert.ToInt32(resultaat);
Tijd = Videolengte;
Tijd = 10;
System.Threading.Thread.Sleep(Tijd);
browser = GetWindowProcess((string)result[3]);
//wanneer timer van het nummer weer klaar is, volgende dingen uitvoeren.
Audio.SetApplicationVolume(APP, 15);
browser.Kill();
deleteRow();

获取窗口进程

 private Process GetWindowProcess(string windowTitle)
    {
        foreach (var proc in Process.GetProcessesByName("chrome"))
        {
            if (proc.MainWindowTitle.IndexOf(windowTitle, StringComparison.OrdinalIgnoreCase) > 0)
            {
                return proc;
            }
        }

        return null;
    }

当我将进程名绑定到它时尝试杀死它时,它说浏览器为空,有人知道这是什么原因吗?

【问题讨论】:

  • 在任务管理器中看到 chrome.exe 了吗?
  • 是的,我看到它正在运行。
  • 什么是GetWindowProcess?我用谷歌搜索了一下,什么也没找到。
  • 是否需要重置浏览器变量?当然,您可以在从 Process.Start 返回的原始 Process 上全部 .kill 吗?
  • 能否将GetWindowProcess添加到问题中的代码中?

标签: c# google-chrome process


【解决方案1】:

看起来您的问题出在 GetWindowProcess 内部。当您执行proc.MainWindowTitle 时,它会为每个进程返回一个空字符串 - 可能是因为 Chrome 窗口没有标题,并且选项卡不被视为“窗口”

在别处查看此对同一问题的答案。看起来至少已经有好几个月了……

https://stackoverflow.com/a/16958798/2505574

如果根据您对这个答案的 cmets(不是您在问题中所说的),您想要杀死 所有 chrome 进程,那么您只需要编写一个迭代进程并杀死它们的方法:

public void KillChromeProcesses()
{
  foreach (var proc in Process.GetProcessByName("chrome"))
  {
    proc.Kill();
  }
}

【讨论】:

  • 但它以前可以工作,由于发生了一些变化,它无法再次正确检测到它......似乎无法弄清楚是什么
  • Chrome 可能已经改变了一些阻止你的代码工作的东西。如果我找到替代方法,我会更新答案。
  • 但这不是我的问题,我只是想杀死所有的 chrome 标签,窗口标题只是在这里查看哪些是打开的。
  • 那为什么你的代码会检查它并且只返回一个符合你条件的进程?
  • nvm,我自己找吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多