瀏覽器打開任意可執行exe文件方法

来源:https://www.cnblogs.com/robinbin/archive/2022/06/01/16334002.html
-Advertisement-
Play Games

思路:通過註冊表註冊自定義URL協議執行bat腳本,將文件路徑作為參數傳入 環境:win10 前置問題與條件 問題1:可以從瀏覽器直接打開可執行文件嗎? 答:不能。其實可以通過 ActiveXObject 實現軟體直接打開,但是它是不安全的,並且現在被大多數現代瀏覽器禁止,只能在 ie 使用。而通過 ...


思路:通過註冊表註冊自定義URL協議執行bat腳本,將文件路徑作為參數傳入

環境:win10

前置問題與條件

問題1:可以從瀏覽器直接打開可執行文件嗎?

答:不能。其實可以通過 ActiveXObject 實現軟體直接打開,但是它是不安全的,並且現在被大多數現代瀏覽器禁止,只能在 ie 使用。而通過註冊表自定義URL協議,通過將文件名、操作等作為參數加入URL並由瀏覽器訪問,可以觸發協議執行bat腳本執行相應操作。

問題2:如何獲取文件的路徑?可以從瀏覽器上通過 <input type="file"> 直接獲取嗎?

答:問題1我們知道無法在瀏覽器直接可執行exe文件。從外部打開的話,就需要有文件的路徑。但是同樣的,現代瀏覽器禁止從 <input type="file"> 中得到文件的路徑信息,將 file.path 定義為 undefined 或者 C:\fakepath\<文件名>,雖然ie瀏覽器可以,但是需要修改安全設置,也不是很靠譜。無法從瀏覽器直接獲取,就只能指定一個文件夾存放exe的快捷方式了,這個方法需要第一次執行前將需要的可執行文件的快捷方式集中到一個指定文件夾中,雖然有點麻煩,但是總歸是獲取文件路徑的一個辦法。

註冊自定義URL協議

新建 reg 文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\EMTool3]
@="URL:EMTool3 Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\EMTool3\DefaultIcon]
@="EMTool3.exe,1"

[HKEY_CLASSES_ROOT\EMTool3\shell]

[HKEY_CLASSES_ROOT\EMTool3\shell\open]

[HKEY_CLASSES_ROOT\EMTool3\shell\open\command]
@="cmd /c set arg1=%1 & \"C:\\Data1\\ExpManageTool\\handle_file.bat\" %%arg1%%"

EMTool3 為協議名稱,C:\\Data1\\ExpManageTool\\handle_file.bat 為執行的bat腳本的位置。

雙擊reg文件,即可執行註冊該URL協議。

eb2042739fc8136a91b49d1118a150e

編寫bat腳本

@echo off 

Setlocal enableDelayedExpansion
echo url: [%arg1%]
set m=%arg1%
rem 將url編碼改為正常格式
set m=%m:EMTool3://=%
set m=%m:separator=&%
set m=!m:%%5C=/!
rem 取第一個字元
set mode=%m:~0,1%
rem 去除第一個字元得到路徑
set m=%m:~1%

echo mode: [%mode%]
echo path: [%m%]

if "%mode%"=="1" (
	echo open exe [%m%]
	goto openExe
	echo done
)
pause

:openExe
rem 實際運行程式的地址在這裡配置 %m% 是參數
echo exec: %m%
start "" %m%
rem Setlocal enableDelayedExpansion
rem pause
goto :eof

這裡將協議後的第一個字元作為參數,字元 1 表示打開該可執行文件,有需要可以自己在腳本上添加其他功能。

bat編寫完成後,放在reg中的指定文件夾下即可。

測試使用

測試URL協議

在瀏覽器地址輸入 <協議名>://1<快捷方式絕對地址> ,1為我定義的打開可執行文件動作的參數,然後回車。

d70a247ecd5fc9c7b3b255866124a76

點擊打開。

615af712e8d2b01db2cefff4d92efba

成功打開應用。

