一、打包命令
以下是 Uart Assistant 项目的三种打包方式:
1. Package(基础版)
pyinstaller -F -w -i cs_256x256.ico --name UartAssistant --add-data "cs_256x256.ico;." uart_assistant_qt.py2. Package2(增强版)
pyinstaller -F -w -i cs_256x256.ico --name UartAssistant --add-data "cs_256x256.ico;." uart_assistant_qt_plus.py3. Plus(带版本信息)
pyinstaller -F -w -i cs_256x256.ico --name UartAssistant --add-data "cs_256x256.ico;." --version-file version_info.txt uart_assistant_qt_plus.py二、数字签名概述
给 PyInstaller 打包后的 Windows 可执行文件(.exe)添加数字签名,核心是通过微软官方的signtool.exe工具完成。签名后可避免系统报「未知发布者」警告,验证文件完整性。以下是完整步骤(含「测试用自签名证书」和「商用 CA 证书」两种场景):
三、核心前提
1. 安装签名工具signtool.exe
signtool是 Windows SDK 自带工具,需先安装:
- 方式 1:安装 Visual Studio 构建工具(免费),安装时勾选「Windows 10/11 SDK」和「C++ 生成工具」;
- 方式 2:单独安装 Windows SDK(仅选「Windows SDK 签名工具」组件)。
安装后找到signtool.exe路径(示例路径):
# Windows 11 SDK 示例路径 C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe建议将该路径添加到系统环境变量PATH,方便全局调用。
2. 获取数字证书
| 证书类型 | 用途 | 获取方式 |
|---|---|---|
| 自签名证书 | 测试 / 内部使用 | 通过PowerShell命令生成(免费,系统会提示「未信任发布者」,但可验证完整性) |
| 商用 CA 证书 | 生产 / 公开发布 | 向 CA 机构购买(如 DigiCert、VeriSign、GlobalSign,费用年付,系统信任) |
四、步骤 1:生成自签名证书(测试用)
打开管理员权限的 PowerShell,执行以下命令生成自签名证书(有效期 1 年):
# 生成自签名证书并导出为 PFX 文件(含私钥) New-SelfSignedCertificate ` -Subject "CN=Ziqi Liao, O=Southern University of Science and Technology, C=CN" ` # 主题:CN=姓名/域名,O=组织,C=国家 -CertStoreLocation "Cert:\CurrentUser\My" ` -Type CodeSigningCert ` # 类型:代码签名证书 -KeyUsage DigitalSignature ` -KeyAlgorithm RSA ` -KeyLength 2048 ` -NotAfter (Get-Date).AddYears(1) ` # 有效期1年 -FriendlyName "UartAssistant Code Sign" ` -HashAlgorithm SHA256 | Export-PfxCertificate ` -FilePath "D:\project\uart_assistant\UartSignCert.pfx" ` # 导出路径 -Password (ConvertTo-SecureString "123456" -AsPlainText -Force) # 证书密码(自定义)执行后会在指定路径生成UartSignCert.pfx证书文件。
五、步骤 2:给 EXE 添加数字签名
方式 1:手动签名(单次执行)
打开管理员权限的命令行 / PowerShell,进入dist目录(exe 所在路径),执行签名命令:
# 基础签名(自签名证书) signtool sign ` /f "D:\project\uart_assistant\UartSignCert.pfx" ` # 证书文件路径 /p "123456" ` # 证书密码 /fd SHA256 ` # 签名算法(必须 SHA256,Win10+ 要求) /t "http://timestamp.digicert.com" ` # 时间戳服务器(避免证书过期后签名失效) "D:\project\uart_assistant\dist\UartAssistant.exe" # 待签名的 exe 路径# 核心修正:用 & 调用带空格的 exe 路径,参数紧跟无多余空格 & "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /f "D:\project\uart_assistant\UartSignCert.pfx" /p "123456" /fd SHA256 /t "http://timestamp.digicert.com" "D:\project\uart_assistant\dist\UartAssistant.exe"方式 2:商用 CA 证书签名(生产环境)
若有 CA 颁发的证书(通常是.pfx或.p12文件),命令仅需替换证书路径 / 密码:
signtool sign ` /f "你的商用证书.pfx" ` /p "商用证书密码" ` /fd SHA256 ` /t "http://timestamp.digicert.com" ` # 商用时间戳服务器(可选:Verisign https://timestamp.verisign.com/scripts/timstamp.dll) "UartAssistant.exe"六、步骤 3:验证签名是否成功
方式 1:命令行验证
signtool verify /pa "D:\project\uart_assistant\dist\UartAssistant.exe"若输出Successfully verified,说明签名成功;若提示「签名有效但证书不受信任」(自签名证书正常现象)。
方式 2:图形化验证
右键UartAssistant.exe→「属性」→「数字签名」:
- 能看到签名列表(主题 / 时间戳)→ 签名成功;
- 点击「详细信息」→「查看证书」可查看证书信息。