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

请教 Windows 桌面开发选择

  •  1
     
  •   JustinL · 2023-12-15 12:00:02 +08:00 via iPhone · 16213 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先说一下背景:建筑行业公司,内部工程师用,因此只需要 Windows 即可,同时公司所有电脑已经是 Win11 ,不用兼容 xp 那种包袱,可以考虑上最新的技术。内部使用铺开后如果反馈不错,有可能对外销售。

    做了一些 study ,感觉主要是这几种:
    1. Delphi/Lazarus 。在前公司用过,确实很方便,但是 Delphi 需要授权,Lazarus 社区也比较小,领导不喜欢,pass
    2. C#+WPF 。主要担心被反编译问题,但是貌似很多软件也是 C#,请问是否多虑?搜了一下没有太好的解决方案。
    3. C++ qt 。主要担心上手难度问题,团队没写过 C++,不过兴趣很大,就是怕交付时间不能保证。
    4. C#写界面,C++写核心算法。不知道里面有没有什么调用的坑?

    限定在 Windows 就行了,不需要讨论跨平台。

    陷入选择困难症了……请有经验的大佬们指点一二~
    第 1 条附言  ·  2023-12-15 12:43:35 +08:00

    经提醒,qt可能也有授权问题。我之前一直理解是动态链接就没问题,刚马上搜了一下,情况可能会比较复杂,因为qt使用的协议很多,不同模块有可能不同。

    第 2 条附言  ·  364 天前

    感谢诸位的帮助🙏

    准备使用C# + Avalonia,尽可能地使用 aot 编译。

    但正如我在留言中提及,私心希望学点新东西,所以自己会学一下 go + wails,希望下次选型能用上。

    再次感谢大家。

    134 条回复    2023-12-17 21:18:23 +08:00
    1  2  
    ShadowPower
        1
    ShadowPower  
       2023-12-15 12:04:30 +08:00
    选 3 ,这玩意非常简单,整体难度大概是 Java Swing 的程度
    Goooooos
        2
    Goooooos  
       2023-12-15 12:07:32 +08:00 via Android
    qt 不是不能免费商用吗
    jeeyong
        3
    jeeyong  
       2023-12-15 12:09:19 +08:00
    我一直是 python+tkinter 干.
    如果对样式有要求, 也有一些基于 tkinter 的花式样式库.
    打包的时候别压缩到一个文件.
    速度还可以...
    Tumblr
        4
    Tumblr  
       2023-12-15 12:10:41 +08:00
    hmm 。。。你这 4 个选项相当于只有选项 2 啊。。。
    选项 1 涉及授权问题,最主要是领导不喜欢;剩下的 2 个,如果团队没有 C++经验,那完全是给自己挖坑啊,能不能填起来还不敢保证。保险起见,选项 2 是唯一解。
    zsxzy
        5
    zsxzy  
       2023-12-15 12:11:41 +08:00
    qt 肯定会找你们要钱的, UI 不复杂用 duilib 就行
    zjsxwc
        6
    zjsxwc  
       2023-12-15 12:12:19 +08:00
    知乎上看到有人用 electron 搞船舶的,开发确实是 electron 快

    https://www.zhihu.com/question/264999651/answer/848101852
    rwecho
        7
    rwecho  
       2023-12-15 12:26:39 +08:00
    Wpf 把敏感的逻辑封装下,interop
    tool2d
        8
    tool2d  
       2023-12-15 12:27:00 +08:00
    用 html 写界面,能最大限度去兼容团队成员不同的水平。

    只要套一层 electron ,需要计算的地方用 nodejs 去调用 c++模块就可以了。
    rwecho
        9
    rwecho  
       2023-12-15 12:28:44 +08:00
    C#调用 c++,应该是一开始就有的,很多年成熟的技术了
    rwecho
        10
    rwecho  
       2023-12-15 12:29:29 +08:00
    另外可以考虑 wpf+blazor+c++
    shijingshijing
        11
    shijingshijing  
       2023-12-15 12:29:30 +08:00
    不要选 C#,不好招人,简单的上 PySide 用 Python ,复杂的上 Qt 直接 C++。
    shijingshijing
        12
    shijingshijing  
       2023-12-15 12:30:36 +08:00
    C#如果做大了,微软也会找你们收钱的啊
    a33291
        13
    a33291  
       2023-12-15 12:31:45 +08:00
    C#用 SmartAssembly 加密一下就行,完全防破解这几种技术都不好使,只能增加逆向成本
    另外直接套一个 webview2 或者 cef,页面用 h5,交互调用 C#直接暴露函数到 js 端也是可以的,现在 ui 部分我更喜欢 h5 实现,简单快捷轮子多
    a33291
        14
    a33291  
       2023-12-15 12:32:43 +08:00
    @shijingshijing #12 你这说话有点搞笑啊朋友,微软收 u3d 的 C#使用费了?
    JustinL
        15
    JustinL  
    OP
       2023-12-15 12:32:51 +08:00 via iPhone
    @ShadowPower really? 还没试过,但是网上都说很复杂……
    JustinL
        16
    JustinL  
    OP
       2023-12-15 12:35:51 +08:00 via iPhone
    @Tumblr c++是有兴趣学习,因为私心是多学一个技能以后可以用在别的地方
    Chad0000
        17
    Chad0000  
       2023-12-15 12:36:08 +08:00
    内部使用的话,哪个出活快用哪个。我选的话我会选 2 ,等对外销售的时候再说。市面上破解的软件也不是只能破解 C#的。
    JustinL
        18
    JustinL  
    OP
       2023-12-15 12:36:46 +08:00 via iPhone   ❤️ 1
    @zjsxwc sounds good! 没想到传统软件也有用 web 方案
    Chad0000
        19
    Chad0000  
       2023-12-15 12:37:27 +08:00
    C#+Winform 出活儿更快,所见即所得。就是分辨率适配会有点儿问题,以及后期对界面美化的控制不如 WPF
    JustinL
        20
    JustinL  
    OP
       2023-12-15 12:38:56 +08:00 via iPhone
    @shijingshijing 不同于互联网行业,建筑行业还是很多 C#的
    Dogtler
        21
    Dogtler  
       2023-12-15 12:42:45 +08:00 via iPhone
    Flutter……
    JustinL
        22
    JustinL  
    OP
       2023-12-15 12:44:28 +08:00 via iPhone
    @jeeyong 请问 python 怎样保护源代码?
    acctv2
        23
    acctv2  
       2023-12-15 12:47:51 +08:00
    C#好像是付费的保护方案吧,帮你做混淆的
    ShadowPower
        24
    ShadowPower  
       2023-12-15 12:48:10 +08:00
    @Goooooos 可以免费商用,用 LGPL 协议的版本
    acctv2
        25
    acctv2  
       2023-12-15 12:48:25 +08:00
    Qt 协议很复杂,而且你们团队还没 C++经验,这就是绝对的隐患了
    yolee599
        26
    yolee599  
       2023-12-15 12:48:57 +08:00 via Android
    Qt 是 LGPL 啊,动态链接应该可以商用吧
    enihcam
        27
    enihcam  
       2023-12-15 12:49:13 +08:00
    听起来就是 C#了。

    别听上面胡扯八道:微软永远不会找你收钱,没有公司会这么傻。
    Chad0000
        28
    Chad0000  
       2023-12-15 12:49:45 +08:00
    @shijingshijing #12

    C#和 WPF 这两个东西微软怎么收钱???你要说 IDE 还有可能(但也有方案)
    goodryb
        29
    goodryb  
       2023-12-15 12:50:03 +08:00
    @Chad0000 #17 说的对,前期先不要考虑那么复杂的事情,搞出来先看看
    enihcam
        30
    enihcam  
       2023-12-15 12:52:06 +08:00
    C#支持.net native ,按 release 发布,stripe 所有 symbols ,请问怎么反编译?上面那位满嘴跑火车的来回答一下。
    ShadowPower
        31
    ShadowPower  
       2023-12-15 12:52:47 +08:00
    @JustinL 网上很多人看到 C++三个字就说难了……
    我从 0 学会 Qt 只花了 7 天
    tangmanger
        32
    tangmanger  
       2023-12-15 12:54:31 +08:00
    wpf 啊 还用想,,,反编译 可以买商业混淆或者开源混淆
    cnbatch
        33
    cnbatch  
       2023-12-15 12:54:46 +08:00
    怕 qt 的授权?那么可以选 wxWidgets ,还可以在 vcpkg 内一键安装
    Chad0000
        34
    Chad0000  
       2023-12-15 12:54:47 +08:00
    @ShadowPower #31
    要比上手速度,那么我可以说从 0 到学会 Winform 只需要七分钟甚至更少。Winform 的上手风格完全就是现在所谓的低代码平台编辑器的样子。
    jones2000
        35
    jones2000  
       2023-12-15 12:56:46 +08:00
    win32+CEF.
    ShadowPower
        36
    ShadowPower  
       2023-12-15 13:00:44 +08:00
    @Chad0000 这得综合考虑 OP 的需求,里面还包括反编译难度。如果用 Qt Widgets 的话,界面也可以拖,只是交互方式和 VS 不太一样。
    zogwosh
        37
    zogwosh  
       2023-12-15 13:00:47 +08:00
    那你只用 webview 不就好了,win11 不都有吗。用 c 写个兼容层就好了。思路类似于 tauri
    maxxfire
        38
    maxxfire  
       2023-12-15 13:07:58 +08:00
    electron ,虽然它有点臃肿,有点前端娱乐。但它有网络互联的基因,天生的标准。
    shijingshijing
        39
    shijingshijing  
       2023-12-15 13:12:49 +08:00
    @Chad0000
    @JustinL
    @a33291

    当然是 Visual Studio IDE 收钱,如果用了某些库,还会单独收授权费。Win 10 以后微软各种暗藏的 Telemetry Service 背后运行,取证不要太方便,Win 11 搜集信息的能力更厉害。
    loophole12
        40
    loophole12  
       2023-12-15 13:17:16 +08:00 via Android   ❤️ 1
    不是内部工程师用吗,为什么要担心被反编译?
    buxudashi
        41
    buxudashi  
       2023-12-15 13:18:04 +08:00
    aardio,tarui,flutter. c#
    0o0O0o0O0o
        42
    0o0O0o0O0o  
       2023-12-15 13:19:48 +08:00 via iPhone
    如果担心被反编译的话,不是靠选语言选框架就行的,也不是靠#30 那样改改编译选项就可以的,建议挑选过程中把商业化保护方案考虑在其中
    JustinL
        43
    JustinL  
    OP
       2023-12-15 13:21:46 +08:00 via iPhone
    @loophole12 不同部门,而且普通工程师也是有可能给其他公司的工程师用的
    Chad0000
        44
    Chad0000  
       2023-12-15 13:22:14 +08:00
    @shijingshijing #39

    OP 使用免费的 Visual Studio Community 版开发呢?就算 OP 公司发财了要买,VS Pro $499 是买不起么?其他免费方式我没搞过因为我个人使用 Community 版,公司给买的 Pro (还附带 Azure 每月大几十刀体验额度,快白给了),不需要考虑其他方案。
    shijingshijing
        45
    shijingshijing  
       2023-12-15 13:28:25 +08:00
    @Chad0000 我没记错的话 Community 还有以前的 Express 版本,是无法开发和编译 Winform 的,WPF 的我不知道。
    shijingshijing
        46
    shijingshijing  
       2023-12-15 13:32:40 +08:00
    #45 错了,Community 不确定,Express 我确定是无法使用 Form Designer 来直接拖拽控件开发的。
    Chad0000
        47
    Chad0000  
       2023-12-15 13:33:29 +08:00
    @shijingshijing
    我开发 Winform 和 WPF 好多年,虽然这几年大部分搞 Web 了但 Community 无法开发 Winform 是头次听说。你最好不要乱说,Community 只是没有高级的一些调试和监控功能而已(说实话我用 Pro 也用不到这些高级功能)。
    0n2ynu
        48
    0n2ynu  
       2023-12-15 13:41:18 +08:00
    windows 桌面开发, C#毫无疑问
    jeeyong
        49
    jeeyong  
       2023-12-15 13:41:21 +08:00
    @JustinL pyinstaller 或者 nuitka 打包发布啊.
    ysc3839
        50
    ysc3839  
       2023-12-15 13:42:29 +08:00 via Android
    没有好的选择,要防止反编译的话个人还是会选择 C++。
    具体得看搞什么功能,用 Win32 写起来可能很麻烦。MFC 也许能省一点事,但是也是淘汰的技术,个人不推荐使用。
    还可以考虑 WinUI ,但是系统至少要 Win10 1903 。WinUI 有个“分支”是 React Native ,界面逻辑用 js 写,底层界面库还是用 WinUI ,同时也可以用 C++写功能暴露给 js 调用。
    也可以考虑 C++ + WebView ,但前端部分感觉很容易被反编译。
    不建议 C# + C++,你用 C++写的都是做成 DLL 给 C#调用,那别人完全可以把你的 DLL 弄过去换壳直接使用。
    Dorian101
        51
    Dorian101  
       2023-12-15 13:45:10 +08:00
    @rwecho 敏感的部分可以 AOT
    JustinL
        52
    JustinL  
    OP
       2023-12-15 13:46:05 +08:00 via iPhone
    @jeeyong 这是打包吧,源码还是可以很容易得到?
    Dorian101
        53
    Dorian101  
       2023-12-15 13:46:51 +08:00
    @shijingshijing .NET 的所有方面都是开放源代码,包括类库、运行时、编译器、语言、ASP.NET Core Web 框架、Windows 桌面框架以及 Entity Framework Core 数据访问库等。
    xieren58
        54
    xieren58  
       2023-12-15 13:48:09 +08:00
    JustinL
        55
    JustinL  
    OP
       2023-12-15 13:50:14 +08:00 via iPhone
    @ysc3839 楼上确实很多人建议套 web 做界面。另外说到 C#调用 C++ dll 的问题,可不可以在 dll 里面做一些鉴权的措施?例如在公司网络下才能以调用?
    Chad0000
        56
    Chad0000  
       2023-12-15 13:51:09 +08:00
    OP 这么关心反编译,直接找相关技术是否有付费的方案,价格多少就行了。免费的又不能保证还得自己研究,如果付费的可负担还浪费啥。
    JustinL
        57
    JustinL  
    OP
       2023-12-15 13:54:40 +08:00 via iPhone
    @xieren58 我理解除了跨平台特性,这个框架和 WPF 并无二致?
    majianglin
        58
    majianglin  
       2023-12-15 13:58:34 +08:00
    我推荐 Electron ,web 前端开发人员上手太快了,JS 编译后很难反编译的

    也可以用 C++开发 NodeJS 插件来做加密鉴权和密集计算模块
    ggvoking
        59
    ggvoking  
       2023-12-15 14:07:34 +08:00
    没看懂这么多人推荐 Electron ,话说如果本来就是 C#技术栈,那 wpf 肯定是最佳选择。
    elechi
        60
    elechi  
       2023-12-15 14:11:37 +08:00
    WPF 加个 MVVM
    jeeyong
        61
    jeeyong  
       2023-12-15 14:15:34 +08:00
    @JustinL 我一直理解的是 nuitka 是转义一次然后打包? 还真没太在意源码的问题. 我交付的时候源码都是直接给的.哈哈
    Mithril
        62
    Mithril  
       2023-12-15 14:17:22 +08:00
    C# + WebView2 ,前端一套写界面,后端直接就是个 webserver 。
    这是前后端开发都最简单的方案。

    至于加密和破解,这就是个成本问题。如果你只想上个难度,那代码混淆也就够了。非要硬搞的话就上基于虚拟机的解决方案,但个人觉得压根没必要。你一个行业内部软件,除非做得特别好,别人不用不行,或者技术独特,算法非常好。不然没那么多人闲的去反编译的。
    然而算法你最好用专利保护,光靠代码也是防不住的。
    sunmker
        63
    sunmker  
       2023-12-15 14:22:41 +08:00
    用 C#的 winform ,更快
    vvvvvvvv
        64
    vvvvvvvv  
       2023-12-15 14:28:38 +08:00
    有个神奇的东西叫做 aardio
    j519
        65
    j519  
       2023-12-15 14:30:17 +08:00
    选简单的。
    rwecho
        66
    rwecho  
       2023-12-15 14:34:18 +08:00
    @shijingshijing

    你要是不知道可以不说
    afirefish
        67
    afirefish  
       2023-12-15 14:35:37 +08:00
    C# + Avalonia 。C# native 调用 C++代码非常方便,也莫得啥性能损失。
    别听上面人瞎 jb 扯淡。C#免费,开源。而且技术栈非常完善。
    afirefish
        68
    afirefish  
       2023-12-15 14:36:19 +08:00
    @shijingshijing 不知道可以不说。造谣可就违法了~
    xieren58
        69
    xieren58  
       2023-12-15 14:36:22 +08:00
    @JustinL 前段时间用 avalonia 做完一个项目, 比 wpf 爽... .net 8 可以 aot, 难以反编译, 如果不用 net 8 , 核心点还可以用 rust 写 dll, 有相关的库 uniffi-bindgen-cs, 没办法反编译... 我那项目就是 avalonia + rust , 核心点用 rust 写, 速度快, 又不怕反编译...
    xieren58
        70
    xieren58  
       2023-12-15 14:37:25 +08:00
    @JustinL 对了, 原来那项目是 wpf + webview2, 改成了现在的 avalonia + rust...
    rwecho
        71
    rwecho  
       2023-12-15 14:39:10 +08:00
    @JustinL
    反编译的话和你的成本有关系, 如果你的客户端已经被黑客拿到了, 剩下的是攻防问题. 目前说的混淆之类的, 只是防一些入门级别

    最安全的是放在服务端. 让他们拿不到关键代码逻辑.


    @Mithril 说的很好, C# (WPF+winform)+ webview2 目前是能兼具桌面优势和 web 优势的开发技术.

    甚至可以用 MAUI Avaloinia + Blazor + webview2

    真正的攻与防和代码无关. 和成本有关
    rwecho
        72
    rwecho  
       2023-12-15 14:40:24 +08:00
    @xieren58 是桌面项目还是移动端? 很有兴趣,有开源吗?
    keymao
        73
    keymao  
       2023-12-15 14:42:10 +08:00
    electron+cpp 核心模块 免费 无商用风险
    avalon8
        74
    avalon8  
       2023-12-15 14:44:36 +08:00
    electron 套壳
    sunzhuo
        75
    sunzhuo  
       2023-12-15 14:45:45 +08:00
    什么算法?有没有现成的库?
    c2const
        76
    c2const  
       2023-12-15 14:46:42 +08:00
    团队没 C++经验,那 1 、3 、4 可以直接放弃,直接选 2 :)
    ---------------------
    至于 C#的反调试和反逆向,不要自己做、也不要用免费的,用付费方案挡住大部分人即可 :)
    最好是把核心功能放在服务器上,即使破解本地软件也用不了 :)
    xieren58
        77
    xieren58  
       2023-12-15 14:50:27 +08:00
    @rwecho 桌面项目, 商用, 靠这个赚钱, 没办法开源...
    andytao
        78
    andytao  
       2023-12-15 14:50:40 +08:00
    还有如下解决方案:
    1 、Flutter + Dart ,现在手机上用的都是它,它也能开发桌面版;

    2 、GTK + Vala ,用 C# 的原生版开发原生桌面程序,技术很成熟,也能开发大型应用;
    大型 GTK 应用 [袋鼠数据库工具] 用的就是这套方案。
    andytao
        79
    andytao  
       2023-12-15 14:55:46 +08:00
    袋鼠工具相关界面可以从这里看到:
    https://github.com/dbkangaroo/kangaroo
    dhssingle
        80
    dhssingle  
       2023-12-15 14:59:28 +08:00
    Avalonia
    idealhs
        81
    idealhs  
       2023-12-15 15:01:39 +08:00
    没什么好说的必选 WPF ,担心反编译 WPF 纯 UI ,C++写业务。
    xingjue
        82
    xingjue  
       2023-12-15 15:04:29 +08:00
    用 golang 的 wails https://github.com/tiny-craft/tiny-rdm 这个就是 wails 写的
    snailya
        83
    snailya  
       2023-12-15 15:05:58 +08:00   ❤️ 2
    好多公司明明没啥核心技术,却天天担心泄密了。我说的就是我们公司。
    rwecho
        84
    rwecho  
       2023-12-15 15:06:03 +08:00
    @xieren58 了解
    SWALLOWW
        85
    SWALLOWW  
       2023-12-15 15:20:19 +08:00
    wpf 一把唆,最后不都混淆的吗,可提供远程协助
    kriko
        86
    kriko  
       2023-12-15 15:23:09 +08:00
    用 unity 游戏引擎做
    shermie
        87
    shermie  
       2023-12-15 15:23:27 +08:00
    上面所有的答案 我觉得都不是最好的 最好的是炫彩 gui http://www.xcgui.com/ 自带设计器生成的是 xml 使用语言加载就可以 你可以搜一下 所有语言都能用 只要能调用 dll
    sunmker
        88
    sunmker  
       2023-12-15 15:25:29 +08:00
    @snailya 我们也是,哈哈
    ysc3839
        89
    ysc3839  
       2023-12-15 15:30:14 +08:00 via Android   ❤️ 1
    @JustinL 当然可以,但是 DLL 仍然是把相关逻辑直接暴露在外了。
    要比喻的话,DLL 就像把房门直接对着外面,虽然门本身有锁,但还是比较薄弱。exe 静态链接的话,就像门外面还有个大院子,要破解得先在院子里绕个半天找到门才行。
    NoobNoob030
        90
    NoobNoob030  
       2023-12-15 15:33:17 +08:00
    2 或者 electron
    hahahabro
        91
    hahahabro  
       2023-12-15 15:38:05 +08:00
    @shijingshijing 胡说八道什么
    JustinL
        92
    JustinL  
    OP
       2023-12-15 15:44:44 +08:00 via iPhone
    @sunmker @snailya
    这个确实没办法,不是一个人能决定的,利益走在技术之前
    anyele
        93
    anyele  
       2023-12-15 15:48:45 +08:00
    windows 桌面开发, C# WPF 毫无疑问
    runliuv
        94
    runliuv  
       2023-12-15 15:55:38 +08:00
    windows 桌面开发, C# WinForm 或 WPF ,毫无疑问。
    怕反编译,找免费的混淆工具或购买 dnguard 等混淆工具。
    hatsuyuki
        95
    hatsuyuki  
       2023-12-15 16:02:48 +08:00
    flutter desktop
    shuax
        96
    shuax  
       2023-12-15 16:04:43 +08:00
    我来推荐一个 Flutter ,写个界面轻轻松松
    ly841000
        97
    ly841000  
       2023-12-15 16:23:04 +08:00   ❤️ 1
    @ysc3839 #89 其实.net 8 的 aot 可以静态链接 lib
    xuanbg
        98
    xuanbg  
       2023-12-15 16:25:44 +08:00
    @shijingshijing 奇怪,我完全想不出微软能用什么名义来收钱?

    vs 也有免费版本啊
    liyafe1997
        99
    liyafe1997  
       2023-12-15 16:27:49 +08:00
    @Goooooos Qt 你只要不修改它的库,用它的 dll 动态链接,并且在程序中声明使用了 Qt 就没问题,完全符合 LGPL 协议。
    nodejsexpress
        100
    nodejsexpress  
       2023-12-15 16:31:25 +08:00
    那么快担心反编译,就是多余的。
    哪天内部觉得这个软件不好用或者没有价值,就砍掉了。

    出活快,就 python ,qt
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:23 · PVG 10:23 · LAX 18:23 · JFK 21:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.