9ff8e5ba52fdc890d8fdfdd8611e75c

在前端中使用

在前端中,我們可以在 <input type="file>"> 打開一個文件後獲取文件名,然後加上指定文件夾首碼,組成路徑,然後使用 windows.open() 函數在新標簽頁打開該URL。我這裡使用的是vue2+element-UI。

<input
    :id="scope.row.cName"
    type="file"
    hidden
    @change="fileChange(scope.row.cName)"
>
    <el-button
    icon="el-icon-folder-opened"
    @click="selectExeFile(scope.row.cName)"
    />
</input>
fileChange(id) {
    const file = document.getElementById(id).files[0]
    let fileName = file.name
    if (fileName.endsWith('.exe')) {
    	fileName = fileName.substring(0, fileName.indexOf('.exe'))
    }
    this.exeUrl = 'EMTool3://1C:\\Data1\\ExpManageTool\\exeList\\' + fileName + '.lnk' // URL構造
    console.log(this.exeUrl)
    window.open(this.exeUrl, '_blank') // 新標簽頁打開URL
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • which whereis locate which 查看可執行文件的位置。 whereis 查看文件的位置。 locate 配合資料庫查看文件位置。 which 查找環境變數中的文件 which 命令用於查找並顯示給定命令的絕對路徑,環境變數 PATH 中保存了查找命令時需要遍歷的目錄。which ...
  • 4月14日,騰訊雲資料庫備份服務DBS(Database Backup Service)正式發佈,旨在助力企業實現一站式備份混合雲資料庫。 DBS是一款高可用、低成本的數據備份產品,支持實時增量備份以及快速數據恢復,為多種部署形態的資料庫提供強有力的保護,可以應用於異地容災備份、跨雲廠商備份、IDC ...
  • 國際知名調研機構沙利文聯合頭豹研究院發佈了《2021年中國分散式資料庫市場報告》,報告顯示:**騰訊雲資料庫入選Frost Radar (弗若斯特雷達)領導者象限,增長指數排名第一。**為幫助廣大資料庫愛好者進一步瞭解報告內容,洞察資料庫發展趨勢,騰訊雲資料庫邀請沙利文中國高級分析師胡竣傑解讀最新報 ...
  • 相關示例代碼 WITH sqlt AS (SELECT a.PlaceCode, b.AcupointName FROM ITEM_Place_Correlation a LEFT JOIN ITEM_Acupoint b ON a.AcupointCode = b.AcupointCode AND ...
  • 事務隔離級別 事務併發可能出現的問題 臟寫 事務之間對增刪改互相影響 臟讀 事務之間讀取其他未提交事務的數據 不可重覆讀 一個事務在多次執行一個select讀到的數據前後不相同。因為被別的未提交事務修改,刪除數據或數據被更新被當前事務讀取到了。 幻讀 一個事務在第一次讀取正常數據,第二次讀取到其他未 ...
  • undo日誌 前面學習了redo日誌,redo日誌保證的是崩潰時事務持久性。我們可以從redo日誌恢復到系統崩潰以前。 undo日誌就是為了保證事務回滾時事務所作所為都能回到事務執行前。保證了事務的原子性。redo把我們做增刪改之前的狀態記錄下來,幫助MySQL回滾到事務執行之前的樣子。 這篇文章了 ...
  • 隨著短視頻時代的到來,音視頻剪輯應用不斷增加,市場競爭愈發激烈,如何為用戶提供差異化剪輯功能和優質的音頻處理體驗,已成為行業新的挑戰。 “音頻音樂剪輯“是武漢網冪科技開發的一款手機音頻剪輯應用,支持音樂剪輯、音頻提取、伴奏人聲提取、格式轉換、手機鈴聲製作、拼接、變速、混音、錄音、降噪等功能。為了給用 ...
  • 該項目是學習Nest.js框架所得,前端基於Vue.js + Vuex + VueRouter + ElementUI + SCSS,後端基於Node.js + TypeScript + Nest.js + MySQL + TypeORM。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...