最近突然碰到个比较棘手的问题,客户需要罗列出机器上所有可用的浏览器列表,至于作用么,就是让用户可以选择自己喜欢的浏览器来浏览指定信息。对于混杂的浏览器市场,这个需求确实够喝上一壶的了。
带着泪流满面的表情进入了无穷无尽的方案寻找中,不过到现在还是没有一个完满的答案。本文就记录下已经得到的一些信息吧。
对于一些标准的浏览器(有国内的么?自然是没有,谢谢),他们都会将自己的信息保存到StartMenuInternet这个注册表项下面,里面提供了丰富多彩的内容,基本上你想要的,他都能告诉你。需要注意的是,在64位系统中,会有两个位置可以找到。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternet
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
上面这两个路径下,就包含了机器上所有的浏览器信息(再次排除国内浏览器)。如果是在32位系统中,只有后一个路径可以使用。
知道位置之后,在程序中要获取浏览器列表信息就比较简单了,参见以下C#(.NET)代码:
public static void BrowsersData()
{
RegistryKey browsersKey;
browsersKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet");
if (browsersKey == null)
browsersKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
using (browsersKey)
{
string[] subKeys = browsersKey.GetSubKeyNames();
string locationPath = @"\shell\open\command";
foreach (string key in subKeys)
{
RegistryKey appLocationKey = browsersKey.OpenSubKey(key + locationPath);
Console.WriteLine("{0}:{1}", key, (string)appLocationKey.GetValue(null));
appLocationKey.Dispose();
}
}
}
先说明,上述方法对国内绝大部分浏览器无效。国内浏览器不知道是出于何种原因,均没有对相应的注册表项进行添加。难道是不屑与国际标准为伍的节奏么?
测试可以正常使用的浏览器有:IE,FireFox,Chrome均可正常使用
国内不支持的浏览器有:360浏览器,搜狗浏览器,腾讯浏览器均无法支持
国内支持的浏览器:百度Player浏览器(百度浏览器没测试了,被国内浏览器整的没信心了), 淘宝浏览器(这个未确认版本)
对于国内的浏览器如何处理呢,一般只能从安装程序的列表中获取了,但这个获取要自己找匹配了,比如360浏览器,在添加删除那个列表中你可以找名字匹配的程序即可。不过这里会有一个问题,就是要收集所有浏览器信息了,好端端的,又要让程序狗累上一宿来搜罗这些浏览器信息了。
后记:搜狗浏览器关于不能在注册表中找到的问题,据搜狗的技术支持说现在在Win8上是支持了,但未确认。
参考:
1. How to Register an Internet Browser or Email Client With the Windows Start Menu