思路:通过注册表注册自定义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协议。

编写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 openExeecho done
)
pause:openExe
rem 实际运行程序的地址在这里配置 %m% 是参数
echo exec: %m%
start "" %m%
rem Setlocal enableDelayedExpansion
rem pause
goto :eof

这里将协议后的第一个字符作为参数,字符 1 表示打开该可执行文件,有需要可以自己在脚本上添加其他功能。

bat编写完成后,放在reg中的指定文件夹下即可。

测试使用

测试URL协议

在浏览器地址输入 <协议名>://1<快捷方式绝对地址> ,1为我定义的打开可执行文件动作的参数,然后回车。

点击打开。

成功打开应用。

在前端中使用

在前端中,我们可以在 <input type="file>"> 打开一个文件后获取文件名,然后加上指定文件夹前缀,组成路径,然后使用 windows.open() 函数在新标签页打开该URL。我这里使用的是vue2+element-UI。

<input:id="scope.row.cName"type="file"hidden@change="fileChange(scope.row.cName)"
><el-buttonicon="el-icon-folder-opened"@click="selectExeFile(scope.row.cName)"/>
</input>
fileChange(id) {const file = document.getElementById(id).files[0]let fileName = file.nameif (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
}

浏览器打开任意可执行exe文件方法相关推荐

  1. 好用的python打包软件_Python打包exe文件方法汇总【4种】

    title: Python打包exe文件方法 copyright: true top: 0 date: 2018-08-11 21:08:21 tags: 打包 categories: Python进 ...

  2. 将jar包转换成可执行.exe文件

    将jar包转换成可执行.exe文件 写在前面的话 将jar转换成exe 写在前面的话 在转换之前需要先到处一个可执行的jar,确保你的程序是正确的.我们需要创建一个文件来存放我们生成的exe文件.在这 ...

  3. 计划任务执行php文件,linux系统下添加计划任务执行php文件方法

    在web开发过程中,经常需要设定一些定期执行的任务,比如商品定时上下架.我们以php文件为例,讲解linux下的计划任务. 方法/步骤 1.打开linux系统命令行界面. 在命令行界面中输入如下命令: ...

  4. python封装方法有几种_Python打包exe文件方法汇总【4种】

    Python 打包 exe 文件方法汇总 Python 作为解释型语言,发布即公开源码, 虽然是提倡开源但是有些时候就是忍不住想打包成 exe ,不仅仅是为了对代码进 行加密,而是为了跨平台.防止有些 ...

  5. chrome浏览器打开网页默认全屏的方法_测试成功

    chrome浏览器打开网页默认全屏的方法 1.在桌面上右键创建快捷方式 2.在地址栏中输入: "C:\Program Files (x86)\Google\Chrome\Applicatio ...

  6. windows 环境下,可执行 exe 文件和 .dll 文件在不同目录下的处理办法

    在 Windows 操作系统中,当可执行 exe 文件需要使用某个.dll 文件时,它会在以下几个地方寻找该文件: 首先,它会在与可执行文件相同的目录中查找该文件. 如果找不到该文件,则会在系统搜索路 ...

  7. Java执行.exe文件

    Java执行.exe文件, 这里以Java调用g++编译程序为例讲解 (我的g++编译器的和程序都在H:/bin/gcc/bin这个目录) 先来看程序: package wen.hui; import ...

  8. windows使用命令执行exe文件

    很多时候我们需要在目标windows的机器上执行exe文件获取meterpreter,这个时候只需要执行一条简单的命令 进入木马的文件夹,执行 start+空格+xxx.exe

  9. bat脚本执行exe文件_将批处理(BAT)脚本转换为可执行(EXE)文件

    bat脚本执行exe文件 When you get down to it, batch files and executable files work pretty much the same way ...

最新文章

  1. Java实现文件拷贝
  2. linq where 数组_C#中LINQ与数据管道
  3. bzoj 1026 windy数
  4. 看完这篇文章之后,终于明白了编译到底怎么回事
  5. apache动态编译/静态编译区别
  6. 技术动态 | 事理图谱,下一代知识图谱
  7. 【Java】HashMap构建登录程序
  8. 即将全部下架!支付宝等平台不许再卖互联网存款产品
  9. 【linux高级程序设计】(第九章)进程间通信-管道 3
  10. Cisco vlan + vtp 配置实例
  11. 菜鸟入门:电脑常用的9个小知识点
  12. python银行排队系统仿真_离散事件仿真简例——银行排队系统
  13. FPGA芯片选型(FPGA初学者的选择)
  14. R语言rank函数详细解析
  15. Android 5.1 Lollipop Phone工作流程浅析(十三)__InCallActivity启动Performance浅析
  16. python性能分析与优化
  17. 织梦 帝国 php,PHPCMS、织梦DEDECMS、帝国CMS的抉择与比较
  18. 2017年原生广告程序化购买将成为新趋势
  19. 一看就会,12种不同场景的拍摄模式!
  20. AES加密与解密(秘钥)

热门文章

  1. 什么是项目风险?如何做好项目风险管理
  2. sql中的left join 查询
  3. java word中插入图片_在Word文档中插入图片
  4. 天津商业大学计算机科学学院,天津商业大学信息工程学院
  5. 用友U9 BOM全阶展开 代码如下
  6. unnormal C++
  7. 信能阳光——打造国内体育照明领域的旗舰品牌
  8. VideoView播放视频的时候尺寸异常
  9. 2018计算机中文期刊影响因子排名,2018年最新影响因子:839种5分以上期刊名录
  10. iOS之深入解析App Thinning的应用瘦身优化