Inno setup Inno安装卸载程序VersionInfo

Inno setup Inno安装卸载程序VersionInfo,inno-setup,Inno Setup,我为我的安装程序使用Inno安装程序。我对unins000.exe中的VersionInfo有问题。为了在安装程序中填充VersionInfo,我使用了指令AppPublisher,AppCopyright等,但它不影响安装卸载程序unins000.exe Google和help对这个问题一无所知。我调查了Inno安装源,发现仅为安装文件添加VersionInfo: {更新版本信息} AddStatus(sCompilerStatusUpdateingVersionInfo); UpdateVe

我为我的安装程序使用Inno安装程序。我对
unins000.exe中的VersionInfo有问题。为了在安装程序中填充VersionInfo,我使用了指令
AppPublisher
AppCopyright
等,但它不影响安装卸载程序
unins000.exe

Google和help对这个问题一无所知。我调查了Inno安装源,发现仅为安装文件添加VersionInfo:

{更新版本信息}
AddStatus(sCompilerStatusUpdateingVersionInfo);
UpdateVersionInfo(ExeFile、VersionInfo版本、VersionInfo产品版本、VersionInfo公司、,
VersionInfoDescription,VersionInfoTextVersion,
VersionInfo版权所有,VersionInfoProductName,VersionInfoProductTextVersion);
{由于某些原因,在Win95上,有时会显示EXE的日期/时间
写入后不会更新,因此必须
手动设置。(我不明白!!)}
UpdateTimeStamp(ExeFile.Handle);
最后
免费;
结束;
结束;
{Sign}
如果SignTools.Count>0,则开始
AddStatus(SCompilerStatusSigningSetup);
签名(文件名);
结束;
除了
EmptyOutputDir(False);
提高;
结束;
但我在卸载程序编译代码中找不到这个例程

任何人都知道,是否可以将版本信息放置到
unins000.exe


谢谢大家!

Inno安装程序不支持此操作

您必须在编译时自己修改版本信息

在我看来,在链接到安装程序之前访问卸载程序可执行文件的唯一方法是滥用“回调”。设置为
SignTool
的命令实际上可以对可执行文件执行任何操作,而不仅仅是对其进行“签名”。但在任何情况下都必须对其进行“签名”(Inno安装程序会显式检查可执行文件是否在“工具”完成后进行签名)


通过将
SignTool
设置为批处理文件(或其他脚本),最终将运行实际的
SignTool.exe
,可以实现这一点,但在此之前,它将修改版本信息(例如使用命令行)。

不幸的是,可接受的解决方案不起作用,因为“回调”不能以这种方式被滥用。深入研究Inno安装源代码,我发现编译器在签署卸载可执行文件后使用验证:

  { Sanity check: Remove the signature (in memory) and verify that
    the signed file is identical byte-for-byte to the original }
我找到了这个问题的快速解决办法。Inno安装程序使用
Setup.e32
文件作为
uninst000.exe
的模板

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


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

好主意,非常简单!非常感谢。另外,我已经从github源代码重新编译了ismplr.dll。Dll已成功编译,但无法正常工作((现在我尝试使用批处理文件重写VersionInfo并签署卸载程序。再次感谢您)!这里有一个没有答案的类似问题:你也可以回答这个问题吗?或者我可以复制粘贴你的答案吗?@EugeneMala谢谢你指出这一点。我已经将这个问题标记为这个问题的副本。好的,我明白了。我使用这种技术来解决。这很有效。可能测试中没有包含EXE文件头。