在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设置为默认浏览器的更多相关文章

  1. 在 Windows 10 专业版、企业版或教育版上设置展台

    原文: 在 Windows 10 专业版.企业版或教育版上设置展台 Set up a kiosk on Windows 10 Pro, Enterprise, or Education 适用于 Win ...

  2. Windows 10设置桌面图标间距、窗口的背景颜色、选中文字的背景颜色

    Windows 10取消了“高级外观设置”(或者叫“窗口颜色和外观”设置),想调整一些参数只能进注册表了. 修改后可能需要注销或重启才能生效. 按Win+R,然后输入regedit进入注册表编辑器. ...

  3. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  4. 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调

    [源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...

  5. 为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕?

    为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕? 在设置中设置了很多方法,但不管怎么设置就是不行,不到一分钟一定关屏幕. 开始以为是能源之星引起,查了相关资料说不是,那个能源之星标志只 ...

  6. Windows 10 UWP程序标题栏设置

    在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序 ...

  7. Window 10 Alt Tap 切换窗口,设置成Windows 7风格

    升级了Windows 10 以后,切换窗口非常的难受.新版的窗口切换的图标变成了窗口预览了,这总让我一瞬间找不到要去的窗口,所以我打算切换成Windows 7 的小图标风格. Windows + R ...

  8. HP 电脑 - Windows 10 如何设置虚拟内存

    HP 电脑 - Windows 10 如何设置虚拟内存(新)   适用于安装 Windows 10 系统的 HP 电脑 Windows 中运用了虚拟内存技术,即分出一部分硬盘空间来充当内存使用.当内存 ...

  9. 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 ...

随机推荐

  1. UIDynamic(重力行为+碰撞检测)

    一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (instancetype)initWithItems:(NSArra ...

  2. asp.net form身份认证不定时认证失败的问题 排查

    1.网站出现form认证不定时认证失败.登陆过后 每隔一会儿就需要重新登陆.首先检查的是form身份认证票据设置的时间(正常) 然后检查加密后的身份认证信息写入的cookie的失效时间(正常) 2.这 ...

  3. SpringBoot源码解析:AOP思想以及相应的应用

    spring中拦截器和过滤器都是基于AOP思想实现的,过滤器只作用于servlet,表现在请求的前后过程中:拦截器属于spring的一个组件,由spring管理, 可以作用于spring任何资源,对象 ...

  4. Emgu.CV/opencv 绘图 线面文字包括中文

    绘图很简单 Emgu.CV.Image<Bgr, Byte> image;   使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文   CircleF circle = ...

  5. ES5语法

    ES5新语法主要是体现在Object和.Array操作,同时涉及到JSON. Function.Date 和 String类型上. 1.Object ES5最大的特点是对象扩展很多方法. 新建对象:c ...

  6. 大熊君JavaScript插件化开发------(第一季)

    一,开篇分析 Hi,大家!大熊君又来了,今天这系列文章主要是说说如何开发基于“JavaScript”的插件式开发,我想很多人对”插件“这个词并不陌生, 有的人可能叫“组件”或“部件”,这不重要,关键是 ...

  7. Mongo DB 2.6 需要知道的一些自身限定

    在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...

  8. Android-修改TabWidget字体大小颜色及对齐

    在Android中,我们可以定义TabWidget来分页.在上一篇文章中有说到使用TabWidget定义Tab分页布局,但大部分用户可能会觉得默认的字体有点小,但Tab选项卡默认又不能设定字体大小,如 ...

  9. 【总结】虚拟机VirtualBox各种使用技巧

    作为个人学习研究,VirtualBox是首选,它是Oracle下免费的.开源.跨平台的一款虚拟机软件,小巧.实用,一点也不逊于商业版的VMware Workstation. VirtualBox官网: ...

  10. thinkphp自动验证---$_validate

    thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...