在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設置為了默認浏覽器。
感謝您的閱讀,代碼點擊這裡下載。如果您有其他方法,歡迎與我分享。