從網頁中經過自定義URL Protocol調用本地程序,須要將協議寫到註冊表中。
瀏覽器在解析到自定義URL Protocol以後,尋找註冊表,經過註冊表啓動相應的程序並傳入參數。
協議裏面須要記錄本地程序的路徑信息。html
1、HTML調用方式以下:node
<a href="Micro.Live://">WebExe,啓動Exe應用程序</a>
2、PC端註冊表格式以下:shell
經常使用的註冊三種編輯註冊表的方式以下瀏覽器
方式1、註冊表文件格式以下:app
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Micro.Live] "URL Protocol"="C:\\Micro.Live.exe" @="Micro.Live.Protocol" [HKEY_CLASSES_ROOT\Micro.Live\DefaultIcon] @="C:\\Micro.Live.exe,1" [HKEY_CLASSES_ROOT\Micro.Live\shell] [HKEY_CLASSES_ROOT\Micro.Live\shell\open] [HKEY_CLASSES_ROOT\Micro.Live\shell\open\command] @="\"C:\\Micro.Live.exe\"\"%1\""
複製到(txt)記事本,而後另存爲Micro.Live.reg.reg文件,打開運行文件;
ide
方式2、控制檯程序(C#)以下:spa
一、配置文件(ProtocolInfo.xml)放到本地程序目錄(Debug)3d
<?xml version="1.0" encoding="utf-8" ?> <ArrayOfProtocolInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance"> <ProtocolInfo ProtocolName="Micro.Live.Protocol" ProgramName="Micro.Live.exe" NodeName="Micro.Live" /> </ArrayOfProtocolInfo>
二、建立控制檯應用程序
try { List<ProtocolInfo> protocalInfos = ProtocolInfo.GetProtocolInfo(string.Format("{0}\\ProtocolInfo.xml", Environment.CurrentDirectory)); if (protocalInfos == null || protocalInfos.Count == 0) Console.WriteLine("未獲取協議的配置信息!請確保配置文件 ProtocolInfo.xml 在當前目錄下。"); string nodeName = protocalInfos[0].NodeName; string programFullPath = string.Format("{0}\\{1}", Environment.CurrentDirectory, nodeName); RegistryKey key = Registry.ClassesRoot; string a = (string)key.GetValue(nodeName, true); if (!key.Name.Contains(nodeName)) { RegistryKey software = key.CreateSubKey(protocalInfos[0].NodeName); software.SetValue("URL Protocol", programFullPath); software.SetValue("", protocalInfos[0].ProtocolName); RegistryKey softwareDefaultIcon = software.CreateSubKey("DefaultIcon"); softwareDefaultIcon.SetValue("", string.Format("{0},{1}", programFullPath, 1)); RegistryKey softwareShell = software.CreateSubKey("shell"); softwareShell = softwareShell.CreateSubKey("open"); softwareShell = softwareShell.CreateSubKey("command"); softwareShell.SetValue("", string.Format("\"{0}\" \"%{1}\"", programFullPath, 1)); } } catch(Exception ex) { Console.Write(ex.Message); }
三、若是當前用戶沒有管理員權限,寫註冊表會被拒。程序須要添加app.manifest文件orm
方式3、部署添加註冊表(C#)以下:xml
註冊表頁面,各個節點的鍵值爲:
鍵(Key) | 名稱(Name) | 值(Value) |
Micro.Live | Micro.Live.Protocol | |
Micro.Live | URL Protocol | C:\Micro.Live.exe |
Micro.Live/DefaultIcon | C:\Micro.Live.exe,1 | |
Micro.Live/shell | ||
Micro.Live/shell/open | ||
Micro.Live/shell/open/command | "C:\Micro.Live.exe""%1" |
右鍵 => New =>鍵 =>字符串值 => 屬性窗口 => Name/Value
3、WPF 程序處理參數
static class Program { /// <summary> //應用程序的主入口點。 //</summary> [STAThread] static void Main(string[] args) { CustomApplication app = new CustomApplication(); app.Run(); } } class CustomApplication : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); if (e.Args.Length > 0) { MainWindow window = new MainWindow(e.Args); window.Show(); } else { MessageBox.Show("未傳入參數!"); Application.Current.Shutdown(); } } }
源代碼下載地址:點擊打開連接