Windows 10 使用C#如何将IE设置为默认浏览器
在WPF XBAP项目中遇到这样一个问题,程序在Windows 10上面无法运行。原因是因为Windows 10默认浏览器是Edge,而XBAP程序是需要在IE上面运行的。于是开始想办法修改Windows 10的默认浏览器。在Windows 10之前,只需要修改注册表的就可以了。将下面注册表的ProgId设置为IE.HTTP/IE.HTTPS即可。
HKEY_CURRENT_USER\ Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice
HKEY_CURRENT_USER\ Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice
Code:
class Program
{
private const string HTTP_KEY = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice"; private const string HTTPS_KEY = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice"; static void Main(string[] args)
{
Console.WriteLine("Change default browser to IE"); KeyChange(HTTP_KEY, false); KeyChange(HTTPS_KEY, true); Console.WriteLine("Changed successfully."); Console.ReadKey();
} private static void KeyChange(string key, bool https = false)
{
using (RegistryKey subKey = Registry.CurrentUser.OpenSubKey(key,true))
{
if (subKey != null &&
subKey.GetValue("ProgId") != null)
{
if (https)
{
if (subKey.GetValue("ProgId").ToString().ToUpper() != "IE.HTTPS")
{
subKey.SetValue("ProgId", "IE.HTTPS");
}
}
else
{
if (subKey.GetValue("ProgId").ToString().ToUpper() != "IE.HTTP")
{
subKey.SetValue("ProgId", "IE.HTTP");
}
}
}
}
}
}
执行完成后,Windows 10会在右下角提示:
经过调查分析,这是因为从Windows 10开始,修改ProgId的同时还需要修改Hash值,
如果我们通过手动的方式来修改Windows 10默认浏览器时会发现这个Hash值每次修改都会改变,而且不一样。猜测这是因为微软不希望有第三方程序来修改默认浏览器吧。通过注册表来修改默认浏览器的方式看来行不通了。
因为我们可以手动通过 控制面板 --> 默认程序 --> 选择IE浏览器 -->设置IE为默认浏览器来修改。这就提供了另外一个解决方案,通过录制一些脚本来执行。对Visual Studio Coded UI有一丁点儿的了解,于是我先使用Coded UI录制了修改默认浏览器的脚本。关于Coded UI的更多内容,请参考MSDN官网,
https://msdn.microsoft.com/en-us/library/dd286726.aspx#VerifyingCodeUsingCUITCreate
脚本点击这里下载,需要注意的是,需要使用Visual Studio 2015 Enterprise版本才能打开/运行Coded UI脚本。
下面我们就需要通过C#程序来承载这个测试脚本。要使脚本能够在客户机器上运行,我们需要添加一些Coded UI的Assembly,
1. 将下面DLL拷贝到 C:\Program Files (x86)\Common Files\Microsoft Shared\VSTT\14.0(32位地址:C:\Program Files\Common Files\Microsoft Shared\VSTT\14.0)
2. 注册C:\Program Files (x86)\Common Files\Microsoft Shared\VSTT\14.0\Microsoft.VisualStudio.TestTools.UITest.Playback.Engine.dll
private static void RegisterDll(string path)
{
try
{
//'/s' : Specifies regsvr32 to run silently and to not display any message boxes. string args = "/s" + " " + "\"" + path + "\""; Process process = new Process(); //This file registers .dll files as command components in the registry.
process.StartInfo.FileName = "regsvr32.exe"; process.StartInfo.Arguments = args; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); process.WaitForExit(); process.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
3. C#调用Coded UI脚本,
Playback.Initialize(); SetBrowserCodedUITest coded = new SetBrowserCodedUITest(); coded.SetBrowserMethod(); Playback.Cleanup();
运行结果如下:
通过测试,我们成功的将IE设置为了默认浏览器。
感谢您的阅读,代码点击这里下载。如果您有其他方法,欢迎与我分享。
Windows 10 使用C#如何将IE设置为默认浏览器的更多相关文章
- 在 Windows 10 专业版、企业版或教育版上设置展台
原文: 在 Windows 10 专业版.企业版或教育版上设置展台 Set up a kiosk on Windows 10 Pro, Enterprise, or Education 适用于 Win ...
- Windows 10设置桌面图标间距、窗口的背景颜色、选中文字的背景颜色
Windows 10取消了“高级外观设置”(或者叫“窗口颜色和外观”设置),想调整一些参数只能进注册表了. 修改后可能需要注销或重启才能生效. 按Win+R,然后输入regedit进入注册表编辑器. ...
- 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体
[源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...
- 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调
[源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...
- 为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕?
为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕? 在设置中设置了很多方法,但不管怎么设置就是不行,不到一分钟一定关屏幕. 开始以为是能源之星引起,查了相关资料说不是,那个能源之星标志只 ...
- Windows 10 UWP程序标题栏设置
在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序 ...
- Window 10 Alt Tap 切换窗口,设置成Windows 7风格
升级了Windows 10 以后,切换窗口非常的难受.新版的窗口切换的图标变成了窗口预览了,这总让我一瞬间找不到要去的窗口,所以我打算切换成Windows 7 的小图标风格. Windows + R ...
- HP 电脑 - Windows 10 如何设置虚拟内存
HP 电脑 - Windows 10 如何设置虚拟内存(新) 适用于安装 Windows 10 系统的 HP 电脑 Windows 中运用了虚拟内存技术,即分出一部分硬盘空间来充当内存使用.当内存 ...
- How to setup Assigned Access in Windows 10 (Kiosk Mode) 设置分配的访问权限(Kiosk模式)
Let’s say you’re building some sort of ingenious mechanical contraption to be displayed in public th ...
随机推荐
- UIDynamic(重力行为+碰撞检测)
一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (instancetype)initWithItems:(NSArra ...
- asp.net form身份认证不定时认证失败的问题 排查
1.网站出现form认证不定时认证失败.登陆过后 每隔一会儿就需要重新登陆.首先检查的是form身份认证票据设置的时间(正常) 然后检查加密后的身份认证信息写入的cookie的失效时间(正常) 2.这 ...
- SpringBoot源码解析:AOP思想以及相应的应用
spring中拦截器和过滤器都是基于AOP思想实现的,过滤器只作用于servlet,表现在请求的前后过程中:拦截器属于spring的一个组件,由spring管理, 可以作用于spring任何资源,对象 ...
- Emgu.CV/opencv 绘图 线面文字包括中文
绘图很简单 Emgu.CV.Image<Bgr, Byte> image; 使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文 CircleF circle = ...
- ES5语法
ES5新语法主要是体现在Object和.Array操作,同时涉及到JSON. Function.Date 和 String类型上. 1.Object ES5最大的特点是对象扩展很多方法. 新建对象:c ...
- 大熊君JavaScript插件化开发------(第一季)
一,开篇分析 Hi,大家!大熊君又来了,今天这系列文章主要是说说如何开发基于“JavaScript”的插件式开发,我想很多人对”插件“这个词并不陌生, 有的人可能叫“组件”或“部件”,这不重要,关键是 ...
- Mongo DB 2.6 需要知道的一些自身限定
在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...
- Android-修改TabWidget字体大小颜色及对齐
在Android中,我们可以定义TabWidget来分页.在上一篇文章中有说到使用TabWidget定义Tab分页布局,但大部分用户可能会觉得默认的字体有点小,但Tab选项卡默认又不能设定字体大小,如 ...
- 【总结】虚拟机VirtualBox各种使用技巧
作为个人学习研究,VirtualBox是首选,它是Oracle下免费的.开源.跨平台的一款虚拟机软件,小巧.实用,一点也不逊于商业版的VMware Workstation. VirtualBox官网: ...
- thinkphp自动验证---$_validate
thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...