几年来,我一直使用一个小NSIS脚本来获取EXE的版本,这样我就可以在安装程序欢迎文本中显示它。
我在这里找到了脚本:compile-time
!define File "C:\MyFile.exe"
OutFile "GetVersion.exe"
SilentInstall silent
Section
## Get file version
GetDllVersion "${File}" $R0 $R1
IntOp $R2 $R0 / 0x00010000
IntOp $R3 $R0 & 0x0000FFFF
IntOp $R4 $R1 / 0x00010000
IntOp $R5 $R1 & 0x0000FFFF
StrCpy $R1 "$R2.$R3.$R4.$R5"
## Write it to a !define for use in main script
FileOpen $R0 "$EXEDIR\Version.txt" w
FileWrite $R0 '!define Version "$R1"'
FileClose $R0
SectionEnd最近,我开始使用UPX压缩应用程序的EXE。
现在它已经被UPX压缩了,文件版本脚本不再工作了,我猜是因为非标准的头布局。
如何从UPX压缩EXE读取文件版本?
更新:现在关闭了,但我后来发现,这可能与某种提升的权限问题和在映射驱动器上运行命令有关。
发布于 2015-05-22 17:51:22
即使在使用UPX --ultra-brute test.exe时,当我尝试时,版本信息块也没有被压缩。你用的是特殊的UPX开关吗?你试过--keep-resource=%resourceid%吗?
如果您正在使用NSIS v3,您可以使用!getdllversion在编译时获得版本,而不必使用!system。
https://stackoverflow.com/questions/30402624
复制相似问题