c# 打开网页出现 Class not registered错误 解决

做程序时发现,点击界面上的所有网页链接,全部出现错误所有使用System.Diagnostics.Process.Start 打开网页的代码全部报错

奇怪,以前好好的,怎么就出错了。? 开始排查。。。。。 首先,我发现这个问题只出现在需要管理员权限运行的程序上。 1.我把程序放到虚拟机上运行,一切正常!! 现在,问题锁定在了本机系统上面。 肯定是最近某些操作破坏了系统 2.我用System.Diagnostics.Process.Start代码打开本地一个文件夹,一切正常!说明.net 环境不存在问题 3.我用这样一个代码打开网页测试。这个理论上和直接用System.Diagnostics.Process.Start效果相同 是从注册表获取默认浏览器,在打开

  1. RegistryKey key = Registry.ClassesRoot.OpenSubKey(@”http\shell\open\command\“);
  2. string s = key.GetValue(“”).ToString();
  3. System.Diagnostics.Process.Start(s.Substring(0, s.Length - 5), “http://www.baidu.com“);

问题出现了

奇怪了,我的浏览器明明很正常,怎么会找不到? 我发现程序从注册表中提取到的默认浏览器地址是 “\“C:\\Program Files (x86)\\baidu\\BaiduBrowser\\baidubrowser.exe\“ – \“%1\“淨” 而我用的是猎豹浏览器,从没用过百度,怎么会出现了百度浏览器?问题是不是和这个有关? 我用注册表编辑器继续摸索 我发现系统默认的htm、html打开方式都被更改成了百度浏览器

http链接的打开方式也被更改

而这个文件夹中并不存在百度浏览器文件。 也就是说百度的流氓软件 只更改了注册表,没有装软件。 现在问题清楚了 还有一个问题    为什么 而我在打开网页时为什么不出问题呢? 这是因为windows 在文件打开方式上有两套注册表配置 一套是系统的,一套是当前用户的 默认情况下使用当前用户的注册表配置 管理员权限运行时就使用系统注册表配置 这样就是为什么 在管理员权限运行时才会出问题。 解决办法:把那些被改过的注册表改回来就行了,也可以使用一些修复工具。