简介:这份资源是面向Delphi 12.3开发者的TMS Software SmartSetup组件包,专为需要为Windows应用程序制作专业安装程序的开发者准备。SmartSetup以可视化方式替代手写安装脚本,支持安装向导设计、快捷方式与注册表项配置、32/64位系统兼容、多语言界面、皮肤主题、预安装与后安装脚本、压缩解压以及更新卸载等功能,适合中高级Delphi程序员在项目发布阶段使用。压缩包共321个文件,约1.51MB,以188个pas源码单元、19个dpk包文件、21个dproj工程、19个groupproj项目组及若干res资源、dfm窗体、dpr与bat脚本为主,另含yaml配置、md说明和dll依赖,结构完整便于二次开发与集成。目前已有51人学习下载。通过其中的源码、示例项目与安装模板,读者可快速掌握安装向导定制、脚本扩展与多语言部署思路,为Delphi应用构建高质量安装体验。
1. Delphi 12.3 下拿到 tmssoftwaresmartsetup-main.zip 之后:这套控件到底解决什么问题
如果你是从 GitHub 或某个资源站下载到tmssoftwaresmartsetup-main.zip,第一反应大概率是「这压缩包怎么用、里面是不是安装程序、Delphi 12.3 能不能直接吃」。先说结论:TMS Software 的 SmartSetup 本质是一个包管理与依赖分发工具,不是传统意义上双击setup.exe一路下一步的安装器。它把 TMS 自家几十个控件包(VCL、FMX、FNC 系列)的版本、依赖、编译顺序统一管理起来,你给它一个目标 IDE 版本,它负责把源码拉下来、按正确顺序编译、注册进 IDE 的包列表。
这件事在 Delphi 12.3 上尤其重要。Delphi 12.3 用的是新版编译器与运行时包结构,很多老控件包如果手工一个个Install Packages,会出现「先装的依赖没编译、后装的找不到单元」的连锁报错。SmartSetup 的价值就在于把「编译顺序」这件事从人脑里挪到工具里。适合谁:手上有一堆 TMS 控件、又不想每次升级 IDE 就重装一遍的 Delphi 开发者;以及第一次接触 TMS 生态、被dcu not found折磨过的人。
需要先厘清一点:tmssoftwaresmartsetup-main.zip这个命名里的-main通常意味着它是某个仓库的主分支快照,而不是官方发布的带版本号的安装包。这意味着你拿到的可能是源码形态的 SmartSetup 本体,需要先把它跑起来,再用它去拉真正的控件包。这个区别决定了后面所有操作路径,别一上来就找setup.exe,找不到是正常的。
2. 先搞清楚 SmartSetup 的工作模型:它凭什么能自动排编译顺序
2.1 它不是安装器,是「订阅 + 编译编排器」
传统控件安装是「我给你一个包,你编译它」。SmartSetup 是「我告诉你我要哪些包、目标 IDE 是哪个版本,你去把源码、依赖、编译参数凑齐」。它内部维护了一份清单,记录每个控件包依赖哪些基础包、需要哪些编译开关、在 VCL 和 FMX 下分别怎么编。你选Delphi 12.3 Win32和Delphi 12.3 Win64,它会分别处理,因为这两者的运行时包不通用。
理解这一点后,很多「玄学」就解释得通了:为什么 SmartSetup 跑完,IDE 里多出来一堆TMS*开头的包,而不是你选的那一个。因为它把依赖链上的包全注册了,这是设计如此,不是装多了。
2.2 目录结构与关键文件
解压tmssoftwaresmartsetup-main.zip后,典型结构大致是这样(不同快照会有差异,以你实际解压为准):
| 路径/文件 | 作用 |
|---|---|
TMSSmartSetup.exe或对应可执行 | 主程序入口,负责 UI 和调度 |
*.json/*.xml配置 | 记录可用产品、版本、下载源 |
Setup/Scripts目录 | 编译脚本、批处理模板 |
README/*.txt | 使用说明,务必先读 |
如果解压后没有可执行文件,只有源码(.dpr、.pas),那说明你拿到的是需要自己先编译的版本。这种情况在-main快照里很常见。
2.3 为什么必须先确认 IDE 版本再动手
SmartSetup 在编译时会读取注册表或环境变量定位 Delphi 12.3 的安装路径,拿到bds.exe、dcc32.exe、dcc64.exe的位置。如果它定位到的是旧版本 IDE,编译出来的包注册进 12.3 会直接报版本不匹配。所以第一步永远是确认它认对了 IDE。
# 在解压目录下先看有没有可执行入口 dir /b *.exe # 如果只有源码,找主工程文件 dir /b *.dpr *.groupproj上面两条命令是排查起点:有.exe就直接跑,只有.dpr/.groupproj就得先用 Delphi 12.3 打开编译。逻辑很简单——先确定你手里是「成品工具」还是「工具的半成品」,这决定了后面是配置还是先构建。
3. 在 Delphi 12.3 上把 SmartSetup 跑起来的最小路径
3.1 解压与入口确认
先把 zip 解到一个不含中文、不含空格的路径,比如D:\TMS\smartsetup。Delphi 的编译脚本对路径里的空格和中文容忍度很低,这是血泪经验,别图省事放桌面。
# 推荐用命令行解压,避免资源管理器解压丢文件 powershell -Command "Expand-Archive -Path 'tmssoftwaresmartsetup-main.zip' -DestinationPath 'D:\TMS\smartsetup' -Force"用 PowerShell 的Expand-Archive而不是右键「解压到当前文件夹」,是因为部分 zip 里带长路径或特殊字符文件,资源管理器解压可能静默跳过。-Force表示覆盖已存在文件,重复解压时省事。
3.2 如果拿到的是源码:先编译出可执行
打开*.groupproj,在 Delphi 12.3 里 Build 整个工程组。注意编译目标平台要选 Win32 还是 Win64,取决于 SmartSetup 本体是 32 位还是 64 位程序。编译报错时优先看是不是缺了某个第三方库(比如 JSON 解析库),这类依赖通常在 README 里会写。
// 编译前确认工程选项里的输出路径 // Project > Options > Delphi Compiler > Output directory // 建议设为 .\bin,避免和源码混在一起这段不是代码逻辑,是工程配置提醒:输出目录单独放,后面找可执行文件、清理重编都方便。参数上,Output directory设成相对路径.\bin,Unit output directory设成.\dcu,两者分开,避免 dcu 污染源码目录。
3.3 首次运行与 IDE 识别
双击运行后,SmartSetup 一般会让你选目标 IDE。如果列表里没有 Delphi 12.3,说明它没扫到注册表项。常见原因是 Delphi 12.3 装在了非默认路径,或者注册表被清理工具动过。这时手动指定bds.exe路径即可。
# 手动确认 Delphi 12.3 的安装位置 reg query "HKLM\SOFTWARE\Embarcadero\BDS\23.0" /v RootDir23.0是 Delphi 12.x 对应的 BDS 版本号段(12.0 起为 23.0)。如果这条查不到,就换成HKCU再查一遍,或者直接在文件系统里找bds.exe。拿到RootDir后,在 SmartSetup 里手动指向它。
4. 用 SmartSetup 拉取并安装 TMS 控件包:参数怎么设
4.1 选择产品与目标平台
进入主界面后,你会看到一长串产品列表(FNC、VCL UI Pack、FMX 系列等)。这里的关键决策是:只选你真正要用的。全选会导致编译时间成倍增长,而且某些包之间可能有版本约束,全选反而容易冲突。
平台选择上,Win32 和 Win64 要分开勾。如果你只做 32 位程序,就别勾 64 位,省一半编译时间。Android/iOS 目标需要额外配置 SDK,第一次跑建议先不碰。
4.2 编译输出与包注册
SmartSetup 编译完成后,会把生成的.bpl注册进 IDE。注册信息写在注册表的Known Packages下。如果编译成功但 IDE 里看不到控件,八成是注册这一步没走通。
# 查看已注册的包 reg query "HKCU\SOFTWARE\Embarcadero\BDS\23.0\Known Packages"这条命令列出当前 IDE 认识的所有包路径。如果 TMS 的.bpl不在里面,说明注册失败。解决方式是回到 SmartSetup 里重新执行「Install」步骤,或者手动在 IDE 的Component > Install Packages里 Add 那个 bpl。
4.3 关键参数:编译开关与搜索路径
SmartSetup 在编译时会往工程里注入搜索路径(Library Path)。这些路径指向 TMS 源码目录。如果你后续手工建工程发现找不到 TMS 单元,就是 Library Path 没带上。
| 参数 | 建议值 | 说明 |
|---|---|---|
| 目标平台 | Win32 / Win64 按需 | 别全勾 |
| 编译模式 | Release | Debug 会拖慢首次编译 |
| 搜索路径注入 | 自动 | 别手动改,改了容易和 SmartSetup 打架 |
| 输出目录 | 独立于源码 | 便于清理 |
提示:首次安装完成后,先在 IDE 里新建一个空 VCL 工程,拖一个 TMS 控件上去编译一次。这一步能验证「包注册 + 搜索路径」是否真的通了,比直接上项目稳妥。
5. 避坑与排查:tmssoftwaresmartsetup 在 12.3 上最容易翻车的 5 个点
5.1 现象:编译报dcu not found,但包明明装了
原因:搜索路径没注入到当前工程,或者注入的是旧版本 IDE 的路径。SmartSetup 注入的是全局 Library Path,但如果你工程里用了{$LIBRARYPATH}之类的覆盖,就会失效。
解决:打开Project > Options > Delphi Compiler > Search Path,确认 TMS 源码路径在列表里。不在就手动加,或者重新跑一遍 SmartSetup 的路径注入步骤。
5.2 现象:解压 zip 时报「invalid zip archive: could not find eocd」
原因:下载不完整,或者用了不支持 zip64 的老解压工具。tmssoftwaresmartsetup-main.zip如果体积较大,可能用了 zip64 格式。
解决:换 7-Zip 或新版 WinRAR 解压,别用系统自带的老接口。重新下载一遍确保文件完整。
5.3 现象:SmartSetup 认到了 Delphi 但编译到一半卡死
原因:杀毒软件实时扫描在编译大量.pas时拖慢 IO,或者某个包的编译脚本在等一个不存在的环境变量。
解决:把 TMS 源码目录和输出目录加入杀毒白名单。然后看 SmartSetup 的日志(一般在Logs目录),定位卡在哪个包,单独处理。
5.4 现象:IDE 里控件面板有 TMS 页签,但拖控件报「class not registered」
原因:.bpl注册了但对应的.dcp/.dcu没编出来,或者 32/64 位混了。你在 64 位工程里拖了一个只编了 32 位的包。
解决:确认目标平台和已编译平台一致。在 SmartSetup 里把 Win64 也勾上重编一遍。
5.5 现象:升级 Delphi 12.3 小版本后,TMS 控件全部失效
原因:Delphi 小版本升级会改 BDS 版本号段或运行时包结构,旧编译产物不兼容。
解决:不用慌,重跑一遍 SmartSetup,让它按新 IDE 重新编译注册。这也是用 SmartSetup 而不是手工装的最大好处——重装成本低。
6. 进阶:把 SmartSetup 纳入团队构建流程的一个具体做法
单人开发时,SmartSetup 点几下就完事。但团队里每个人 IDE 环境不同,靠「你装一遍我装一遍」迟早出乱子。我一般会把 SmartSetup 的命令行模式接进构建脚本,让新机器一条命令拉起环境。
SmartSetup 通常支持静默/命令行参数(具体参数名以你手上版本的 README 为准,不同快照有差异)。思路是:把「选哪些产品、目标平台、IDE 路径」写成一个配置文件,构建脚本读它,调 SmartSetup 执行,最后校验注册表里包是否齐全。
# 伪代码示意:先跑 SmartSetup 静默安装,再校验 TMSmartSetup.exe --config team-tms.json --silent reg query "HKCU\SOFTWARE\Embarcadero\BDS\23.0\Known Packages" | findstr /i "TMS"第一行是调用(参数名按实际改),第二行是校验:如果findstr没输出,说明注册没成功,脚本就该报错退出,而不是让开发者带着半残环境去写代码。这个校验步骤是我踩过坑之后加的——曾经有台机器 SmartSetup 显示成功,实际注册表没写进去,结果全组排查了一下午。
配置文件的字段建议至少包含:ideVersion、platforms、products、outputDir。products用数组,别用逗号分隔字符串,解析起来省事。outputDir指向一个团队共享盘或每台机器本地固定路径,别用相对路径,因为构建脚本的工作目录不一定在哪。
验证方法上,除了查注册表,还可以让脚本编译一个「探针工程」——一个引用了 TMS 核心单元的极小.dpr,能编过就说明环境 OK。这比查注册表更接近真实使用场景,因为注册表对了但搜索路径错了的情况也发生过。
最后说个习惯:每次升级 Delphi 或 TMS 版本,先在一台机器上跑通全流程,把配置文件更新好,再推给团队。别让所有人同时踩同一个坑。这套东西的价值不在于省那几次点击,而在于把「环境」变成可复现、可校验的东西。希望帮到你。
本文还有配套的精品资源,点击获取