Inno Setup 卸载程序 VersionInfo

3

我使用Inno Setup来制作安装程序。我在unins000.exe中遇到了一个版本信息的问题。为了填写安装程序中的版本信息,我使用了指令AppPublisherAppCopyright等。 但是这并不影响卸载程序unins000.exe的版本信息。

谷歌和帮助文档都没有关于这个问题的解决方案。我查看了Inno Setup的源代码,并发现只有针对安装程序文件才会添加版本信息:

        { Update version info }
        AddStatus(SCompilerStatusUpdatingVersionInfo);
        UpdateVersionInfo(ExeFile, VersionInfoVersion, VersionInfoProductVersion, VersionInfoCompany,
          VersionInfoDescription, VersionInfoTextVersion,
          VersionInfoCopyright, VersionInfoProductName, VersionInfoProductTextVersion);

        { For some reason, on Win95 the date/time of the EXE sometimes
          doesn't get updated after it's been written to so it has to
          manually set it. (I don't get it!!) }
        UpdateTimeStamp(ExeFile.Handle);
      finally
        ExeFile.Free;
      end;
    end;

    { Sign }
    if SignTools.Count > 0 then begin
      AddStatus(SCompilerStatusSigningSetup);
      Sign(ExeFileName);
    end;
  except
    EmptyOutputDir(False);
    raise;
  end;

但我在卸载编译代码中找不到这些例程。

有人知道,是否可以将版本信息放置在 unins000.exe 中吗?

谢谢!

2个回答

1
Inno Setup不支持此功能。您需要在编译时自行修改版本信息。在链接到安装程序之前访问卸载程序可执行文件的唯一方法是滥用“回调”SignTool。设置给SignTool的命令实际上可以对可执行文件执行任何操作,而不仅仅是“签名”。但无论如何都必须“签名”它(Inno Setup在“工具”完成后明确检查了可执行文件是否已签名)。您可以通过将SignTool设置为批处理文件(或其他脚本)来实现这一点,在最后运行实际的signtool.exe之前,但在此之前,它将修改版本信息(例如使用Resource Hacker命令行)。

1
非常棒且非常简单的想法!谢谢!附言:我已经从Github源代码重新编译了ISCmplr.dll。Dll成功编译,但无法正常工作((现在我将尝试使用批处理文件重写VersionInfo并签署卸载程序。再次感谢您! - Dennosaur
这里有一个类似的问题,但没有答案:https://dev59.com/V0rSa4cB1Zd3GeqPZMVU 你能回答这个问题吗?或者我可以复制粘贴你的答案吗? - Eugene Mala
@EugeneMala 感谢您指出这一点。我已将该问题标记为此问题的重复。 - Martin Prikryl
好的,我明白了。我使用这种技术来更改二进制标志。而且它有效。可能测试中没有包含EXE文件头。 - Martin Prikryl

0

不幸的是,接受的解决方案无法工作,因为SignTool "回调" 无法被滥用。深入研究Inno Setup源代码后,我发现编译器在签署卸载可执行文件后使用了以下验证

  { Sanity check: Remove the signature (in memory) and verify that
    the signed file is identical byte-for-byte to the original }

我找到了一个快速解决问题的方法。Inno Setup使用Setup.e32文件作为uninst000.exe的模板。

由于Inno Setup是完全便携的 - 您可以为需要在卸载程序中具有自定义版本信息的每个项目维护独立的Inno Setup二进制文件夹副本(默认为%ProgramFiles%\Inno Setup 5\)。

您必须在每个Inno Setup二进制文件夹副本中修改Setup.e32文件的版本信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接