Inno Setup 代码签名不适用于所有文件。如何解决这个问题?

问题描述 投票:0回答:2

我们使用名为 Inno Setup 的安装创建工具来获取最终的安装文件。 在那里我们使用signtool.exe来签署我们应用程序的所有文件。 我们将必要的详细信息放入这些框中 enter image description here

我们使用名为 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 文件中。

enter image description here

如何使用 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% )
dll inno-setup code-signing
2个回答
3
投票

您仅在 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
总的来说是大不。我把它放在我的答案中,以免其他人无意中复制它。


0
投票

这是一个很好的问题,但是也许您需要考虑签署不属于您的 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 &quot;$(TargetPath)&quot;" Condition="$(Configuration) == 'Release'" />
        <Exec Command="signtool.exe sign /i Sectigo /t http://timestamp.sectigo.com /fd SHA384 &quot;$(TargetDir)IDPS.exe&quot;" Condition="$(Configuration) == 'Release'" />
        <Exec Command="signtool.exe sign /i Sectigo /fd SHA384 &quot;$(TargetPath)&quot;" Condition="$(Configuration) != 'Release'" />
        <Exec Command="signtool.exe sign /i Sectigo /fd SHA384 &quot;$(TargetDir)IDPS.exe&quot;" Condition="$(Configuration) != 'Release'" />
    </Target>
© www.soinside.com 2019 - 2024. All rights reserved.