Catalog · How the catalog works
AutoUpgraderPro_v5.3
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
AutoUpgraderPro v5.3
AutoUpgraderPro v5.3 是基于原 AutoUpgrader Pro 源码整理和增强的 Delphi/VCL 自动更新组件。此版本尽量保持原组件 API 兼容,同时补强 HTTPS、安全校验、诊断信息和外部 updater 的可靠性。
支持环境
- 已在 Delphi / RAD Studio 10.3 Rio 下编译测试。
- 已测试 Win32 VCL 包:
Sources/AutoUpgraderProXE10Rio.dpk。 - 下载层仍基于 WinInet,因此网络行为与 Windows Internet 选项、IE、SChannel 证书/TLS 环境相关。
v5.3 主要更新
安全增强
- 默认要求更新清单和更新文件使用 HTTPS。
- 支持每个更新文件的 SHA256 哈希校验。
- 默认限制更新目标路径,避免远程清单写入任意目录。
- 新增
LastSecurityError和OnSecurityError,用于显示安全拦截原因。 - 新增 WinInet 底层错误诊断属性,便于定位 TLS、证书、代理、认证问题。
- 修复语言资源 ID 与 DevExpress 冲突导致的
&Multiple Records / Skip Empty Views错误提示。
新安全 Updater
- 用新的可维护外部 updater 替换旧的内嵌 updater 资源。
- 新 updater 源码:
Sources/auSecureUpdater.dpr。 - 新 updater 资源:
Sources/auSecureUpdater.res。 - 组件现在加载资源
AUSECUPG,不再使用旧的AUUPG。 - updater 会等待主程序文件可写,应用
.uTMP临时文件,并重新启动主程序。
回滚能力
- 新增
RollbackEnabled,默认True。 - 新增
BackupExtension,默认.auBackup。 - 新增
RestoreBackupFiles和DeleteBackupFiles。 - 替换前会备份已有目标文件。
- 替换失败时 updater 会尝试恢复备份文件。
兼容性修复
- 支持
#url=https://.../MyApp.exe这种不指定本地目标文件名的写法,并会自动推导为当前程序目录下的同名文件。 - 修复更新完成后文件被设置为隐藏属性的问题。完成文件现在只设置为
Archive。 - 修复下载文件日期被设置成 1601 年的问题。
- 修复主机不可达提示固定显示
http://...的问题,现在显示真实请求 URL。 - 修复 updater 启动命令行和路径引用,路径会正确加引号。
新增属性和诊断信息
安全相关
AutoUpgraderPro1.RequireHTTPS := True;
AutoUpgraderPro1.AllowInsecureHTTP := False;
AutoUpgraderPro1.RequireFileHash := True;
AutoUpgraderPro1.RestrictTargetPaths := True;
AutoUpgraderPro1.RollbackEnabled := True;
AutoUpgraderPro1.BackupExtension := '.auBackup';常用只读诊断属性:
AutoUpgraderPro1.LastSecurityError;
AutoUpgraderPro1.LastRequestURL;
AutoUpgraderPro1.LastRedirectURL;
AutoUpgraderPro1.LastHTTPStatusCode;
AutoUpgraderPro1.LastInternetErrorCode;
AutoUpgraderPro1.LastInternetErrorMessage;失败后可临时显示:
ShowMessage(
'URL: ' + AutoUpgraderPro1.LastRequestURL + sLineBreak +
'Redirect: ' + AutoUpgraderPro1.LastRedirectURL + sLineBreak +
'Status: ' + IntToStr(AutoUpgraderPro1.LastHTTPStatusCode) + sLineBreak +
'InternetError: ' + IntToStr(AutoUpgraderPro1.LastInternetErrorCode) + sLineBreak +
'InternetMessage: ' + AutoUpgraderPro1.LastInternetErrorMessage + sLineBreak +
'SecurityError: ' + AutoUpgraderPro1.LastSecurityError
);HTTP Basic 认证
不要把真实 HTTP 用户名和密码写入 DFM 属性。建议在运行时从加密配置、数据库或其他安全来源读取后赋值:
AutoUpgraderPro1.HTTPUsername := httpUser;
AutoUpgraderPro1.HTTPPassword := httpPassword;v5.3 会在请求头中主动发送 Basic Authorization,减少不同电脑上 WinInet 认证重试行为不一致的问题。
更新清单格式
最简单写法:
#version=5.3.0
#date=05/27/2026
#url=https://your-domain.com/update/MyApp.exe推荐生产写法,显式指定目标文件并提供 SHA256:
#version=5.3.0
#date=05/27/2026
#url=https://your-domain.com/update/MyApp.exe=MyApp.exe
#sha256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef多个文件:
#version=5.3.0
#url0=https://your-domain.com/update/MyApp.exe=MyApp.exe
#sha2560=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
#url1=https://your-domain.com/update/MyDll.dll=MyDll.dll
#sha2561=abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789注意:如果 URL 没有写协议,例如 www.example.com/update/MyApp.exe,旧逻辑会自动补成 HTTP。v5.3 默认会拦截非 HTTPS 地址。
路径白名单和保存位置
CheckUpdate 下载更新文件时,默认不是下载到 Windows Temp 目录。
如果清单只写远程 URL:
#url=https://your-domain.com/update/MyApp.exe组件会下载到当前程序目录:
当前程序目录\MyApp.exe.uTMP如果清单写成:
#url=https://your-domain.com/update/MyApp.exe=MyApp.exe目标仍是:
当前程序目录\MyApp.exe.uTMPv5.3 默认只允许写入当前程序目录:
AutoUpgraderPro1.RestrictTargetPaths := True;如果目标路径不在白名单中,会提示:
Update target path is not allowed: ...更新插件目录或其他业务目录时,需要显式加入白名单:
AutoUpgraderPro1.AllowedInstallDirs.Clear;
AutoUpgraderPro1.AllowedInstallDirs.Add(ExtractFilePath(Application.ExeName));
AutoUpgraderPro1.AllowedInstallDirs.Add('D:\YourApp\Plugins\');测试时可以关闭路径限制:
AutoUpgraderPro1.RestrictTargetPaths := False;生产环境不建议关闭路径限制,也不建议在清单中使用 %temp%、%windows%、%system% 或任意绝对路径。
HTTPS、TLS 和证书吊销检查
组件底层使用 WinInet,因此 HTTPS 能否成功取决于客户端 Windows 的 SChannel、证书链、Internet 选项和网络环境。
常见 WinInet 错误:
12029 无法连接服务器,通常是网络、防火墙、代理问题。
12030 连接被中断,可能是 TLS 握手或服务器关闭连接。
12045 证书颁发机构不受信任。
12057 证书吊销检查失败。
12157 HTTPS 安全通道建立失败,常见于 TLS/cipher/证书问题。如果 IE 不能打开更新清单 URL,AutoUpgraderPro 通常也不能打开,因为两者都依赖 Windows/WinInet/SChannel。
服务器建议:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 223.5.5.5 8.8.8.8 valid=300s;
resolver_timeout 5s;如果使用 Let’s Encrypt ECDSA 证书,TLS 1.2 cipher 必须包含 ECDHE-ECDSA-...,否则 Windows/IE/WinInet 可能握手失败。
如果客户端报 12057,说明证书吊销检查失败。优先修客户端网络,让它能访问证书 OCSP/CRL 地址,例如 Let’s Encrypt 的:
http://e7.o.lencr.org/
http://r7.o.lencr.org/如果短期无法修复客户端网络,可作为应急兼容:
AutoUpgraderPro1.InternetOptions :=
AutoUpgraderPro1.InternetOptions + [ioIgnoreCertificateRevocationFailed];这个选项会降低证书校验强度,不建议长期默认开启。
DevExpress 资源冲突修复
旧版本 AutoUpgrader 的语言资源 ID 从 61000 开始。某些使用 DevExpress 的应用中,这段资源 ID 可能与 DevExpress 字符串冲突,导致本应显示 AutoUpgrader 错误时,却显示:
&Multiple Records
Skip Empty Viewsv5.3 已将 AutoUpgrader 语言资源移动到 45000 段。如果仍看到旧提示,请重新编译并安装新包,确认项目链接的是新的 .bpl / .dcu。
推荐使用示例
AutoUpgraderPro1.InfoFileURL := 'https://your-domain.com/updates/update.inf';
AutoUpgraderPro1.HTTPUsername := httpUser;
AutoUpgraderPro1.HTTPPassword := httpPassword;
AutoUpgraderPro1.RequireHTTPS := True;
AutoUpgraderPro1.RequireFileHash := True;
AutoUpgraderPro1.RestrictTargetPaths := True;
AutoUpgraderPro1.RollbackEnabled := True;
AutoUpgraderPro1.AllowedInstallDirs.Clear;
AutoUpgraderPro1.AllowedInstallDirs.Add(ExtractFilePath(Application.ExeName));
AutoUpgraderPro1.CheckUpdate(False);安全错误事件:
procedure TForm1.AutoUpgraderPro1SecurityError(Sender: TObject);
begin
ShowMessage(AutoUpgraderPro1.LastSecurityError);
end;仅内网临时测试时允许 HTTP:
AutoUpgraderPro1.RequireHTTPS := False;
AutoUpgraderPro1.AllowInsecureHTTP := True;生产环境建议始终保持 HTTPS,并为每个更新文件提供 SHA256。
编译方法
使用 Delphi 10.3 Rio 编译组件包:
& "C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\DCC32.EXE" -B "-NSWinapi;System;System.Win;Vcl;Vcl.Imaging;Data;Data.Win;Datasnap;Xml;Xml.Win;Web" "Sources\AutoUpgraderProXE10Rio.dpk"编译 Demo:
& "C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\DCC32.EXE" -B "-NSWinapi;System;System.Win;Vcl;Vcl.Imaging;Data;Data.Win;Datasnap;Xml;Xml.Win;Web" "-U.;Sources" "Demo\AutoUpgraderProDemo.dpr"如果修改了 auSecureUpdater.dpr,需要重新编译 updater 并重新生成资源:
& "C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\DCC32.EXE" -B "-NSWinapi;System;System.Win;Vcl;Vcl.Imaging;Data;Data.Win;Datasnap;Xml;Xml.Win;Web" "Sources\auSecureUpdater.dpr"
& "C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\BRCC32.EXE" "Sources\auSecureUpdater.rc"文件说明
Sources/auAutoUpgrader.pas:主组件源码。Sources/auHTTP.pas:WinInet HTTP/HTTPS 下载组件。Sources/auUtils.pas:公共工具函数和队列列表。Sources/auSecureUpdater.dpr:新的外部 updater 源码。Sources/auSecureUpdater.res:内嵌 updater 资源。Demo/:Delphi 示例项目。Help/:原帮助文件。README_original.txt:原版说明文件。License.txt:原许可证文件。
注意事项
- SHA256 只能验证文件完整性,不能证明发布者身份。后续可继续增加清单签名验证。
- 不要把真实 HTTP 用户名、密码、服务器管理密码、数据库连接串写入 DFM、README 或公开仓库。
- 发布到 GitHub 前请检查 DFM、配置文件、README、项目文件中是否包含真实服务器地址、凭据、令牌或本地敏感路径。
- 如果应用使用复杂主窗体、Ribbon、PageControl 或嵌入式子窗体,建议接管
OnDoOwnCloseAppMethod,在更新前按业务规则关闭页面和数据库连接。

