You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对WinUI 3应用(打包/未打包)进行代码签名?

WinUI 3 未打包应用本地C盘部署代码签名指南

核心结论

不用把未打包应用转为打包模式,直接给主EXE和关键依赖DLL做代码签名就能满足安全团队要求。另外,项目属性里的「为输出程序集签名以赋予强名称」是.NET程序集的强名称签名,和安全团队要求的代码签名(Authenticode签名)不是一回事,这个选项不用开,除非你的代码本身有强名称依赖需求。

准备工作

  • 公司提供的PFX格式代码签名证书(保管好证书密码)
  • 确保Visual Studio 2022已安装「Windows SDK」组件(signtool工具随SDK默认安装)

具体签名步骤

1. 定位signtool工具路径

打开VS的「开发者命令提示符」(开始菜单搜Visual Studio Developer Command Prompt),直接输入signtool能运行就说明路径已配置;如果不行,手动找路径,一般格式为:
C:\Program Files (x86)\Windows Kits\10\bin\<SDK版本号>\x64\signtool.exe
(例如常见版本号10.0.22621.0)

2. 签名主EXE文件

在命令提示符中切换到应用的Release输出目录(比如bin\Release\net8.0-windows10.0.19041.0\win-x64),执行以下命令:

signtool sign /f "你的证书完整路径.pfx" /p "证书密码" /t http://timestamp.digicert.com /v "你的主程序.exe"

参数说明:

  • /f:指定PFX证书文件路径
  • /p:证书的访问密码
  • /t:指定时间戳服务器(必须添加,避免证书过期后签名失效)
  • /v:显示详细签名过程,便于排查问题

3. 签名关键依赖DLL

无需给所有NuGet DLL签名:

  • 微软官方的WinUI3、.NET相关DLL(如Microsoft.UI.Xaml.dll)已有微软官方签名,不用重复签名
  • 团队自研DLL、第三方未签名DLL需要签名,命令格式和签EXE一致,替换文件名即可:
signtool sign /f "你的证书完整路径.pfx" /p "证书密码" /t http://timestamp.digicert.com /v "自定义依赖.dll"

4. 验证签名有效性

签名完成后,用以下命令验证:

signtool verify /pa /v "已签名的文件.exe"

输出中显示「签名有效」即为成功。

可选:集成到VS构建流程(自动签名)

避免手动签名的繁琐,可将签名步骤加入项目构建事件:

  1. 打开WinUI3项目属性 → 「生成事件」→ 「后期生成事件命令行」
  2. 输入类似命令(替换为你的实际路径和信息):
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" sign /f "$(SolutionDir)公司证书.pfx" /p "证书密码" /t http://timestamp.digicert.com /v "$(TargetPath)"

这样每次Release构建后会自动给主EXE签名,DLL可单独添加命令或编写批处理脚本批量处理。

部署注意事项

  • 部署时将已签名的EXE、DLL复制到C:\CompanyApplications文件夹,确保该文件夹权限符合公司要求(比如普通用户只读)
  • 更新应用时,先替换已签名的新文件,再同步更新桌面快捷方式(若有版本变更)

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:45:01