webman-electron 使用webman开发windows桌面程序

Ace华

开源地址:

https://gitee.com/vip_huage/webman-admin-electron (保持同步)
https://github.com/Mr-ShiHuaYu/webman-admin-electron (主仓库)

基本情况

使用electron框架,封装了webman,使得webman直接变成客户端,运行后,自动启动webman服务,退出软件后,自动关闭所有webman进程及子进程。

编译好的下载地址,windows 可直接下载使用

蓝奏云:
webman-admin-electron-win-0.0.1-x64.7z:
https://wwck.lanzoub.com/ijpmV2tsl94j

webman-admin-electron-win-0.0.1-x64.exe:
https://wwck.lanzoub.com/iQ6pO2tsmjde

gitee

https://gitee.com/vip_huage/webman-admin-electron/releases/tag/0.0.1

github

https://github.com/Mr-ShiHuaYu/webman-admin-electron/releases/tag/0.0.1

使用说明

一定不能放在含有有中文的目录
一定不能放在含有空格的目录
例如,以下目录均不行
C:\Program Files //不行,有空格
D:\软件\webman-admin-electron // 不行,含有中文目录

双击 electron-webman.exe运行
用户名:admin
密码:admin

此项目为electron和webman的结合,将webman项目和php放在resources\extraResources下,会自动启动服务,软件关闭后,会自动关闭所有webman进程及子进程。
仓库源地址是electron-egg,我将其改为可根据setting.json动态配置,以及适配webman
源仓库地址:
https://gitee.com/dromara/electron-egg
源仓库官方文档:
https://www.kaka996.com/

部分原软件的设置没有迁移过来,个人觉得够用了,后续再添加

如果软件打开后,无法正常显示,大概是因为setting.json中的webman的port配置错误,请核对是否与webman项目下的config.php中的listen的端口一致

demo项目已改为兼容sqlite后,不支持原项目的所有表功能,webman官网只支持mysql,已注释下面 table.render 代码

建议在mysql上开发好后,使用navicat的数据库迁移工具,将mysql数据库转为sqlite数据库,然后,关闭代码生成等功能

为了兼容sqlite,需要替换源webman-admin框架的2个文件,一个是
plugin/admin/app/common/Util.php
plugin/admin/app/controller/Crud.php

可以自行对比修改了什么内容

若出现环境变量问题的解决方法

如果在新电脑上运行,可能需要将resource\php8的目录添加到环境变量中,测试中发现,绝对路径\php.exe 绝对路径\windows.php 会提示 php is not recognized as an internal command,但如果将windows.php换成start.php就没事。可能是因为没有注释掉那个监控进程导致的。
如果在新客户端上部署,出现上面这个问题的话,2个建议,一是将monitor进程注释,二是将resource\php8的目录添加到环境变量中。可以使用下面语句,制作成.bat文件,用户双击即可添加环境变量。

setx path /m "%path%;%~dp0resources\php8.0;"

实际测试,如果不想加环境变量,则必须关闭monitor进程,不是因为monitor进程导致环境变量的问题,而是php.exe 后面在没有环境变量的环境下,就不能跟2个php文件,所以,在交付给客户的时候,建议关闭monitor进程

11063 39 43
39个评论

hatn

cool 这就很棒棒了

  • Ace华 2023-12-18

    嘻嘻,谢谢,我已经用这个做了好几个客户端了,开发速度杠杠的

walkor

TM

点赞

  • 暂无评论
初心by

666

  • 暂无评论
xia

支持支持,感觉还是前后端分离打包安全点,这样数据库配置也在客户端

  • Ace华 2023-12-20

    用的是sqlite,客户端的数据,你用其他软件做的放在,也是在客户端呀

Mr_Deng

改了代码,要怎样重新生成exe呢?

  • Ace华 2023-12-20

    exe就不需要重新生成呀,你的php代码是放在resourece\webman\下的

administrator

给楼主点赞
以后做桌面的话,可以尝试一下
感谢分享

  • 暂无评论
Mr_Deng

