ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Cocos Creator打包Windows exe与安装包制作全攻略

Cocos Creator打包Windows exe与安装包制作全攻略 1. 从Cocos Creator到Windows桌面端为什么值得折腾很多做Cocos Creator的朋友项目跑在浏览器或者模拟器里挺顺畅一旦被问到“能不能给我一个双击就能打开的exe”就开始犯难。尤其是做工具类、展示类、教育类小应用客户或者老板往往不想要一个网址也不想要一个需要装模拟器的apk他们要的就是一个Windows上双击即用的安装包。这个需求听起来简单但真正走一遍会发现里面有不少门道。我自己第一次做这件事的时候以为Cocos Creator的构建面板里点一下“Windows”就能出exe结果发现构建出来的是一个文件夹里面有一堆资源文件和可执行程序但直接发给别人对方打开要么白屏要么缺dll要么被杀毒软件拦截。后来才明白Cocos Creator构建出来的Windows产物本质上是一个基于原生渲染的应用程序它需要依赖一些运行库而且默认的输出结构并不适合直接分发。真正要交付给最终用户需要做两件事第一把构建产物整理成一个干净的、可独立运行的exe第二把这个exe做成一个安装包让用户可以像安装普通软件一样完成安装有开始菜单快捷方式有卸载入口。这里就引出了几个核心技术点Cocos Creator的原生构建流程、Windows平台下的可执行文件组织方式、以及安装包制作工具的选择。热搜词里出现了Electron这其实是一条完全不同的技术路线——用Electron把Web内容包装成桌面应用。两条路线各有优劣我会在后面的章节里详细对比。另外热搜词里还有“graalvm打包成exe”“python转exe文件”“bat to exe converter”这些说明很多人都在面临“把某个东西变成Windows可执行程序”的通用问题底层逻辑是相通的。这篇文章适合谁看如果你是Cocos Creator开发者正在为项目交付发愁想搞清楚从构建到安装包的完整链路那这篇内容就是为你准备的。如果你是用其他技术栈做桌面端想了解Windows安装包制作的一般方法也能从中找到可复用的思路。我会尽量把每一步的操作意图、参数选择理由、以及我踩过的坑都讲清楚让你少走弯路。2. 两条路线选型Cocos原生构建 vs Electron包装在动手之前必须先做一个关键决策到底是直接用Cocos Creator的原生Windows构建还是用Electron把Web版本包一层这个选择会直接影响后续所有工作。我两种方案都实际跑过下面把核心差异拆开讲。2.1 Cocos Creator原生Windows构建的适用场景Cocos Creator从3.x版本开始对原生平台的支持已经比较成熟。选择Windows作为构建平台后引擎会把游戏逻辑通过原生代码C执行渲染走OpenGL或DirectX性能上比WebView方案有明显优势。如果你的项目是动作类、渲染压力大、或者需要用到比较多的原生能力比如文件系统访问、多线程计算那原生构建是首选。原生构建的输出结构大致是这样的构建完成后你会得到一个build文件夹里面有一个windows子目录再里面包含可执行文件通常以项目名命名、资源文件夹assets、src等、以及一些动态链接库。这个结构本身是可以运行的但直接把这个文件夹压缩发给别人体验很差——对方需要找到那个exe而且如果文件夹里有中文路径或者缺少VC运行库就可能启动失败。原生构建的另一个特点是它依赖Visual Studio的编译工具链。也就是说你的开发机上必须装了对应版本的VS通常是VS2019或VS2022带C桌面开发工作负载Cocos Creator在构建时会调用MSBuild去编译原生代码。这一步如果环境没配好构建就会报错而且报错信息往往不太直观。我第一次遇到的时候卡在“找不到v143工具集”这个错误上后来才发现是VS安装时没有勾选“使用C的桌面开发”。2.2 Electron包装Web版本的利与弊Electron的思路完全不同。你先把Cocos Creator项目构建成Web Mobile或Web Desktop版本得到一堆HTML、JS、CSS和资源文件然后用Electron创建一个桌面壳把这个Web内容加载进去。最终打包出来的也是一个exe但本质上是Chromium在跑你的网页。这条路线的最大好处是环境依赖少。你不需要装Visual Studio不需要配C编译环境只要Node.js环境正常npm能装包就能走通。对于前端背景的开发者来说Electron的上手成本明显更低。而且Electron的打包工具electron-builder、electron-packager非常成熟生成安装包就是一条命令的事。但代价也很明显。第一包体积大。一个最简单的Electron应用空壳就要占100MB以上因为里面打包了整个Chromium和Node运行时。Cocos原生构建出来的exe通常只有几MB到几十MB差距是数量级的。第二性能有损耗。WebView渲染和原生渲染在复杂场景下差距明显尤其是粒子效果多、DrawCall高的场景Electron方案容易掉帧。第三内存占用高Chromium本身就是一个吃内存的大户。我个人的判断标准是这样的如果项目是轻量级的展示、工具、或者对包体积不敏感Electron方案省事如果项目是游戏、对性能和包体积有要求老老实实走Cocos原生构建。热搜词里“electron打包linux”“electron菜单”“electron模板项目”这些说明Electron生态确实活跃但不要因为热就选它要看项目实际需求。2.3 一张表看清两条路线的核心差异对比维度Cocos原生Windows构建Electron包装Web版本环境依赖需要VS C工具链需要Node.js环境输出体积较小几MB到几十MB较大100MB起步运行性能原生渲染性能好WebView渲染有损耗打包难度中等需处理依赖库较低工具链成熟安装包制作需额外工具如Inno Setupelectron-builder内置支持适合场景游戏、高性能应用工具、展示、轻量应用选型确定之后后面的步骤才有意义。我接下来的实操部分会以Cocos原生构建为主线因为这条路的坑更多、更需要经验分享同时在安装包制作环节会兼顾两种方案的通用做法。3. Cocos Creator原生构建的完整实操这一章是重头戏。我会从构建配置开始一步步走到得到一个可独立运行的exe把每个环节的关键点和容易出错的地方都标出来。3.1 构建前的环境检查与项目配置在Cocos Creator里点击构建之前有几件事必须先确认。第一确认你的Cocos Creator版本和Visual Studio版本的匹配关系。Cocos Creator 3.8.x通常需要VS2019或VS2022并且要安装“使用C的桌面开发”工作负载。你可以在VS Installer里检查如果没装补上就行。第二确认项目设置里的“原生”相关选项。在项目设置的原生构建选项中有一个“加密脚本”的开关如果开启构建出来的脚本是加密的调试会麻烦一些正式发布可以开开发阶段建议关掉。第三检查项目的分辨率适配。Windows平台下用户可能用各种分辨率的显示器如果你的设计分辨率是固定的构建后可能出现黑边或者拉伸。建议在项目设置里配置好适配策略比如Fit Height或Fit Width并且在场景里做好安全区处理。我遇到过一次构建出来的exe在2K显示器上画面只占左上角一小块就是因为适配没配好。第四确认资源路径没有使用中文或特殊字符。Cocos Creator对中文路径的支持在原生平台上一直不太稳定构建目录、项目目录都建议用纯英文路径。这个坑我踩过构建过程不报错但运行的时候资源加载失败排查了半天才发现是路径里有中文。3.2 构建面板参数详解与选择理由打开构建发布面板选择Windows平台会看到一系列参数。我逐个解释一下关键项。“发布路径”建议设为一个独立的、纯英文的目录不要放在项目目录里面避免构建产物和源码混在一起。“初始场景”选择你的启动场景通常是Loading场景或者Main场景。“主包压缩类型”有几种选项Default、Merge Depend、Subpackage等。对于Windows平台我一般选Default因为原生平台的资源加载机制和Web不同压缩策略的影响没那么大。“MD5 Cache”这个选项开启后资源文件名会带MD5哈希好处是避免缓存问题坏处是构建产物文件名变得很长而且如果你后续要做资源热更新需要额外处理。对于单机交付的Windows应用我建议关闭让文件名保持简洁。“调试模式”在开发阶段可以开启方便看日志正式发布一定要关掉否则会暴露源码信息而且性能也有影响。“Source Maps”同理正式发布关闭。还有一个容易被忽略的选项是“渲染后端”。Windows平台支持OpenGL和Vulkan如果你的目标用户机器比较老建议选OpenGL兼容性更好。Vulkan性能更好但对显卡驱动有要求。我一般默认用OpenGL除非项目明确需要Vulkan特性。3.3 构建过程与产物结构解析点击构建后Cocos Creator会先编译脚本然后调用原生编译工具链。这个过程可能持续几分钟到十几分钟取决于项目大小和机器性能。构建成功后打开输出目录你会看到类似这样的结构build/ windows/ YourProject.exe assets/ src/ jsb-adapter/ resources/ *.dll那个YourProject.exe就是主程序。但注意它不能单独运行必须和同目录下的资源文件夹、dll文件在一起。如果你只把exe拷走双击会报错。这就是为什么不能直接把exe发给别人。另外构建产物里通常会有一些调试用的文件比如.pdb文件程序数据库用于调试正式发布时可以删掉能减小体积。还有一些日志配置文件如果不需要可以清理。我建议在构建完成后先在本机双击运行一下确认功能正常。如果本机运行都有问题那打包成安装包也是白搭。运行的时候注意看控制台有没有报错Cocos Creator的原生程序默认会输出日志到文件位置通常在可执行文件同目录或者用户目录下。3.4 让exe独立运行依赖库与资源整理要让exe能够独立运行核心是保证它需要的所有依赖都在。Windows下常见的依赖包括VC运行库msvcp140.dll、vcruntime140.dll等、Cocos引擎相关的dll、以及项目自己的资源。VC运行库的问题有两种解决思路。一种是让用户自己安装VC Redistributable但这会增加用户的操作成本而且很多用户根本不知道这是什么。另一种是把需要的dll直接放到exe同目录下这样程序启动时会优先从当前目录加载。我推荐第二种把msvcp140.dll、vcruntime140.dll、concrt140.dll这几个常用的拷到输出目录。这些dll可以在VS安装目录下找到也可以从微软官方下载对应的Redistributable包安装后从系统目录拷贝。资源整理方面确保assets、src、resources这些文件夹和exe在同一层级。如果你在构建时改了资源路径要对应调整。另外如果项目里用了自定义的着色器或者原生插件对应的文件也要确认在输出目录里。整理完之后你可以把这个文件夹压缩发给别人测试。如果对方能正常运行说明依赖没问题。这一步是后续做安装包的基础基础不牢安装包做出来也是各种问题。4. 制作Windows安装包从文件夹到专业安装程序得到一个可运行的文件夹只是第一步真正的交付物是一个安装包。用户双击安装包一路下一步装完之后桌面有图标、开始菜单有入口、控制面板能卸载这才算完整。这一章讲安装包制作。4.1 安装包制作工具选型对比Windows下制作安装包的工具不少我主要用过三个Inno Setup、NSIS、以及Electron方案下的electron-builder。热搜词里出现了“fpm报错”fpm是一个跨平台的打包工具但在Windows安装包这个场景下它不是最主流的选择。Inno Setup是我最推荐的。它免费、开源、脚本语法清晰、生成的安装包体积小、支持自定义安装界面、支持静默安装、支持数字签名。它的脚本文件.iss是纯文本容易版本管理。缺点是界面相对朴素但可以通过自定义皮肤改善。NSIS也是老牌工具免费开源脚本更底层灵活性极高但学习曲线比Inno Setup陡。很多经典软件的安装包都是NSIS做的。如果你需要极致的定制化NSIS更合适。electron-builder是Electron生态的打包工具它内置了NSIS配置写在package.json里一条命令就能出安装包。如果你走的是Electron路线用它是顺理成章的。但如果你走Cocos原生路线用electron-builder就有点绕不如直接用Inno Setup。我下面的实操以Inno Setup为主因为它对Cocos原生构建的产物支持最直接。4.2 Inno Setup脚本编写与关键配置Inno Setup的核心是一个.iss脚本文件。我写一个针对Cocos项目的模板然后逐段解释。[Setup] AppName我的Cocos应用 AppVersion1.0.0 DefaultDirName{autopf}\MyCocosApp DefaultGroupName我的Cocos应用 OutputDiroutput OutputBaseFilenameMyCocosApp_Setup Compressionlzma2 SolidCompressionyes WizardStylemodern ArchitecturesInstallIn64BitModex64 UninstallDisplayIcon{app}\MyCocosApp.exe [Files] Source: build\windows\*; DestDir: {app}; Flags: recursesubdirs createallsubdirs [Icons] Name: {group}\我的Cocos应用; Filename: {app}\MyCocosApp.exe Name: {autodesktop}\我的Cocos应用; Filename: {app}\MyCocosApp.exe [Run] Filename: {app}\MyCocosApp.exe; Description: 启动应用; Flags: nowait postinstall skipifsilent[Setup]段是全局配置。AppName是应用名会显示在安装界面和卸载列表里。DefaultDirName是默认安装目录{autopf}会自动选择Program Files或Program Files (x86)。OutputBaseFilename是生成的安装包文件名。Compressionlzma2用高压缩比算法能显著减小安装包体积代价是打包时间稍长。ArchitecturesInstallIn64BitModex64指定64位安装模式现在大部分Windows都是64位这个设置没问题。[Files]段指定要打包的文件。Source指向构建产物目录DestDir是安装后的目标目录Flags: recursesubdirs createallsubdirs表示递归包含所有子目录。这里要注意Source路径末尾的\*表示包含目录下所有内容不要漏掉。[Icons]段创建快捷方式。{group}是开始菜单组{autodesktop}是桌面。Filename指向安装后的exe路径。[Run]段配置安装完成后是否启动应用。postinstall表示安装完成后显示一个勾选框skipifsilent表示静默安装时跳过。4.3 安装包体积优化与签名处理安装包体积是用户能直观感受到的。Cocos原生构建的产物本身不大但如果你把调试文件、日志文件都打进去体积就会膨胀。在打包前先清理构建目录删掉.pdb文件、删掉不需要的日志配置、删掉示例资源。我一般会保留一个“clean”脚本每次构建后自动清理。压缩算法方面Inno Setup支持lzma和lzma2lzma2压缩比更高但解压时需要更多内存。对于大多数应用lzma2是合适的。如果安装包超过500MB可以考虑分卷但一般Cocos项目不会这么大。数字签名是另一个重要话题。没有签名的安装包Windows SmartScreen会弹出警告用户看到“Windows已保护你的电脑”会犹豫。签名需要购买代码签名证书然后用signtool对安装包和exe进行签名。Inno Setup支持在编译时自动签名配置SignTool即可。如果暂时没有证书至少要在安装包里附上说明引导用户点击“更多信息”再“仍要运行”。4.4 安装后的运行验证与卸载测试安装包做出来一定要在干净的机器上测试。什么叫干净就是没有装过VS、没有装过Cocos Creator、没有装过各种运行库的机器。虚拟机是个好选择装一个纯净的Windows系统把安装包拷进去走一遍完整流程。测试要点包括安装过程是否顺畅、有没有报错、桌面和开始菜单快捷方式是否正常、双击能否启动、功能是否完整、卸载是否干净。卸载测试特别容易被忽略有些安装包卸载后残留文件、残留注册表项用户下次安装可能出问题。Inno Setup默认会生成卸载程序但你要确认它是否删除了所有安装的文件。可以在卸载后检查安装目录是否还存在。我遇到过一次安装包在开发机上测试一切正常到了用户机器上启动就闪退。排查后发现是用户机器缺少某个VC运行库的特定版本。后来我在安装包里加了一个检测逻辑如果检测到缺少运行库就提示用户安装或者直接把运行库打包进去自动安装。这个经验告诉我测试环境一定要“干净”不能想当然。5. 常见问题与排查技巧实录这一章整理我在整个流程中遇到过的典型问题以及排查思路。这些问题在官方文档里往往找不到都是实际踩出来的。5.1 构建阶段报错与解决问题一构建时报“找不到v143工具集”或“MSBuild不存在”。这是VS安装不完整导致的。打开VS Installer修改安装勾选“使用C的桌面开发”工作负载确保MSBuild和C编译工具被安装。如果已经装了还是报错检查Cocos Creator的首选项里原生构建的VS路径是否配置正确。问题二构建成功但运行白屏。白屏的原因很多最常见的是资源加载失败。检查构建日志里有没有资源拷贝的错误检查资源路径是否包含中文检查初始场景是否设置正确。还有一种可能是渲染后端不兼容尝试切换OpenGL和Vulkan。问题三构建过程卡在“编译原生代码”很久。第一次构建会比较慢因为要编译整个引擎。后续增量构建会快很多。如果每次都慢检查是否开启了“重新编译引擎”选项关掉它。5.2 运行阶段闪退与依赖缺失问题exe双击后闪退没有任何提示。这种问题最难排查因为看不到错误信息。解决办法是用命令行运行exe这样能看到标准输出和错误输出。打开cmdcd到exe目录输入exe文件名回车。如果报“缺少xxx.dll”那就把对应的dll补上。如果没有任何输出就退出可能是程序内部崩溃需要看日志文件。Cocos原生程序的日志通常在%USERPROFILE%\AppData\Local\你的项目名\下面或者exe同目录的log文件夹。找到日志后搜索“error”或“fail”关键字。问题提示“应用程序无法正常启动(0xc000007b)”。这个错误通常是32位和64位不匹配导致的。比如你的exe是64位的但依赖的某个dll是32位的。检查所有dll的位数是否一致。用Dependency Walker或者更现代的Dependencies工具可以查看dll依赖关系。5.3 安装包制作与分发问题问题安装包被杀毒软件误报。这是很常见的尤其是没有签名的安装包。解决办法第一尽量使用知名的打包工具Inno Setup、NSIS它们的特征被杀毒软件熟悉第二购买代码签名证书第三在安装包里避免使用敏感的操作比如修改注册表启动项、写入系统目录等。问题用户安装后找不到程序。检查快捷方式是否创建成功检查安装目录是否正确。有时候用户没有管理员权限安装到了用户目录下但快捷方式指向了错误的位置。在Inno Setup里可以用{userappdata}代替{autopf}避免权限问题。问题安装包体积异常大。检查是否把构建目录里的临时文件、缓存文件都打进去了。在Inno Setup的[Files]段里可以用Excludes排除特定文件比如Excludes: *.pdb,*.log。5.4 常见问题速查表问题现象可能原因解决方向构建报工具集缺失VS安装不完整补装C桌面开发工作负载运行白屏资源路径错误/渲染后端不兼容检查路径、切换渲染后端exe闪退无提示缺少dll或程序崩溃命令行运行看输出、查日志0xc000007b错误32/64位不匹配检查dll位数一致性安装包被杀毒误报无签名/敏感操作签名、换打包工具、减少敏感操作安装后找不到程序快捷方式创建失败检查Icons配置、权限设置6. 一些实操心得与后续扩展思路整个流程走下来我最深的体会是构建和打包本身不难难的是环境配置和问题排查。Cocos Creator的原生构建依赖VS工具链这一步卡住了很多人。我的建议是在项目早期就把构建环境配好不要等到要交付了才临时抱佛脚。每次引擎版本升级都重新验证一遍构建流程因为引擎升级有时会改变构建产物的结构。另一个心得是关于安装包的测试。一定要在虚拟机的干净系统里测试而且最好测试多个Windows版本比如Win10和Win11。不同版本的Windows对运行库的要求、对安装包的行为可能有差异。我遇到过在Win10上正常的安装包在Win11上因为权限问题装不上后来调整了安装目录才解决。后续如果要做自动更新可以在应用启动时检查远程版本号如果有新版本就下载新的安装包并静默安装。Inno Setup支持静默安装参数/SILENT或/VERYSILENT配合一个更新程序就能实现。不过自动更新涉及网络请求和文件替换要处理好权限和回滚复杂度不低建议项目稳定后再考虑。如果项目需要支持多语言安装界面Inno Setup也支持在[Languages]段里配置即可。对于面向海外用户的应用英文安装界面是基本要求。最后分享一个小技巧在Inno Setup脚本里可以用[Code]段写Pascal脚本实现更复杂的逻辑比如安装前检测是否已安装旧版本、检测系统版本、检测磁盘空间等。这些逻辑能让安装包更智能减少用户的操作困惑。我一般会加一个检测如果发现已安装同版本就提示用户是否覆盖安装避免重复安装导致文件冲突。
返回列表