Microsoft SmartScreen - 使用 Inno Setup 安装程序暂停?

9 windows inno-setup code-signing smartscreen

我总是使用 Inno Setup 进行打包和发布。用户使用链接下载应用程序,例如:https : //oursite.com/codesigned/mysetup.exe

直到现在,它一直有效。但最近我必须更新我的代码签名证书,因为它已过期。更新后我遇到了 SmartScreen 问题,每个用户都下载了应用程序并获得了以前没有的 Smartscreen。

在此处输入图片说明

我已经使用signtool.exe verify /pa innosetup-made-myexe.exe并显示成功,我也使用 进行了验证Windows Application Certification Kit,表明它已通过,但带有警告,所有这些警告主要由 Inno Setup 生成。

在此处输入图片说明 在此处输入图片说明

在这里你可以找到输出,它在 Inno Setup exes 上显示警告:

https://docs.google.com/document/d/11frW_GxI0xSVcrAXh4_rqcKBQSaermAlpYKj4xzQi4o/pub

我该如何解决这个问题?

(仍然不确定它的标准代码签名与 EV 代码签名问题?我已经使用标准代码签名几年了,它总是有效。我可以升级到 EV 代码签名,但我如何确保它不是 Inno Setup 编译器问题?如您所见,警告已显示在上面 Inno Setup 的 URL 中)

为了验证它是否是 Inno Setup 或代码签名问题(参见/sf/answers/2034730981/),我做了以下工作:

  1. 我从微软下载了winqual.exe不需要 Inno Setup的文件调用。

  2. 我代码签名winqual.exe并上传到我的同一台服务器

  3. 我用 Internet Explorer 下载了相同的文件,它在不显示 SmartScreen 的情况下工作。

如果 Inno Setup 是导致此问题的主要原因,现在是否有意义?

Mar*_*ryl 3

如今,您必须使用 EV 代码签名证书。
请参阅将 Microsoft SmartScreen 信誉转移到更新的证书

以下是原始答案,它解决了问题的一些细节。


如果您认为问题是由于未签名的卸载程序造成的,请确保SignTool相应地设置 Inno Setup 项目的指令。并确保SignedUninstaller指令有其默认值yes

引用SignTool指令文档

指定用于对安装程序进行数字签名的签名工具的名称和参数(以及卸载,如果 SignedUninstaller 设置为yes)。当安装程序具有有效的数字签名时,用户在启动它时将不会看到“未识别的程序”警告。


如果要为卸载程序设置 NXCOMPAT 和 DYNAMICBASE 标志,您可以创建一个sign.bat同时调用signtool.exe和的批处理文件editbin.exe

@echo off
editbin.exe /NXCOMPAT /DYNAMICBASE %1
signtool.exe sign ... %1
Run Code Online (Sandbox Code Playgroud)

调用必须按此顺序进行,否则会editbin.exe破坏签名。

然后在指令中使用 thesign.bat代替。signtool.exeSignTool

虽然我真的认为这没有必要,也没有任何帮助。