截图
这。。。

  • Ace华 2023-12-21

    这是你自己业务的错误哦

  • Ace华 2023-12-21

    我这边测试mkdir没问题

  • Ace华 2023-12-21

    递归创建目录的话,你第三个参数要写true,不能省略的

  • Mr_Deng 2023-12-21

    呃,我下载下来就双击的,没有业务呢,难道跟我环境有关系

  • Ace华 2023-12-21

    你本地测试可以?或者启动后,浏览器运行webman的地址测试

  • Mr_Deng 2023-12-21

    呃,运行测试地址后就可以了

  • Ace华 2023-12-21

    可以发代码出来看看?

  • Ace华 2023-12-21

    mkdir的话,如果是多级目录,如果第3个参数没有写,必须保证前面的目录存在,如果是要连续创建的话,第3个参数必须是true

  • Jonlinc 2024-01-03

    我本地跑了也是这个错误,发现原因是没有D盘,所以创建不了目录,改了php.ini中的路径就可以了

  • Ace华 2024-01-04

    哦哦,谢谢提醒,这个是跟我自带的php设置有关,我用的是phpenv,在php.ini中写死了应该

  • ye 2024-01-11

    是这个原因 建议改成当前路径再发下

软饭工程师

mac 可以支持吗

  • Ace华 2023-12-21

    暂时还没支持,技术上支持很简单,就是没有mac可以测试

  • 软饭工程师 2023-12-21

    我有mac,可以出个文档吗

  • 软饭工程师 2023-12-21

    打包前的源码可以开源吗,我的mac上electron 安装好了

  • Ace华 2023-12-21

    晚上回去私发你,留个邮箱

  • Ace华 2023-12-21

    晚上我源码上传云吧

  • Ace华 2023-12-21

    你可以先下载electron-egg,研究一下里面的javaServer那个插件,里面有关于mac的参考代码,稍微改一改就行

  • TM 2023-12-21

    electron-egg 我之前也看过这个 看起来挺好用的,内置挺多东西

  • 软饭工程师 2023-12-21

    好的,谢谢

  • Ace华 2023-12-21

    源码已发邮箱

  • 软饭工程师 2023-12-21

    谢谢

  • Ace华 2023-12-21

    期待你的mac版本。建议可以修改我加的一个webman的插件,里面有todo的内容,修改修改应该就能用了

  • Ace华 9天前

    开源了

奇衡三

感谢大佬的分享

  • 暂无评论
软饭工程师

你好,请问这个地方怎么修改

    /**
     * 创建服务
     */
    async create(cfg) {
        this.options = cfg;
        if (this.options.enable === false) {
            return;
        }
        const hostname = this.options.hostname;

        if (['localhost', '127.0.0.1'].indexOf(hostname) === -1) {
            // 不是localhost就退出,不启动服务
            return;
        }

        try {
            const phpPath = this.options.phpPath;
            const projectPath = this.options.projectPath;
            const stdioIgnore = this.options.stdioIgnore;

            let phpBinaryPath = path.join(UtilsPs.getExtraResourcesDir(), phpPath, "php");
            const windowsPhpPath = path.join(UtilsPs.getExtraResourcesDir(), projectPath, "start.php");
            Log.info("[addon:webmanServer] phpBinaryPath file path:", phpBinaryPath);
            Log.info("[addon:webmanServer] windowsPhpPath file path:", windowsPhpPath);

            if (!fs.existsSync(phpBinaryPath)) throw new Error('php does not exist');
            if (!fs.existsSync(windowsPhpPath)) throw new Error('start.php does not exist');
            // const processOption = stdioIgnore === true ? {stdio: 'ignore'} : {"start"};
            const processOption = "start -d";
            Log.info("[addon:webmanServer] processOption :", processOption);

            if (is.windows()) {
                this.phpProcess = spawn(phpBinaryPath, [windowsPhpPath], processOption);
                if (!stdioIgnore) {
                    this.phpProcess.stdout.on('data', (data) => {
                        Log.info(`[addon:webmanServer] ${data}`);
                    });
                }
            } else if (is.macOS()) {
                // todo macos
                this.phpProcess = spawn(phpBinaryPath, [windowsPhpPath], processOption);
                if (!stdioIgnore) {
                    this.phpProcess.stdout.on('data', (data) => {
                        Log.info(`[addon:webmanServer] ${data}`);
                    });
                }
            } else {
                // todo linux
            }

            // Log.info("[addon:webmanServer] cmdStr:", cmdStr);
            // exec(cmdStr);

        } catch (err) {
            Log.error('[addon:webmanServer] throw error:', err);
        }
    }

