0

インストーラーのウェルカム テキストに表示できるように、EXE のバージョンを取得する小さな NSIS スクリプトを数年間使用しています。

ここでスクリプトを取得しました: 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 で圧縮された EXE からファイルのバージョンを読み取るにはどうすればよいですか?

更新: これは現在クローズされていますが、これは何らかの昇格されたアクセス許可の問題と、マップされたドライブでのコマンドの実行に関係している可能性が高いことを後で発見しました。

4

1 に答える 1

1

バージョン情報ブロックを使用しても、UPX --ultra-brute test.exe試してみると圧縮されませんでした。特殊な UPX スイッチを使用していますか? 試しました--keep-resource=%resourceid%か?

NSIS v3 を使用している場合は、!getdllversionを使用せずにコンパイル時にバージョンを取得できます!system

于 2015-05-22T17:51:22.410 に答える