NSIS Получить версию файла EXE, сжатого UPX

В течение нескольких лет я использовал небольшой скрипт NSIS, который захватывает версию EXE, чтобы я мог отобразить ее в тексте приветствия установщиков.

У меня есть скрипт здесь: http://nsis.sourceforge.net/Invoking_NSIS_run-time_commands_on_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?

ОБНОВЛЕНИЕ: сейчас это закрыто, но позже я обнаружил, что это, скорее всего, связано с какой-то проблемой повышенных разрешений и выполнением команды на подключенном диске.

1 ответ

Решение

Даже при использовании UPX --ultra-brute test.exe блок информации о версии не сжимался, когда я пытался. Используете ли вы специальные UPX-переключатели? Ты пытался --keep-resource=%resourceid%?

Если вы используете NSIS v3, вы можете использовать !getdllversion чтобы получить версию во время компиляции без использования !system,

Другие вопросы по тегам