windows 用户执行 php windows.php 启动就可以了
mac 用户启动webman 需要执行

php start.php start

我这个代码执行npm run dev 出现报错

~/electron/electron-egg-webman ❯ 2023-12-22 10:04:33,152 INFO 32361 [addon:security] load
2023-12-22 10:04:33,153 INFO 32361 [addon:awaken] load
2023-12-22 10:04:33,161 INFO 32361 [addon:webmanServer] phpBinaryPath file path: /Users/110/electron/electron-egg-webman/build/extraResources/php8.0/php
2023-12-22 10:04:33,161 INFO 32361 [addon:webmanServer] windowsPhpPath file path: /Users/110/electron/electron-egg-webman/build/extraResources/webman/start.php
2023-12-22 10:04:33,161 INFO 32361 [addon:webmanServer] processOption : start -d
2023-12-22 10:04:33,164 ERROR 32361 [addon:webmanServer] throw error: TypeError [ERR_INVALID_ARG_TYPE]: The "options" argument must be of type object. Received type string ('start -d')
    at normalizeSpawnArguments (node:child_process:533:5)
    at spawn (node:child_process:702:13)
    at WebmanServer.create (/Users/110/electron/electron-egg-webman/electron/addon/webman/server.js:57:35)
    at WebmanServerAddon.create (/Users/110/electron/electron-egg-webman/electron/addon/webman/index.js:30:29)
    at /Users/110/electron/electron-egg-webman/electron/preload/index.js:19:29
    at AppLoader.loadFile (/Users/110/electron/electron-egg-webman/node_modules/ee-core/core/lib/loader/ee_loader.js:259:13)
    at Index._loderPreload (/Users/110/electron/electron-egg-webman/node_modules/ee-core/ee/eeApp.js:363:33)
    at Index.createWindow (/Users/110/electron/electron-egg-webman/node_modules/ee-core/ee/eeApp.js:97:16) {
  code: 'ERR_INVALID_ARG_TYPE'
}
(node:32361) electron: Failed to load URL: http://localhost:8789/ with error: ERR_CONNECTION_REFUSED
(Use `Electron --trace-warnings ...` to show where the warning was created)

另外,我node 的版本是v20.5.1,会有问题吗
electron-egg 的示例demo 可以跑起来
win 代码直接在mac 上运行会有空格或者回车字符串的问题,需要把no_moudle 删除重新安装依赖

  • 暂无评论
软饭工程师

截图起来了,但是好像验证码挂了

  • Ace华 2023-12-22

    只要起来了,验证码应该问题不大的,刷新一下,或者,打开的时候,把那个devtools打开,关闭缓存调试

longxiaowang

win7刚打开exe文件白屏,第二次打开还是白屏,第四次再打开正常。

  • 暂无评论
Taotao

作者就很棒

  • 暂无评论
Taotao

为啥我的win11一直报错,截图

  • Taotao 2023-12-31

    我知道是为什么了,因为我之前开了webman的8787,端口占用了,那个wenman项目关了就好了

  • Ace华 2023-12-31

    可以改端口的,server.php中

3030879494@qq.com

刚才切换到了demo分支,报了好几个npm包的错误,已经在github上提出issus了.

wzj177

厉害呀,大佬能分享你源码吗

ye

大佬 源码 git地址也分享下啊
是做了个嵌套 然后通过setting.json 修改配置及嵌套地址么?

  • wzj177 2024-01-11

    大致看了egg的文档,应该可以参照egg-go 集成go的方式,集成webman.可以试一下,虽然我目前没计划去测试

  • Ace华 2024-01-13

    可以,晚上分享

  • Ace华 2024-01-14

    源码已发

  • ye 2024-01-15

    感谢大佬 学习下

  • Ace华 9天前

    开源了

zjkal✅

