electron加载.bat文件修改注册表

需求:electron加载外部脚本文件修改注册表
【electron加载.bat文件修改注册表】分析:1.如何加载外部bat文件
2.如何实现打包
解决历程:
step1: electron官网API:https://electronjs.org/docs,没有找到合适的方法加载bat文件,故而想到node实现:http://nodejs.cn/api/child_process.html#child_process_spawning_bat_and_cmd_files_on_windows
step2: 根据官网API(图1)
electron加载.bat文件修改注册表
文章图片
图1 故而利用child_process的spawn方法:(图2)
electron加载.bat文件修改注册表
文章图片
图2 '/c':command;
'batpath': bat脚本文件(与该代码同级)
‘address’:传入bat的参数
step3: 本文利用electron-builder实现打包流程,electron-builder中利用asar将app文件夹打包至asar虚拟文件夹下面,然而

“asar 包在 Node API 下的应用尽可能的趋向于真实的目录结构,但仍有一些底层 Node API 我们无法保证其正常工作。”
"大部分 fs API 可以无需解压即从 asar 档案中读取文件或者文件的信息,但是在处理一些依赖真实文件路径的底层系统方法时,Electron 会将所需文件解压到临时目录下,然后将临时目录下的真实文件路径传给底层系统方法使其正常工作。";
”Node 中有一些可以执行程序的 API,如 child_process.exec,child_process.spawn 和 child_process.execFile 等, 但只有 execFile 可以执行 asar 包中的程序。因为 exec 和 spawn 允许 command 替代 file 作为输入,而 command 是需要在 shell 下执行的. 目前没有 可靠的方法来判断 command 中是否在操作一个 asar 包中的文件,而且即便可以判断,我们依旧无法保证可以在无任何 副作用的情况下替换 command 中的文件路径。“
瞧见了吧,spawn无法读取到asar下面的子文件,需要将.bat文件在打包时提出,解压到非asar目录下。于是乎,查阅electron-builder API,找到asarUnpack参数:
asarUnpack Array | String - A glob patterns relative to the app directory, which specifies which files to unpack when creating the asar archive.
上代码:(图3)
electron加载.bat文件修改注册表
文章图片
图3 注意:本文app目录结构为(图4),故在config中配置asarUnpacked: "**/*.bat"参考(图5)
electron加载.bat文件修改注册表
文章图片
图4

electron加载.bat文件修改注册表
文章图片
图5 打包后的目录结构为:


electron加载.bat文件修改注册表
文章图片

    推荐阅读