:
- VS_FIXEDFILEINFO 제품 및 파일 버전의 고정 블록은 VIProductVersion이
- 0 개, 1 개 이상 (여러 언어를 설정합니다) 문자열 블록에 하나 이상의 name = value 문자열이 있으면 VIAddVersionKey가이를 설정합니다.
일부 응용 프로그램은의 FileVersion 문자열을 사용하여 문자열이없는 경우 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 수행 할 수 있습니다
! packhdr, 외부 타사 도구 (reshacker가 .rc 버전 리소스를 가져올 수 없어 .res 먼저 변환해야 함) 및 끔찍한 해킹 :
!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"
...이 버전 리소스로 끝납니다 :
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
}
}
감사합니다. VIProductVersion이 어떻게 작동하는지 이해하는 데 도움이되었습니다. 그것은 정말로 당신이 제안한대로 확장되어야합니다, 또는 적어도, 발언은 그것에 대해 NSIS 문서에 추가되어야합니다. –
VIFileVersion이 SVN에 추가되었습니다 ... – Anders