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

需求:electron加载外部脚本文件修改注册表

分析: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张图片
图1

故而利用child_process的spawn方法:(图2)

electron加载.bat文件修改注册表_第2张图片
图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张图片
图3

注意:本文app目录结构为(图4),故在config中配置asarUnpacked: "**/*.bat"参考(图5)

electron加载.bat文件修改注册表_第4张图片
图4


electron加载.bat文件修改注册表_第5张图片
图5

打包后的目录结构为:


electron加载.bat文件修改注册表_第6张图片

你可能感兴趣的:(electron加载.bat文件修改注册表)