先支持一个

  • 暂无评论
Tinywan

加油,顶起!

  • 暂无评论
foggy

请问这个只支持sqlite 不支持MySQL吗?

  • Ace华 9天前

    客户端,肯定优先用sqlite,好分发软件

hsnic

https://wwp.lanzoup.com/iNK9R1l1xuqd 用这个源码接哪里操作?
需要先安装

进入目录 ./electron-egg/

npm install
再执行
npm run build-wz
打包?
还是直接 npm run build-wz打包?

artisan
NB👍,弥补php的GUI开发这块的短板
  • 暂无评论
z

可以把打包的phar放进去吗

  • 暂无评论
vincentzzj

请问如何修改图标?

  • 暂无评论
bobluan

我将数据源放到了本地数据库,但是接口全部报红,

happy

这个是只能本地用的,可以连接远程数据库吗

timber

这个能支持到windows教老的版本吗?例如win7 winXP sp2 sp3

  • Ace华 2024-10-07

    不可以,这个取决于webman最低支持php7.4,而xp不支持php7.4

  • timber 2024-11-01

    了解,非常感谢

tanhongbin

大佬,啥时候能简单点安装 就好了 你这文档看了 都模糊啊

牛X, 可以做软件UI用了

  • 暂无评论
leiliang

wa_uploads storage 字段可以为空,不然上传素材报错
截图

  • Ace华 9天前

    数据库storage字段设置了默认值为local了,也开源了,更新了

yangpeng

启动不了,直接白屏

有安全方案吗? 这直接源码都给客户了

  • bybt 2025-03-01

    得自己用electron跑个webman,就是相当于把electron那个窗口指向webman那个地址

  • Ace华 9天前

    目录还没有做源码加密

sanlang

webman.phar 这种打包的可以运行吗? 该怎么使用呢 大佬们

  • tingyu 2025-03-19

    应该可以,但是要改源码,应该是这里 electron\addon\webman\server.js

  • tingyu 2025-03-20

    我已经实现了,可以正常运行。连接如下:
    https://wwmr.lanzoul.com/b0xw8xzpc 密码:bzfm

  • jabin 2025-03-25

    楼上源码下载后,test我本地(win11)运行,登录时会报错,提示数据库找不到

  • tingyu 2025-03-25

    看“使用说明2”,数据库连接字符串自己改 resources\extraResources\webman\plugin\admin\config\database.php 里面配置,我演示是写死的。

  • jabin 2025-03-25

    感谢解答,按你的路径放到桌面可以正常运行了,这样解决了php源文件暴露的问题,但是sqlite文件的放置却又成了新的问题,后面有想到好的方案吗?

  • tingyu 2025-03-25

    额,数据库连接字符串改成 'database' => str_replace('phar://', '', run_path()) . '/webman_demo.db', 就行了,已测试。

jabin

webman不是支持sqlite吗?为啥要改原文件?

  • tingyu 2025-03-22

    我说要改webman-electron-egg源码实现支持webman.phar文件运行。
    还有webman咋会不支持sqlite呢? 看文档: https://www.workerman.net/doc/webman/db/config.html

  • jabin 2025-03-23

    为了兼容sqlite,需要替换源webman-admin框架的2个文件,一个是
    plugin/admin/app/common/Util.php
    plugin/admin/app/controller/Crud.php
    我是指这个,是webman-admin不支持sqlite?

  • tingyu 2025-03-23

    哦,不是和我说啊,尴尬。 webman-admin原先确实是用的mysql,现在作者为了做成桌面应用转为sqlite确实要改。

artisan

建议整个github仓库,成熟后贡献给electron-egg,推动一下php桌面开发

jabin

效果很好,如果每个平台(mac,linux)都搞个demo,就省得自己编译客户端了

  • jabin 2025-03-25

    唯一缺点就是php源码暴露了

  • 会飞的鱼 11天前

    这个没办法的 脚本语言 你只能做加密处理

liziyu

牛掰

  • 暂无评论
释永战

大佬厉害,先学习学习

  • 暂无评论

Ace华

760
积分
0
获赞数
0
粉丝数
2023-02-14 加入
×
🔝