electron+vue项目打包时修改注册表功能
-
原因
在使用electron做项目时,由于产品需要做一个放大镜功能。在查找了网上大部分类似需求后,发现大部分的放大镜都是对图片的放大,真正实现放大镜功能的功能并不多。(其实我自己也没想明白为什么去做放大镜,感觉实际中也并用不到。可能这就是和产品经理的矛盾?)但还是要做的,于是和产品经理沟通后,决定调用Windows系统自带的放大镜。(我们的产品也主要是在Windows系统的黑板上使用。)因此,这就涉及到了一系列问题,且看下面讲解。 -
electron调用本地自带的.exe文件
最开始的想法是使用win + ‘+’ 的快捷键打开放大镜。但没找到如何去用代码模拟调用键盘按键(是我太菜了)在此之后,又花费了一定时间后,使用修改注册表的方法来写一种类似协议的方法吧(在我看来是类似协议一样),来调用本地文件。
首先是代码中的调用:<a href="Webshell:1123">放大镜</a>
接着就是修改注册表,注册表文件:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Webshell] @="URL:Webshell Protocol Handler" "URL Protocol"="" [HKEY_CLASSES_ROOT\Webshell\DefaultIcon] @="C:\\WINDOWS\\system32\\Magnify.exe" [HKEY_CLASSES_ROOT\Webshell\shell] [HKEY_CLASSES_ROOT\Webshell\shell\open] [HKEY_CLASSES_ROOT\Webshell\shell\open\command] @="\"C:\\WINDOWS\\system32\\Magnify.exe\" \"%1\""
具体写法是,新建一个.txt文本文件,复制保存之后修改文件后缀为.reg(注册表脚本文件)
然后执行之后就可以正常调用本地的放大镜了。(默认大家都不会去改变放大镜的地址吧,可能也没人用到过吧) -
在这之后,勉强是能用了。但是总不能在每一台电脑上都去执行注册表脚本文件吧,这也太low了。吾辈人当然不可能这样放在这里(其实是在产品经理要求下),要去对齐进行优化。开始想法是写个脚本,在打包时去运行注册表脚本文件,简简单单。好的,小丑竟是我自己,问题又来了,脚本文件不会写啊(菜是本质啊)。然后就先放着去做其他项目了。不久之后,哈哈哈哈,意外之喜,发现electron打包时,竟然可以修改注册表文件。踏破铁鞋无觅处,得来全不费工夫。
上网查找,嗯,发现只要在electron-builder配置nsis中加入include,并写一个.nsh文件就行了。如图:
-
在以为问题即将解决时,发现,嗯?.nsh文件完全不会写啊,网上说的看起来又太累。在耗费九牛二虎之力之后,也不费努力,还是写出来了。过程不再赘述,直接上代码
Section -Post
WriteRegStr HKCR “Webshell” “” “URL:Webshell Protocol Handler”
WriteRegStr HKCR “Webshell” “URL Protocol” “”
WriteRegStr HKCR “Webshell\DefaultIcon” “” “C:\WINDOWS\system32\Magnify.exe”
WriteRegStr HKCR “Webshell\shell” “” “”
WriteRegStr HKCR “Webshell\shell\open” “” “”
WriteRegStr HKCR “Webshell\shell\open\command” “” ‘“C:\WINDOWS\system32\Magnify.exe” -open “%1”’
SectionEnd、
参考博客NSIS 打包脚本基础 -
本来兴致勃勃认为做好的时候,发现打包好的产品在试用后,发现没有修改注册表。在对自己的相信后,觉得可能是权限的问题。因为,运行注册表脚本文件时,还会有权限询问,而按照产品,却没有询问。于是,以管理员身份按照,果然成功。
但这样,貌似也不太合适。查找是否可以修改.nsh文件让所有用户,不止管理员也可以成功安装并修改注册表。发现HKCR必须是管理员权限,无需权限的HKCU和HKEY_LOCAL_MACHINE都无法打开软件。额,只能暂时搁置,寻找更好解决办法中…