Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2371
Благодарности: 562

Профиль | Отправить PM | Цитировать


FileVersionInfo Header v1.2.2
читать дальше »
Код: Выделить весь код
/*

---------------------------------------------
        FileVersionInfo Header v1.2.2

          All Functions comes from:
      http://nsis.pastebin.com/f5e461c4d
              Written by Anders
       Collected and modified by JiaKe
---------------------------------------------

Copyright 2011 Nullsoft Install System

Usage in script:

!include "FileVerInfo.nsh"

[Section|Function]

 ${FileVerInfoFunc} FILEPATH $var

# $var=["error"|""|Result]
# "error": This version info doesn't exist
# "": This version info exsits but is blank
# Result: The value of this version info

[SectionEnd|FunctionEnd]

FileVerInfoFunc can be:
  [un.]GetFileVersion
  [un.]GetProductVersion
  [un.]GetProductName
  [un.]GetCompanyName
  [un.]GetFileDescription
  [un.]GetComments
  [un.]GetLegalCopyright
  [un.]GetLegalTrademarks
  [un.]GetInternalName
  [un.]GetOriginalFilename
  [un.]GetSpecialBuild
  [un.]GetPrivateBuild
  [un.]GetUserDefined <Userdefined Name>

---------------------------------------------

 Examples:
  ${GetCompanyName} $WINDIR\Notepad.exe $R0
  ${un.GetComments} $SYSDIR\registry.exe $R0

---------------------------------------------

*/

!ifndef FILEVERINFO_INCLUDED
!define FILEVERINFO_INCLUDED

!include Util.nsh
!include LogicLib.nsh

!verbose push
!verbose 3
!ifndef _FILEVERINFO_VERBOSE
  !define _FILEVERINFO_VERBOSE 3
!endif
!verbose ${_FILEVERINFO_VERBOSE}
!define FILEVERINFO_VERBOSE `!insertmacro FILEVERINFO_VERBOSE`
!verbose pop

!macro FILEVERINFO_VERBOSE _VERBOSE
  !verbose push
  !verbose 3
  !undef _FILEVERINFO_VERBOSE
  !define _FILEVERINFO_VERBOSE ${_VERBOSE}
  !verbose pop
!macroend

!macro GetFileVerInfoCall _VERINFO_STR_NAME _FILENAME_INPUT _VERINFO_OUTPUT
  !verbose push
  !verbose ${_FILEVERINFO_VERBOSE}
  Push `${_FILENAME_INPUT}`
  Push `${_VERINFO_STR_NAME}`
  ${CallArtificialFunction} GetFileVerInfo_
  Pop `${_VERINFO_OUTPUT}`
  !verbose pop
!macroend

!macro __DefineVersionInfoName _VERINFO_STR_NAME
  !define Get${_VERINFO_STR_NAME}    `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
  !define un.Get${_VERINFO_STR_NAME} `!insertmacro GetFileVerInfoCall ${_VERINFO_STR_NAME}`
!macroend

!insertmacro __DefineVersionInfoName ProductName
!insertmacro __DefineVersionInfoName Comments
!insertmacro __DefineVersionInfoName CompanyName
!insertmacro __DefineVersionInfoName LegalCopyright
!insertmacro __DefineVersionInfoName FileDescription
!insertmacro __DefineVersionInfoName FileVersion
!insertmacro __DefineVersionInfoName ProductVersion
!insertmacro __DefineVersionInfoName InternalName
!insertmacro __DefineVersionInfoName LegalTrademarks
!insertmacro __DefineVersionInfoName OriginalFilename
!insertmacro __DefineVersionInfoName PrivateBuild
!insertmacro __DefineVersionInfoName SpecialBuild

!define GetUserDefined    `!insertmacro GetFileVerInfoCall`
!define un.GetUserDefined `!insertmacro GetFileVerInfoCall`

!macro GetFileVerInfo_

  !verbose push
  !verbose ${_FILEVERINFO_VERBOSE}

  Exch $R0
  Exch
  Exch $R1
  System::Store S
  System::Call `version::GetFileVersionInfoSize(tR1,*i)i.R2`
  IntCmpU $R2 0 +15
    System::Alloc $R2
    System::Call `version::GetFileVersionInfo(tR1,in,iR2,isR3)i.R4?e`
    Pop $R2
    IntCmpU $R2 0 0 +11 +11
    IntCmpU $R4 0 +10
      System::Call `version::VerQueryValue(iR3,t"\VarFileInfo\Translation",*i.R4,*i)i.R5`
      IntCmpU $R5 0 +8
      System::Call `*$R4(&i2.R6,&i2.R7)`
      IntFmt $R6 "%04x" $R6
      IntFmt $R7 "%04x" $R7
      System::Call `version::VerQueryValue(iR3,t"\StringFileInfo\$R6$R7\$R0",*i.R6,*i.R7)i.R8`
      IntCmpU $R8 0 +3
      System::Call `*$R6(&t$R7.s)`
      Goto +2
      Push `error`
    IntCmpU $R3 0 +2
    System::Free $R3
  System::Store L
  Exch 2
  Exch
  Pop $R1
  Pop $R0
  !verbose pop
!macroend
!endif

На базе этого кода, похоже сделан MoreInfo plugin http://nsis.sourceforge.net/MoreInfo_plug-in

Но и у FileVerInfo.nsh , и у MoreInfo plugin есть такая лажа - инфа из некоторых файлов получается только в виде первого символа...
Например, так происходит при снятии инфы у файла vcredist_x86.exe (MicrosoftVisual C ++ 2012 Redistributable)
https://www.microsoft.com/ru-ru/down....aspx?id=30679



Плагин и хедер, вроде как оч полезные, но и в то же время для некоторых случаев, бесполезные...
Как бы это исправить (исходники есть http://www.fdos.org/win32/nsis/plugi...fo.1.0.1.2.zip ) ?

Или хотя бы сделать внятным код для функции GetFileVersionInfo (и сопутствующих функций - см. код FileVersionInfo Header), чтобы определять параметры свойств файлов...

ps http://dictionary.cambridge.org/ru/p...танский/header

Последний раз редактировалось MKN, 09-04-2015 в 15:29.


Отправлено: 15:04, 09-04-2015 | #1561