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 在文件打开方式上有两套注册表配置
一套是系统的,一套是当前用户的
默认情况下使用当前用户的注册表配置
管理员权限运行时就使用系统注册表配置
这样就是为什么 在管理员权限运行时才会出问题。
解决办法:把那些被改过的注册表改回来就行了,也可以使用一些修复工具。

“c# 打开网页出现 Class not registered错误 解决”的2个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据