1. 程式人生 > >從網頁上開啟本地應用程式——Windows下 URI Scheme的使用

從網頁上開啟本地應用程式——Windows下 URI Scheme的使用

一、問題描述:

最近做的專案要求從網頁端啟動本地的應用程式(windows系統下),同時會給應用程式傳遞某些引數,所以接觸到了URL Protocol這個東西。

二、所處條件:

1、本地的應用程式是unity3D開發的軟體。

2、目標平臺是windows PC端。

3、使用AdvancedInstaller製作軟體安裝包。

二、主要問題的解決過程:

1、編寫登錄檔處理檔案,即*.reg檔案,所有程式碼如下:

Windows Registry Editor Version 5.00  
  
[HKEY_CLASSES_ROOT\Simu]  
"URL Protocol"="X:\\xx.exe"  
@="SimuProtocol"  
  
[HKEY_CLASSES_ROOT\Simu\DefaultIcon]  
@="X:\\xx.exe,1"  
  
[HKEY_CLASSES_ROOT\Simu\shell]  
  
[HKEY_CLASSES_ROOT\Simu\shell\open]  
  
[HKEY_CLASSES_ROOT\Simu\shell\open\command]  
@="\"x:\\xx.exe\" \"%1\""  

注意上面每一行原則上缺一不可,但實際上有些是可以省略的。不過最好都寫上,否則有可能會出問題。

2、在AdvancedInstaller中匯入此reg檔案,並將上面的路徑有關的字串改成advancedInstaller中的“變數”

3、build安裝包進行安裝。

4、在目標機器上安裝該軟體。

5、測試URL Protocol是否成功寫入登錄檔:在txt中寫入"<a href="Simu://canshu">點選開啟目標程式</a>"並儲存成html檔案,用瀏覽器開啟此網頁,點選連結,若出現提示請求開啟本地程式,則代表成功。

6、寫接受引數的程式碼。C#中從System.Environment.commandLine這個字串中來獲取傳過來的引數。這個字串的格式是"X:\...\XX.exe Simu://canshu",用正則表示式擷取即可。如果使用控制檯程式接受引數,可以從main函式的引數argus[0]裡獲取上面的字串。

三、遇到的其他問題及處理辦法:

1、參考資料1中也有提及,引數如果是中文,某些瀏覽器會對其進行URL編碼,而某些則不會,所以最好統一先將引數進行一些編碼,且最好不是URL編碼,因為在獲取引數的時候可能又會把URL編碼出來的字串再次轉換成其他編碼,會亂碼。

2、主要是AdvancedInstaller的使用問題,比如把程式安裝進入C盤時會出現許可權問題等,有時間再總結一下。

四、主要參考資料:

五、其他說明

1、iPhone SDK中似乎也有對這種URI Scheme的支援,詳見

2、在Chrome、edge、360瀏覽器上測試有效