2011-07-28 13 views
4

コードは、NSIスクリプトからスニペット:なぜVIProductVersion引数がProductVersionキーの値を上書きしますか?

VIProductVersion 1.2.0.0 
VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion 1.1.0.0 

私は1.1.0.0ファイルバージョンを設定したいが、ファイルのプロパティで、それが1.2.0.0に設定されています。私はまた、VIProductVersionがそれ自身で実行され、FileVersionキーを追加し、その値を設定することに気づいた。

ドキュメントはVIProductVersion製品バージョンを追加しますが、私が見ることファイルバージョンが実際に追加されていることであると述べています。これはNSISのバグですか? VIAddVersionKey FileVersionの目的は、それが設定する値がVIProductVersionで設定されたものとオーバーライドされている場合ですか?

VIAddVersionKeyは、VIProductVersionコールが必要です。それ以外の場合はスクリプトはコンパイルされません。

使用しているバージョン:EclipseNSIS 0.9.8; MakeNSIS 2.46。 OS:Windowsのバージョン情報リソースは2つの部分に格納された7

答えて

4

  • VS_FIXEDFILEINFOは、製品およびファイルのバージョンと固定ブロックでは、VIProductVersionはこの
  • ゼロ、一つ以上の(複数の言語を設定します)文字列ブロックに1つまたは複数のname = value文字列を含む場合、VIAddVersionKeyはそれらを設定します。

一部のアプリケーションでは、ファイルバージョンの文字列を使用し、バックVS_FIXEDFILEINFOにフォール:: dwFileVersionを文字列が存在しない場合は、他のアプリのみVS_FIXEDFILEINFOを使用:: dwFileVersionなど

VIProductVersion "1.2.3.4"は次のようになりますバージョンヘッダーを生成します

1 VERSIONINFO 
FILEVERSION 1,2,3,4 
PRODUCTVERSION 1,2,3,4 
FILEOS 0x4 
FILETYPE 0x1 

これで十分ですが、PRODUCTVERSION!= FILEVERSIONを設定することはできません。

私はこれをNSISのバグとみなします.VIFileVersionコマンドを追加するか、VIProductVersionをVIProductVersion <productver> [filever]に拡張する必要があります。

trackerに機能要求を追加できます。 !のあなたが


packhdrでビルド中 resource hackerを呼び出すことにより、この問題を回避することができるかもしれない平均時間で

編集:

それはとコンパイル時に2.46で行うことができます!

!macro HackyVIFileVersion reshack gorcjorg fixedfilever 
;http://www.angusj.com/resourcehacker/ 
;http://web.archive.org/web/20090918063311/http://www.jorgon.freeserve.co.uk/Gorcjorg.zip 
!searchreplace HackyVIFileVersion_id "${__TIME__}" ":" "" 
!define HackyVIFileVersion_cmd "$%TEMP%\nsisVIFV${HackyVIFileVersion_id}.cmd" 
!appendfile "${HackyVIFileVersion_cmd}" `@echo off&setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `set eh=%TEMP%\exehead%~1.tmp$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `set rh=%~2$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `call "%rh%" -extract "%eh%", "%eh%1.rc", VersionInfo,1,$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `> "%eh%2.rc" echo.LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US $\n` ;must force lang for Gorcjorg 
!appendfile "${HackyVIFileVersion_cmd}" `FOR /F "usebackq tokens=* delims=" %%A IN ("%eh%1.rc") DO ($\n` 
!appendfile "${HackyVIFileVersion_cmd}" ` FOR /F "usebackq" %%B IN ('%%A') DO ($\n` 
!appendfile "${HackyVIFileVersion_cmd}" `  if "%%~B"=="FILEVERSION" (>> "%eh%2.rc" echo.FILEVERSION %~4) else (>> "%eh%2.rc" echo.%%A)$\n` 
!appendfile "${HackyVIFileVersion_cmd}" ` )$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `)$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `call "%~3" /fo "%eh%.res" /r "%eh%2.rc"$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `call "%rh%" -addoverwrite "%eh%", "%eh%", "%eh%.res", versioninfo,1,$\n` 
!appendfile "${HackyVIFileVersion_cmd}" `del "%eh%2.rc"&del "%eh%1.rc"&del "%eh%.res"&del "%~0"` 
!packhdr "$%TEMP%\exehead${HackyVIFileVersion_id}.tmp" '"${HackyVIFileVersion_cmd}" "${HackyVIFileVersion_id}" "${reshack}" "${gorcjorg}" "${fixedfilever}"' 
!undef HackyVIFileVersion_cmd 
!undef HackyVIFileVersion_id 
!macroend 


VIProductVersion "1.2.3.4" 
VIAddVersionKey /LANG=1033 FileVersion 5.6.7.8 
VIAddVersionKey /LANG=1033 ProductVersion "1.2.3.4" 
VIAddVersionKey /LANG=1033 Comments "A test comment" 
!insertmacro HackyVIFileVersion "C:\tools\ResHacker.exe" "C:\tools\GoRC.exe" "5,6,7,8" 
0:packhdr、外部のサードパーティ製のツールは恐ろしいハック(私はそう、私は最初の.RESに変換しなければならなかったの.rcバージョンリソースをインポートするreshackerを取得できませんでした)

...あなたはこのバージョンのリソースになります:

1 VERSIONINFO 
FILEVERSION 5,6,7,8 
PRODUCTVERSION 1,2,3,4 
FILEOS 0x4 
FILETYPE 0x1 
{ 
BLOCK "StringFileInfo" 
{ 
    BLOCK "040904e4" 
    { 
     VALUE "Comments", "A test comment" 
     VALUE "FileVersion", "5.6.7.8" 
     VALUE "ProductVersion", "1.2.3.4" 
    } 
} 

BLOCK "VarFileInfo" 
{ 
    VALUE "Translation", 0x0409 0x04E4 
} 
} 
+0

答えをいただきありがとうございます。これは、VIProductVersionがどのように機能するかを理解するのに役立ちました。あなたが示唆したようにそれは本当に拡張されるべきであり、少なくとも、それについてNSISの文書に追加する必要があります。 –

+0

VIFileVersionがSVNに追加されました... – Anders

1

私はこのバグの明白な回避策を言及すると思います。

あなたファイルバージョンからVIProductVersionが、その後とVIAddVersionKeyPRODUCTVERSIONを設定する設定NSIS 2.46を使用している場合、あなたはまた、NSISコンパイラの警告を回避するためにFILEVERSIONを設定する必要があります。

関連する問題