January 2015 Blog Posts

获取本机系统内已经安装的浏览器列表

MitchellChu 2015-01-15 .NET技术 其他技术

最近突然碰到个比较棘手的问题,客户需要罗列出机器上所有可用的列表,至于作用么,就是让用户可以选择自己喜欢的浏览器来浏览指定信息。对于混杂的浏览器市场,这个需求确实够喝上一壶的了。

带着泪流满面的表情进入了无穷无尽的方案寻找中,不过到现在还是没有一个完满的答案。本文就记录下已经得到的一些信息吧。

对于一些标准的浏览器(有国内的么?自然是没有,谢谢),他们都会将自己的信息保存到这个注册表项下面,里面提供了丰富多彩的内容,基本上你想要的,他都能告诉你。需要注意的是,在64位系统中,会有两个位置可以找到。

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternet
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet

上面这两个路径下,就包含了机器上所有的浏览器信息(再次排除国内浏览器)。如果是在32位系统中,只有后一个路径可以使用。

知道位置之后,在程序中要获取浏览器列表信息就比较简单了,参见以下C#()代码:

        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

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。