V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CForce
V2EX  ›  Windows

桌面应用开发求大佬推荐技术方案

  •  
  •   CForce · 298 天前 · 6713 次点击
    这是一个创建于 298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在是想做个给团队内和外部合作方用的小工具应用,GUI 界面非常简单,有这么几个需求: 1 、支持 Windows 和 Mac ; 2 、工程里要用命令行调用一个外部的可执行文件,在 Windows 上就是 exe 和几个 dll ,Mac 上就是一个 Linux 可执行文件,想把这几个外部可执行文件都最终打包到一个最终产物里并且可被直接调用; 3 、免安装,比如在 Windows 上直接能生成最终的一个 exe 文件直接打开;

    有现有的技术方案可以满足上面的需求吗?求各位大佬推荐技术方案。

    第 1 条附言  ·  297 天前
    现在主要被难倒在 2 和 3 ,如果最终生成的是一个安装包,其实也还好,外部的 exe 和 dll 直接解压出来就完事了,然后在代码里通过命令行找到对应的路径来调用。

    如果是一个独立运行的 exe ,就不太清楚怎么搞,怎么生成这个无需安装的 exe 以及 怎么在代码中调用到这个外部的 exe 呢?

    语言其实还好,糊点简单界面,写点逻辑都差不多,就是这些打包啊、配置啥的搞得头大。
    84 条回复    2023-11-06 10:03:15 +08:00
    missdeer
        1
    missdeer  
       298 天前
    能生成 exe 的语言/框架都可以吧
    DTCPSS
        2
    DTCPSS  
       298 天前
    Tauri
    Avalonia
    lasuar
        3
    lasuar  
       298 天前
    用你熟悉的语言就行
    LeegoYih
        4
    LeegoYih  
       298 天前
    weixiangzhe
        5
    weixiangzhe  
       298 天前
    这个需求 写个文档不就好了,为啥要 gui
    aqtata
        6
    aqtata  
       298 天前
    Enigma Virtual Box
    VMware ThinApp
    liuhan907
        7
    liuhan907  
       298 天前   ❤️ 1
    我觉得吧,就 Electron 一把梭吧。
    fay94
        8
    fay94  
       298 天前
    Electron
    imkerberos
        9
    imkerberos  
       298 天前
    fltk-rs
    nerkeler
        10
    nerkeler  
       298 天前
    不需要颜值,直接 python 自带 tkinter.ttk
    kwanzaa
        11
    kwanzaa  
       298 天前
    golang - fyne
    JG
        12
    JG  
       298 天前
    qt 可以满足
    gydi
        13
    gydi  
       298 天前
    稳一点吧 electron
    sipt
        14
    sipt  
       298 天前
    第一反应 electron ,但感觉这东西,我作为写的人爽,作为用的人挺烦,一个小功能的 app ,装完 100MB 起。。。
    Mithril
        15
    Mithril  
       298 天前   ❤️ 1
    GUI 非常简单可以用 Avalonia ,打包也可以勉强打成单文件,但因为里面是带 native 组件的,所以实际上运行时会解压。
    多平台也能支持,没问题。.NET 6 带依赖框架打出来差不多 50~60MB 。比 Electron 强点有限。好处就是没有 Chrome 那些问题,不会一启动带起来几十个进程,也不会卡界面。

    但你如果交互比较复杂,页面比较多,那还是 Electron 吧。虽说大家都在诟病,但 Web 做交互还是要比你拿个不太熟悉的框架一边学一边做强太多了。
    ShadowPower
        16
    ShadowPower  
       298 天前
    python + pysimplegui + pyinstaller
    yl20181003
        17
    yl20181003  
       298 天前
    Electron 就行
    x77
        18
    x77  
       298 天前
    Flutter ,原生桌面应用,编译就可以运行,不用安装,带上运行库和字体等数据只有 30M 。不过 Flutter 桌面官方现在不支持多窗口,适合 UI 简洁的应用
    ggvoking
        19
    ggvoking  
       298 天前
    简单的就 qt 吧
    TMaize
        20
    TMaize  
       298 天前
    wails 很简单
    nong99
        21
    nong99  
       298 天前 via iPhone
    非桌面应用开发岗,同时确实感受过 electron 的卡顿!这边想球迷如果总 QT 或 Avalonia 之类的完成主程主体框框,种交互的由自己嵌套 webview 可行否?
    nong99
        22
    nong99  
       298 天前 via iPhone
    @nong99 感觉提及跨平台,没有比 web 效率更高的样子了哇?既然如此,提供原生的壳子拓展,内容 web 这类方案是否在实践上有什么弊端吗?(同时,既然已经有了 Tauri 的存在,相比较用 QT 等回比较有什么优势呢?)各位桌面大佬可以探讨下哈~
    lujiaxing
        23
    lujiaxing  
       298 天前
    Avalonia + .NET 7 吧. AOT 打出来合计不超过 100M. 支持 Win / Linux / Mac
    lujiaxing
        24
    lujiaxing  
       298 天前
    @nong99 类似 NanUI 的方式嘛. 理论上是可以的. CEF 有一个叫 Off-Screen rendering 的模式, 可以用来实现你想要的效果.
    sloknyyz
        25
    sloknyyz  
       298 天前
    electron 吧,开发挺简单的
    Mithril
        26
    Mithril  
       298 天前
    @nong99 可以的,这种已经有很多方案了。
    你可以看一下 WebView2 的嵌套方案,这东西是直接调用系统提供的组件,不用打包一个 CEF 进去。支持混合编程。就是在你原生桌面应用里面内嵌一个浏览器控件,然后在里面渲染 web 。你可以随便嵌入到什么地方都行。
    比如 blazor hybrid ,虽然我不想用 Blazor ,但类似的方案也有不少。
    nong99
        27
    nong99  
       297 天前 via iPhone
    @Mithril @lujiaxing 好的👌谢谢各位大佬,我自己纯前端仔。玩略过 electron ,感觉像接触 C# .net 去玩下桌面框 webview2 试试!特别近况看说 C# 还是稳的哈🤣
    flyqie
        28
    flyqie  
       297 天前 via Android
    electron 吧。。

    这需求用 electron 最稳了。。
    ChrisFreeMan
        29
    ChrisFreeMan  
       297 天前
    人人都骂 electron 但是只有它除了原生最稳了
    CForce
        30
    CForce  
    OP
       297 天前
    @missdeer 主要是有一个外部的 exe 和 dll ,不知道怎么最终打包到同一个 exe 里面
    CForce
        31
    CForce  
    OP
       297 天前
    @DTCPSS 多谢,我去了解一下
    CForce
        32
    CForce  
    OP
       297 天前
    @fay94 electron 可以生成一个免安装的 exe 吗?我试了一下 forge 和 electron builder ,没有找到生成独立的 exe 的方案
    missdeer
        33
    missdeer  
       297 天前
    @CForce 当作 Windows 资源( rc )打进去,程序起来后先从资源里抽出来放到临时目录里用
    imkerberos
        34
    imkerberos  
       297 天前
    fltk / fltk-rs 最稳
    wxdiy
        35
    wxdiy  
       297 天前
    这需求,不就是做个网站?
    CForce
        36
    CForce  
    OP
       297 天前
    @wxdiy 主要是给本地用的,比如 连接外部设备 这种功能,所以网站可能不行
    CForce
        37
    CForce  
    OP
       297 天前
    @liuhan907
    @flyqie
    @gydi
    @sipt
    @yl20181003
    @sloknyyz
    @ChrisFreeMan

    求指导 electron 怎样配置,可以把工程里的三方 exe 和 dll 最终打包成一个免安装的 exe ,并且直接调用呢?试了一下 forge 和 electron-builder ,没有找到方案
    binge921
        38
    binge921  
       297 天前
    electron 必然可以打包成 exe 还支持 macos 刚用 electron 开发一款单机版程序 不难 会 vue 就行 服务端 nodejs java 都行 不过我希望我的下一个应用是 flutter 他的性能听说也挺高
    sloknyyz
        39
    sloknyyz  
       297 天前   ❤️ 1
    @CForce github 上很多模板项目,比如这个 https://github.com/sindresorhus/electron-boilerplate , 可以直接拿来用。
    配置都是配好的,但也需要安装你自己的需求去修改一些东西。打包这方面不用担心,electron-builder 可以使用--dir 参数将所有文件放到文件夹里不进行打包,这样后面可以自己直接压缩成一个压缩包就 OK 了。调用第三方 exe 更简单,直接主进程使用 node 的 child_process 模块调用,很方便。
    byteroam
        40
    byteroam  
       297 天前
    现在的人都退化到这个地步了?看了半天不就是写个绿色 exe 吗......还需要啥技术方案..
    CForce
        41
    CForce  
    OP
       297 天前
    @sloknyyz child_process 执行这个 exe 的话需要一个路径,如果不把外部 exe 解压出来的话,这个路径应该怎么传呢?
    lujiaosama
        42
    lujiaosama  
       297 天前
    @sipt 体积大无所谓. 现在硬盘空间多得很, 主要是卡, 臃肿得一匹.
    byteroam
        43
    byteroam  
       297 天前
    你可以使用第三方工具,例如 "ILMerge" 或 "BoxedApp Packer",将 EXE 文件和 DLL 文件合并为一个单独的 EXE 文件。
    CForce
        44
    CForce  
    OP
       297 天前
    @byteroam 嗨,主要是没搞过桌面开发,想着这几个需求如果不能同时满足,那就退而求其次了,大佬有什么简单的方案可以不吝赐教一下
    BeiChuanAlex
        45
    BeiChuanAlex  
       297 天前
    Tauri 吧,不过要会前端才行。
    hronro
        46
    hronro  
       297 天前
    「 Mac 上就是一个 Linux 可执行文件」是什么意思?

    岂不是说还要在 macOS 上开一个 Linux 虚拟机才能正常运行起来?
    DT37
        47
    DT37  
       297 天前
    Java 就可以啊
    ackmanfork
        48
    ackmanfork  
       297 天前
    .net winform 可以搞定在一个类库内去写。
    ackmanfork
        49
    ackmanfork  
       297 天前
    理论上如果不引用其他的第三方 dll ,不会生成多余的 dll 只有一个 exe
    Curtion
        50
    Curtion  
       297 天前
    有很多看似的无需安装的 exe 文件,在运行时都会解压依赖项到系统的 temp 文件夹中
    yanggggjie
        51
    yanggggjie  
       297 天前
    electron
    wildman9527
        52
    wildman9527  
       297 天前
    pygame
    signalas1
        53
    signalas1  
       297 天前
    Electron 里用 nodejs 的 spwan 启动应用, 通讯用 net ipc 。
    nikenidage1
        54
    nikenidage1  
       297 天前
    https://www.v2ex.com/t/952603
    用 .Net 写了一个跨平台的桌面端软件,且原生编译,无需运行时,启动快内存少体积小
    signalas1
        55
    signalas1  
       297 天前
    还可以类似蓝灯的思路,你们如果是这个功能程序的作者,可以起一个本地服务器,点击图标就拉起浏览器,用浏览器来访问程序。
    flyqie
        56
    flyqie  
       297 天前
    @Curtion #50

    是的,反正总要有个地方塞。。

    temp 目录是最好的选择。
    ysc3839
        57
    ysc3839  
       297 天前 via Android
    “Mac 上就是一个 Linux 可执行文件”是错的,Windows Linux macOS 这三个平台的可执行文件都有各自的格式,Windows 习惯给可执行文件名加上.exe 后缀,但加不加都不影响文件内容。
    macOS 有个特殊的“格式”叫做捆绑包,比如你看到的一个“应用程序”,其实是.app 后缀的文件夹,内容大概是这样的:
    app.app
    -Content
    --MacOS
    ---可执行文件
    --Resources
    ---资源文件
    如果有多个可执行文件,都放进 MacOS 那个文件夹即可,运行时可以用_NSGetExecutablePath 获取自身路径。
    iorilu
        59
    iorilu  
       297 天前 via Android
    pyqt 没别的选择

    要么就是那种套浏览器的
    seliote
        60
    seliote  
       297 天前
    Flutter
    rainbirda
        61
    rainbirda  
       297 天前
    PyQt6 或 PySide6 能满足你的需求,可以打包成 exe ,并可引用 dll ,就是打的包有点大,包含了整个 Python 环境,设计页面也比较方便,可以使用 Qt Designer 可视化拖拽组件,就是有些属性不太好找
    inframe
        62
    inframe  
       297 天前   ❤️ 1
    支持跨平台的玩过这么几个:

    C# Net 567,PyQt5\tkinter
    Java Swing/ComposedUI ,Flutter, Pascal Lazarus
    web 套壳 Electron
    ichubei
        63
    ichubei  
       297 天前 via iPhone
    @sipt 几秒钟下完,一两百空间没什么,现在网速,硬盘都便宜。 体验好就行。
    jevonszmx
        64
    jevonszmx  
       297 天前
    不要折腾,Electron
    thiiadoewjwe
        65
    thiiadoewjwe  
       297 天前
    独立运行的 exe 我能想到的就是用 C++写完静态链接生成 exe ,这样的话一个 exe 就可以了
    vitovan
        66
    vitovan  
       297 天前
    oldj
        67
    oldj  
       297 天前
    @CForce Electron 使用 electron-builder 打包时,target 那儿传入 "portable" 就可以打包为一个免安装的 exe 了。参见 https://www.electron.build/configuration/win 的 target 参数说明。还可以指定打包的架构,比如 "portable:ia32"、"portable:x64" 等等。
    diyisoft
        68
    diyisoft  
       297 天前
    试试 Delphi 11.3 ,不过没接触过的搞不来。
    wpo
        69
    wpo  
       297 天前
    Flutter ,我就在用这个画 UI ,在 Windows 下拉起 ADB 之类的外部程序实现功能。
    simo
        70
    simo  
       297 天前
    经验不多,下面都做过些软件。
    qt 推荐
    flutter 一般
    taurl 一般
    electron 打包有点大,前端转型的,开发速度比较快
    kingzeus
        71
    kingzeus  
       297 天前
    推荐 flutter ,上手简单,做工具没啥问题
    dimwoodxi27
        72
    dimwoodxi27  
       297 天前
    golang 的 fyne 推荐:直译支持跨平台,无需安装其他额外依赖
    java 的 fx 不推荐:编译麻烦,写个几百 kb 的程序得带个几百 m 的 jre ,重点不是直译是开源
    c++的 qt 和 c#的 wpf 推荐
    kylix
        73
    kylix  
       297 天前
    看了下回帖,发现推前端工具的比较多呀,看来 v2 很多前端呀

    ---
    本来都写了一段话了,后来还是 backspace 掉了
    newmlp
        74
    newmlp  
       297 天前
    qt 或 c#的 ui 库
    exe 了解下静态库,如果第三方库都是开源的就编译成静态库,可以做到一个 exe 就行了
    mac 就无所谓了,反正它的应用本来就是以.app 结尾的文件夹体现的
    LANB0
        75
    LANB0  
       297 天前
    @ChrisFreeMan QT 是不服的,小工具又不需要花里胡哨,electron 仅有的开发效率也没啥意义
    yjd
        76
    yjd  
       297 天前
    我这种喜欢原生 win32 启动快的,像 electron 这种,简直。。。
    qbittorrent 用 qt 。冷启动慢。c#冷启动也慢。

    我看你这需求 win 的话,直接批处理或 powershell 脚本+自解压打包省事,写好打包脚本,鼠标双击下不都给你生成出来了
    horizon
        77
    horizon  
       297 天前
    @kylix #73
    你想表达什么呢
    hez2010
        78
    hez2010  
       297 天前 via Android
    推荐 Avalonia (11.0 版本),跨平台并且原生支持 GPU 加速,还支持 nativeaot 编译出原生二进制代码。
    jazzg62
        79
    jazzg62  
       296 天前   ❤️ 1
    回复中出现了约 31 次 electron ,12 次 qt, 8 次 flutter ,5 次 Avalonia ,其它若干。
    果然还是对开发者友好的框架更受欢迎啊
    SekiBetu
        80
    SekiBetu  
       296 天前
    electron
    imvsiam
        81
    imvsiam  
       296 天前
    1. Flutter
    2. Electron
    3. Tauri
    r6cb
        82
    r6cb  
       296 天前
    可以试试用 WinRAR 打包自解压压缩包,每次运行直到解压到 temp 目录,而且也能设置如果文件已经存在就跳过解压来加快后续的启动速度
    suyulingxm
        83
    suyulingxm  
       296 天前
    flutter + rust
    Andywoo
        84
    Andywoo  
       173 天前
    有 python 、go 基础的可以看看 pyside 和 wails ,最近学习了这两个框架,做了一个玩具,开发效率还不错。
    https://www.v2ex.com/t/988925

    如果只是内部小团队使用,又一个框架 [flet]( https://github.com/flet-dev/flet) 开发起来特别快。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2793 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:04 · PVG 14:04 · LAX 23:04 · JFK 02:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.