# 单个exe桌面应用程序 | 工具 | 最小OS版本 | IDE | 最小发布体积 | 可单文件 | 技术栈 | 备注 | | -------- | ---------- | ------------- | ------------ | -------- | --------- | ------------------------------------------------------------ | | Win32API | 任意 | VS | 0.1M | Y | C++/Win32 | 没有任何多余的依赖,发布体积极小。基本只能用Windows 标准原生控件。 | | MFC | Windows7 | VS | 1-3M | Y | C++/Win32 | “MFC对API的封装像纸一样薄”,明日黄花(过时),但需要小体积原生应用可以考虑。 | | Qt | Windows7 | VS/Qt Creator | 5M | Y | C++ | 可自己编译发布静态编译版本,最小可做到5M的EXE体积。 | | PyQt | Windows 7 | PyCharm/VSC | 40M | N | Python | 通过 pyinstaller/cx_freeze 发布可执行版本。 | | WPF | Windows7 | VS/Rider | 50M+ | N | C# | .net core 5.0 据说可以单文件发布。 | | WinForm | Windows7 | VS | 50M+ | N | C# | 微软的,不建议学习。 | | Electron | Windows 7 | VSC | 40M+ | N | Js/HTML | 需要前端。 | # node-webkit(NW.js) 桌面应用开发以往需要的MFC、C#之类的技术,现在不用这些,只用前端的工作栈也可以做。node-webkit开源框架封装了webkit内核和node.js,这样就可以用web技术开发Windows、Linux和Mac程序,目前node-webkit已经改名为NW.js。[GitHub地址](https://github.com/nwjs/nw.js)。 ## 安装NW.js 进入官网(http://nwjs.io/),SDK是带chrome调试器的,方便调试使用,normal版等正式发布应用的时候再用,所以两个都下载下来。一般用SDK版本进行开发,下载SDK后解压后就能使用,注意按照对应的机器下载使用。 ## 使用NW.js 1、在根目录创建文件夹 `app` ,该文件夹下放入html、css、js的源码。 2、在app工作目录下添加 `package.json` 配置文件,NW.js通过配置文件来配置app ```json { "main": "index.html", "name": "Simulator", "description": "指令学习", "version": "0.1.0", "keywords": [ "指令学习", "在线"], "window": { "title": "指令学习", "icon": "icon.png", "toolbar": false, "frame": false, "width": 1090, "height": 750, "position": "center", "min_width": 1090, "min_height": 750, "max_width": 1920, "max_height": 1080, "resizable": true }, "webkit": { "plugin": false, "java": false, "page-cache": false }, "user-agent": "%name %ver %nwver %webkit_ver %osinfo", "chromium-args": "--allow-file-access-from-files" } ``` 相关说明 ```json { /**指定程序的起始页面。*/ "main": "index.html", /**字符串必须是小写字母或者数字,可以包含.或者_或者-不允许带空格。name必须全局唯一。*/ "name": "demo", /**程序描述*/ "description": "demo app of node-webkit", /**程序版本号*/ "version": "0.1.0", /**关键字*/ "keywords": ["demo","node-webkit"], /**bool值,如果设置为false,将禁用webkit的node支持。*/ "nodejs": true, /** * 指定一个node.js文件,当程序启动时,该文件会被运行,启动时间要早于node-webkit加载html的时间。 * 它在node上下文中运行,可以用它来实现类似后台线程的功能。 * (不需要可注释不用) */ //"node-main": "js/node.js", /** * bool值。默认情况下,如果将node-webkit程序打包发布,那么只能启动一个该应用的实例。 * 如果你希望允许同时启动多个实例,将该值设置为false。 */ "single-instance": true, /**窗口属性设置 */ "window": { /**字符串,设置默认title。*/ "title": "demo", /**窗口的icon。*/ "icon": "link.png", /**bool值。是否显示导航栏。*/ "toolbar": false, /**bool值。是否允许调整窗口大小。*/ "resizable": true, /**是否全屏*/ "fullscreen": false, /**是否在win任务栏显示图标*/ "show_in_taskbar": true, /**bool值。如果设置为false,程序将无边框显示。*/ "frame": true, /**字符串。窗口打开时的位置,可以设置为“null”、“center”或者“mouse”。*/ "position": "center", /**主窗口的的宽度。*/ "width": 800, /**主窗口的的高度。*/ "height": 670, /**窗口的最小宽度。*/ "min_width": 400, /**窗口的最小高度。*/ "min_height": 335, /**窗口显示的最大宽度,可不设。*/ "max_width": 800, /**窗口显示的最大高度,可不设。*/ "max_height": 670, /**bool值,如果设置为false,启动时窗口不可见。*/ "show": true, /**是否在任务栏显示图标。*/ "show_in_taskbar":true, /** * bool值。是否使用kiosk模式。如果使用kiosk模式, * 应用程序将全屏显示,并且阻止用户离开应用。 * */ "kiosk": false }, /**webkit设置*/ "webkit": { /**bool值,是否加载插件,如flash,默认值为false。*/ "plugin": true, /**bool值,是否加载Java applets,默认为false。*/ "java": false, /**bool值,是否启用页面缓存,默认为false。*/ "page-cache": false } } ``` 3、生成可执行的exe文件 将app目录下的文件都打包压缩成一个app.zip,然后将.zip更名为.nw,(有时不用改后缀也可以),然后将app.nw剪切到上一级根目录中。注意这里的根目录为`D:\Download\nwjs-sdk-v0.61.0-win-x64` ,工作目录为 `D:\Download\nwjs-sdk-v0.61.0-win-x64\app` 。 在根目录下执行指令 ```bash copy /b nw.exe+app.nw app.exe ``` 这样在目录下就生成了app.exe。 4、封包 方式一:使用Enigma Virtual Box工具 下载地址:https://enigmaprotector.com/en/downloads.html - 在Enter Input File Name输入app.exe的路径 - 在Enter Output File Name输入打包出来的可执行文件的输出路径 - 点击增加,选择nwjs文件夹 - 导入配置文件,选择执行封包后生成exe可执行文件 - 双击exe既可以直接运行 方式二:使用Inno Setup打包工具 Inno Setup的打包方式是将一开始的web应用源文件和node-webkit的nw.exe和一些dll直接压缩成一个安装文件,我们并不需要上述中间那先打包成app.exe的步骤。用户在使用你的exe后会出现setup wizard把程序安装到Program Files目录中,将nw.exe,dll,web应用释放出来,这个时候所生成的安装文件其实size会小很多。 下载地址:http://www.jrsoftware.org/isdl.php - 下载安装运行后点击File->New即进入创建步骤 - 填写应用发布的信息 - 添加应用程序的打包文件 - 执行后续操作,进行编译 - 生成可执行EXE # 使用nw-builder nw-builder可以通过CLI使用来构建不同平台的应用。项目地址https://github.com/nwjs-community/nw-builder ## 安装 ```bash # local安装 npm install nw-builder --save-dev # global安装 npm install nw-builder -g ``` ## CLI使用 ```bash nwbuild [options] [path] Options: -p, --platforms 编译的平台,可选参数win32, win64, osx32, osx64, linux32, linux64 -v, --version 版本号,如0.8.1 -r, --run 为当前的平台执行编译,生成对应的exe可执行文件 -o, --buildDir 编译文件目录 -f, --forceDownload 强制下载NW.js --cacheDir 缓存目录 --quiet 日志不可用 ``` # Electron桌面开发 ```bash mkdir my-electron-app && cd my-electron-app npm init ``` ```json { "name": "my-electron-app", "version": "1.0.0", "description": "Hello World!", "main": "main.js", "author": "Jane Doe", "license": "MIT" } ``` ```bash npm install --save-dev electron ```