在網頁如何呼叫客戶端的可執行檔案
在網頁如何呼叫客戶端的可執行檔案
最近,群裡在討論如何從網頁中開啟一個exe檔案。在群裡面說了下思路,但總說不清楚,答應寫一篇文章出來。這幾天事情挺多,一直沒時間寫,讓阿超同學久等了。
基於瀏覽器的應用,表現力始終不夠豐富,我們常常會想,在一個網頁中,點一下某個連結,能夠直接呼叫安裝好的可執行程式有多好啊。按照微軟的推薦,應該是通過ActiveX,把可執行程式嵌入到網頁中,例如flash的ActiveX。這樣,我們就要購買ActiveX的簽名,不通過簽名的東西,在IE6中是無法載入的,為一個小專案購買ActiveX的簽名,代價太昂貴了。另外,很多時候還要考慮如果使用者突然關閉了瀏覽器該怎麼辦。這對播放個flash、歌曲之類的沒多大影響,但是很多時候,不能在關閉前清掃戰場,帶來的後果是災難性的。通常,在企業應用中,我們總是通過IE直接呼叫exe。
最早的時候,從網頁呼叫一個EXE是很簡單的事情,一段javascript就可以了。但是,自從IE6開始,微軟就不再允許這種“極不安全的行為”。這也是有道理的。沒事就給你來個“format d:/q”,即使不這麼惡劣,動不動就給你彈幾百個notebook,也確實夠恐怖的。瀏覽器不應該與作業系統有太多不必要的關聯。
拿javascript在IE6測試之後,我幾乎放棄了直接呼叫exe的想法,直到有一天,看到了騰訊的實現方法。
騰訊有一個在網頁上面顯示QQ狀態的東西,點一下就能彈出一個對話方塊跟該QQ使用者聊天,而不會有任何警告。好神奇啊。登錄檔裡面研究了一天,終於明白了怎麼回事。
在windows中,登錄檔中包含各種協議(http,ftp,telnet等)的資訊,包含了預設開啟方式的引數。試一下,從IE的位址列中輸入telnet://www.163.com,出現什麼了?彈出了一個命令列視窗,開始進行telnet操作。IE居然能完成這個,那麼為什麼就不能完成“telnet1://引數” 呢?
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS]
@=”SIMS”
“URL Protocol”=”C://PROGRA~1//SIMS//trans.exe %l”
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/DefaultIcon]
@=”%SystemRoot%//system32//url.dll,0″
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell]
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open]
[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open/command]
@=”C://PROGRA~1//SIMS//trans.exe %l”
把這個東西匯入登錄檔,那麼我們在瀏覽器中輸入sims://1022,那麼就會自動呼叫c:/program files/sims/trans.exe(當然了,你得確實有這個檔案),並把1022這個引數傳給該exe。這個操作被認為是安全的,不會有任何的限制。
到這裡,思路就清晰了,我們的安裝程式中,在登錄檔中建個協議,例如上面的SIMS,再把要執行的exe的路徑資訊寫入,在網頁直接一個超連結,協議://引數就可以了。exe檔案接受這個引數,進行相應的處理。搞定。
記住,協議://後面的所有字串被看做是一個引數。那麼,exe檔案永遠只有兩個引數,引數0是它的完整執行路徑,引數1就是網頁傳過來的字串
相關文章
- 利用執行緒池給客戶端傳檔案執行緒客戶端
- 網頁搜尋客戶端網頁客戶端
- 網頁SSH客戶端的實現網頁客戶端
- 跟蹤客戶端執行的SQL客戶端SQL
- 在指令碼中呼叫cassandra客戶端命令指令碼客戶端
- Qt實現基於多執行緒的檔案傳輸(服務端,客戶端)QT執行緒服務端客戶端
- 在客戶端儲存對EJB的遠端呼叫是否可行?客戶端
- C++程式怎樣呼叫exe可執行檔案C++
- spring mina整合(客戶端進行呼叫)Spring客戶端
- 怎樣在websphere環境外的客戶端呼叫webshphere的ejb?Web客戶端
- 使用java呼叫fastDFS客戶端進行靜態資原始檔上傳JavaAST客戶端
- 通過NETWORK_LINK在客戶端執行EXPDP客戶端
- 透過NETWORK_LINK在客戶端執行EXPDP客戶端
- JSP網頁中如何執行本地檔案*.bat/*.regJS網頁BAT
- VNC客戶端是Windows,VNC客戶端是Windows如何進行操作VNC客戶端Windows
- 客戶端配置檔案tnsname.ora客戶端
- 以 Laravel 的方式呼叫 ai 客戶端LaravelAI客戶端
- xfire 客戶端呼叫webservice的問題客戶端Web
- 請問網頁可以打包成exe可執行檔案嗎?謝謝網頁
- 如何在 Windows 作業系統中執行 Docker 客戶端Windows作業系統Docker客戶端
- webService 客戶端呼叫 axis2Web客戶端
- .net客戶端呼叫activeMQ程式碼客戶端MQ
- Python如何生成windows可執行的exe檔案PythonWindows
- 利用程序池給客戶端傳檔案客戶端
- 在微信電腦客戶端將表情包另存為GIF檔案客戶端
- 在客戶端呼叫程式碼中,最好出現DCI中的Data ?客戶端
- Java SSH 客戶端 如何刪除 linux 機器上的 檔案Java客戶端Linux
- 如何利用客戶端在itpub發部落格客戶端
- Tivoli AIX客戶端配置檔案的設定AI客戶端
- 如何用pkg打包nodejs可執行檔案NodeJS
- session過期,如何主動的更新客戶端的頁面Session客戶端
- CouchBase C 客戶端介面呼叫例項客戶端
- 如果呼叫遠端遠端url介面為https,且存在客戶端證書驗證,如何在客戶端處理HTTP客戶端
- Winform 呼叫WCF客戶端,所有服務端方法在執行的時候均找不到(編譯沒有問題)ORM客戶端服務端編譯
- Linux可執行的檔案(轉)Linux
- 如何進行 iPhone 客戶端的軟體測試iPhone客戶端
- 客戶端svn上傳後,原始檔案在伺服器的什麼位置?客戶端伺服器
- 客戶端內嵌Vue頁面客戶端Vue