問這個問題後,我偶然發現了Registering a protocol handler in Windows 8
頂部投票答案有讓我在正確的軌道上,雖然有其他的問題。最後,這是我結束了:
// Register as the default handler for the tel: protocol.
const string protocolValue = "TEL:Telephone Invocation";
Registry.SetValue(
@"HKEY_CLASSES_ROOT\tel",
string.Empty,
protocolValue,
RegistryValueKind.String);
Registry.SetValue(
@"HKEY_CLASSES_ROOT\tel",
"URL Protocol",
String.Empty,
RegistryValueKind.String);
const string binaryName = "tel.exe";
string command = string.Format("\"{0}{1}\" \"%1\"", AppDomain.CurrentDomain.BaseDirectory, binaryName);
Registry.SetValue(@"HKEY_CLASSES_ROOT\tel\shell\open\command", string.Empty, command, RegistryValueKind.String);
// For Windows 8+, register as a choosable protocol handler.
// Version detection from https://stackoverflow.com/a/17796139/259953
Version win8Version = new Version(6, 2, 9200, 0);
if(Environment.OSVersion.Platform == PlatformID.Win32NT &&
Environment.OSVersion.Version >= win8Version) {
Registry.SetValue(
@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TelProtocolHandler",
string.Empty,
protocolValue,
RegistryValueKind.String);
Registry.SetValue(
@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TelProtocolHandler\shell\open\command",
string.Empty,
command,
RegistryValueKind.String);
Registry.SetValue(
@"HKEY_LOCAL_MACHINE\SOFTWARE\TelProtocolHandler\Capabilities\URLAssociations",
"tel",
"TelProtocolHandler",
RegistryValueKind.String);
Registry.SetValue(
@"HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications",
"TelProtocolHandler",
@"SOFTWARE\TelProtocolHandler\Capabilities",
RegistryValueKind.String);
}
TelProtocolHandler
是我的應用程序的名稱,應由無論你的處理器的名字是被替換。
另一個問題中接受的答案在註冊表中也有ApplicationDescription
。我沒有看到我檢查過的任何其他註冊處理程序都使用了相同的密鑰,因此我將其排除在外並且無法檢測到任何問題。
另一個關鍵問題是,如果我的設置處理程序的應用程序是32位,所有這些都不起作用。當在Wow6432Node中創建條目時,我無法選擇處理程序作爲給定協議的默認值。我花了一段時間才弄明白,因爲我的應用程序被編譯爲AnyCPU。我第一次錯過了這個小標誌在項目屬性:
是您的應用程序在Windows商店應用程序或桌面應用程序?你正在使用哪個Visual Studio版本? |鏈接文章的哪一部分有問題?您應該可以在項目設置的協議列表中添加'tel:',然後它將顯示在用戶可以選擇協議處理程序的列表中。 – CodesInChaos 2014-12-02 11:49:54
@CodesInChaos:這是一個桌面應用程序。我正在使用VS2013社區版。這篇文章引用了一個清單文件,我沒有在我的項目中使用這個清單文件,而且我似乎無法添加它。這篇文章明確提到了那個我沒有的清單。 – 2014-12-02 11:57:20