我在安装程序中使用Inno安装程序。我对VersionInfo在unins000.exe中有一个问题。在安装程序中填充VersionInfo时,我使用了指令AppPublisher、AppCopyright等,但它不影响安装卸载程序unins000.exe。
Google和help对这个问题一无所知。我研究了Inno安装源,并找到了仅用于安装文件的附加VersionInfo:
{ 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
谢谢!
发布于 2017-11-21 07:17:45
Inno安装程序不支持此设置。
您必须在编译时自己修改版本信息。
Imo,在卸载程序链接到安装程序之前访问其可执行文件的唯一方法是滥用SignTool“回调”。设置为SignTool的命令实际上可以对可执行文件执行任何操作,而不仅仅是“签名”它。但无论如何,它必须“签名”(Inno安装程序在“工具”完成后显式检查可执行文件是否已签名)。
您可以通过将SignTool设置为最终将运行实际signtool.exe的批处理文件(或其他脚本)来实现这一点,但在此之前,它将修改版本信息(例如使用资源黑客命令行)。
发布于 2017-11-30 02:51:10
不幸的是,接受的解决方案不能工作,因为SignTool“回调”不能以这种方式被滥用。深入了解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 Setup 5\)。
您必须在Inno安装二进制文件的每个副本中修改Setup.e32文件的版本信息。
https://stackoverflow.com/questions/47397961
复制相似问题