美文网首页electron
electron加载.bat文件修改注册表

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

作者: web_柚子小记 | 来源:发表于2018-08-02 09:58 被阅读0次

    需求: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)

    图1

    故而利用child_process的spawn方法:(图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)

    图3

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

    图4 图5

    打包后的目录结构为:

    相关文章

      网友评论

        本文标题:electron加载.bat文件修改注册表

        本文链接:https://www.haomeiwen.com/subject/dgzvhxtx.html