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

使用Mono编译Signtool.exe及运行时遇错,寻求解决方案

问题分析与解决方法

1. Wine运行signtool.exe报错(0x80090001)

错误Store::ImportCertObject() failed是Wine对Windows CryptoAPI的模拟缺陷导致,直接通过/f参数加载PFX证书时,Wine无法正确处理证书导入流程。

解决步骤:

  • 先将PFX证书导入Wine的系统证书存储:
    1. 执行wine certmgr.msc打开Wine证书管理器
    2. 定位到「个人」存储区,右键导入你的PFX证书,输入证书密码完成导入
    3. 修改signtool命令,通过证书存储和名称指定证书,不再直接加载PFX文件:
    xvfb-run wine signtool.exe sign /debug /s MY /n "你的证书显示名称" /fd SHA256 [文件路径]
    
  • 确保Wine版本为8.x及以上,老版本的CryptoAPI兼容问题更严重,建议升级到最新稳定版。

2. Mono无法运行signtool.exe

微软官方的signtool.exe是原生Windows PE程序,并非.NET CIL程序集,而Mono仅支持运行.NET编译的CIL代码,因此直接用Mono执行必然报错,此路径不可行。

3. 编译.NET版SignTool报错(CreateManifestResourceNames目标不存在)

你使用的Mono msbuild不支持.NET SDK内置的项目目标(CreateManifestResourceNames是官方.NET SDK的核心目标之一),必须用微软官方的.NET SDK编译该项目。

解决步骤:

  • 安装官方.NET SDK(推荐.NET 7或8版本),替代Mono的msbuild工具
  • 使用dotnet build命令编译,而非Mono的msbuild:
    dotnet build Microsoft.DotNetSignTool.csproj /restore
    
  • 注意:编译后的跨平台SignTool可能不支持Office VBA宏签名(VBA签名依赖Windows特定的Authenticode扩展),需先测试验证。

Office VBA宏签名的可靠替代方案

由于VBA宏签名对微软Authenticode格式的依赖极强,跨平台工具兼容性差,以下是最稳定的两种方案:

  • Windows虚拟机:在Linux环境下运行Windows虚拟机,直接使用官方signtool完成签名,这是兼容性最好的方案
  • 完善Wine环境:使用64位Wine,通过winetricks crypt32安装完整的加密组件,重新导入证书后再尝试签名操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:18:42