【问题标题】:How do I use C# to get the path to chrome.exe on Windows?如何使用 C# 在 Windows 上获取 chrome.exe 的路径?
【发布时间】:2018-01-05 04:42:42
【问题描述】:

我想从我的自动化测试框架中启动 chrome,以便我可以测试我的服务器端 ASP.NET 代码。确定 chrome.exe 在我的计算机上的位置的最佳方法是什么?

【问题讨论】:

  • 即使您通过一些好的答案回答了自己的问题(非常好),但有人可能会争辩说您的问题本身太宽泛“最佳方式” 取决于意见。忽略你的答案,你的问题没有研究的迹象。有什么代码可以显示吗? How to Ask
  • 感谢米奇的反馈。

标签: c# asp.net google-chrome


【解决方案1】:

在计算机上安装 Chrome 时,它​​会安装 ChromeHTML URL 协议。您可以使用它来获取 Chrome.exe 的路径。

一些示例代码可能会有所帮助。以下代码返回一个如下所示的字符串:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -- "%1"

示例代码:

var path = Microsoft.Win32.Registry.GetValue(
    @"HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command", null, null) as string;
if (path != null)
{
    var split = path.Split('\"');
    path = split.Length >= 2 ? split[1] : null;
}

如果在代码 sn-p 的末尾 path 为 null,那么您可以假设 Chrome 没有安装。

【讨论】:

  • 只是为了不表现出不好的感觉,我很喜欢这个答案。 +1
【解决方案2】:

另一种方法是使用 Karma 测试框架使用的逻辑。

const string suffix = @"Google\Chrome\Application\chrome.exe";
var prefixes = new List<string> {Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)};
var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
var programFilesx86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
if (programFilesx86 != programFiles)
{
    prefixes.Add(programFiles);
}
else
{
    var programFilesDirFromReg = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion", "ProgramW6432Dir", null) as string;
    if (programFilesDirFromReg != null) prefixes.Add(programFilesDirFromReg);
}

prefixes.Add(programFilesx86);
var path = prefixes.Distinct().Select(prefix => Path.Combine(prefix, suffix)).FirstOrDefault(File.Exists);

如果在代码 sn-p 的末尾 path 为 null,那么你可以假设 Chrome 没有安装。

【讨论】:

  • 这种方法的问题在于,它假设 Chrome 在其中一个文件夹中的存在意味着它正确安装,它可能没有(它可能没有registry 条目与文件系统中的孤立文件)。这就是为什么注册表方法(根据您在下面的回答)效果更好
  • Micky,我认为假设 Chrome 安装正确是大多数人愿意接受的可接受的折衷方案。感谢您的反馈。
  • 好点。不过,我确实喜欢文件夹扫描方法。 :) +1
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2011-01-30
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多