2015-05-22 47 views
0

我已經使用了幾年的NSIS腳本抓取了EXE的版本,因此我可以在安裝程序的歡迎文本中顯示它。NSIS獲取EXE的文件版本,即UPX壓縮

我拿到劇本的位置: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讀取文件版本?

更新:現在已關閉,但後來我發現這可能會導致某種提升的權限問題,並在映射驅動器上運行該命令。

+0

你是如何調用UPX的?版本信息在Explorer和其他應用程序中是否仍然可見? – Anders

回答

1

即使在使用UPX --ultra-brute test.exe時,版本信息塊在我嘗試時未被壓縮。你使用特殊的UPX交換機嗎?你有沒有試過--keep-resource=%resourceid%

如果您使用的是NSIS v3,則可以使用!getdllversion在編譯時獲取該版本,而無需使用!system

+0

我只使用「upx myfile.exe」來使用任何開關我會嘗試使用該標誌 –

+0

實際上,它看起來像Finalbuilder中確實有開關。我沒有選中「壓縮資源」,它現在正在工作。謝謝! –

相關問題