web調用本地exe應用程序並傳入參數

從網頁中經過自定義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();
            }
        } 
}

 

源代碼下載地址:點擊打開連接

相關文章
相關標籤/搜索