我们使用名为 Inno Setup 的安装创建工具来获取最终的安装文件。 在那里我们使用signtool.exe来签署我们应用程序的所有文件。 我们将必要的详细信息放入这些框中
我们使用名为 DMCC_Microsoft_Key.pfx 的证书 但是在创建安装程序之后以及当我们安装安装程序时,只有 application.exe 文件显示数字签名,而其他文件则不显示。 这是signtool中的脚本
"c:\{path}\signtol.exe" sign /f "{Certificate path}\key.pfx" /tr "http://timestamp.digicert.com" /p "Password" $f
下面的数字签名选项卡仅显示在 .exe 文件中。
如何使用 Inno Setup 登录给定目录中的所有 DLL?
这是我的 iss 脚本
;#define APP_EXE_NAME "AsiaMX TY 6.exe"
[Setup]
SignTool=ASIAMX_signtool
[Files]
Source: "{#APP_EXE_NAME}"; DestDir: "{app}"; \
Flags: ignoreversion signonce; Permissions: everyone-full
Source: "*"; DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs createallsubdirs; \
Permissions: everyone-full
我看到了其他一些 StackOverflow 问题。另一位使用此答案回答了同类问题。我不知道该把这个放在哪里。 如何对每个 ocx、dll 和 exe 文件进行签名
尝试
@echo off FOR /f "tokens=*" %%G IN ('dir /s *.dll *.ocx *.exe') DO ( echo %%G set A= "%%G" signtool sign /f "C:\Certificates\FakeCertificate.pfx" %A% )
您仅在 signonce
条目处有
{#APP_EXE_NAME}
标志。不针对其他人。
因此,毫不奇怪,Inno Setup 仅签署
{#APP_EXE_NAME}
,而不签署其他文件。
由于
*
条目同时匹配可执行文件和不可执行文件,因此您必须将该条目拆分为两个。实际上,您的 {#APP_EXE_NAME}
条目也与 *
条目冲突。
这应该做:
[Files]
Source: "{#APP_EXE_NAME}"; DestDir: "{app}"; \
Flags: ignoreversion signonce
Source: "*.dll"; DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs createallsubdirs signonce
Source: "*"; Excludes: "{#APP_EXE_NAME},*.dll" DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs createallsubdirs
顺便说一句,
Permissions: everyone-full
总的来说是大不。我把它放在我的答案中,以免其他人无意中复制它。
这是一个很好的问题,但是也许您需要考虑签署不属于您的 dll 可能会导致防病毒软件将文件标记为可疑。在你声称它们是你的之前,你最好先确保它们都是你的;-)
我不知道 inno 中有任何方法可以做到这一点,我想你可以“破解它”并编写一个注入此功能的 pascal 方法。
[Setup]
AppVersion={code:SignAndGetVersion}
[Code]
function SignAndGetVersion(Param: String): String;
begin
{ some magic selecting your dll's and calling signtool.exe... }
Result := '1.2.3';
end;
但是...如果您已经调用了sign-tool 那么为什么要在inno setup 中调用呢?
也许是这样的bat文件:
for %%f in (X:\InnoSetup_source\*.dll) do "c:\{path}\signtol.exe" sign /f "{Certificate path}\key.pfx" /tr "http://timestamp.digicert.com" /p "Password" "%%f"
或在您的后期构建中包含说明。我愿意
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="signtool.exe sign /i Sectigo /t http://timestamp.sectigo.com /fd SHA384 "$(TargetPath)"" Condition="$(Configuration) == 'Release'" />
<Exec Command="signtool.exe sign /i Sectigo /t http://timestamp.sectigo.com /fd SHA384 "$(TargetDir)IDPS.exe"" Condition="$(Configuration) == 'Release'" />
<Exec Command="signtool.exe sign /i Sectigo /fd SHA384 "$(TargetPath)"" Condition="$(Configuration) != 'Release'" />
<Exec Command="signtool.exe sign /i Sectigo /fd SHA384 "$(TargetDir)IDPS.exe"" Condition="$(Configuration) != 'Release'" />
</Target>