.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 38
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

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 
---------------------------------------------
 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
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

MKN, закомментируй в хидере строку



Код:

Код: Выделить всё

!insertmacro __DefineVersionInfoName FileVersion

ругается из-за того, что макрос GetFileVersion уже есть




Цитата MKN:



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




Ну так, посмотреть в хидере, что доступно и прописать как команды, не?





Код:

Код: Выделить всё

${GetProductName} "$WINDIR\explorer.exe" $0
${GetComments} "$WINDIR\explorer.exe" $1
${GetCompanyName} "$WINDIR\explorer.exe" $2
${GetLegalCopyright} "$WINDIR\explorer.exe" $3
${GetFileDescription} "$WINDIR\explorer.exe" $4
${GetProductVersion} "$WINDIR\explorer.exe" $5
${GetInternalName} "$WINDIR\explorer.exe" $6
${GetLegalTrademarks} "$WINDIR\explorer.exe" $7
${GetOriginalFilename} "$WINDIR\explorer.exe" $8
${GetPrivateBuild} "$WINDIR\explorer.exe" $9
${GetSpecialBuild} "$WINDIR\explorer.exe" $R0

насчет остального, правки исходников и разных глюков - это точно не ко мне, мне достаточно того, как я намучался при написании dll расширения оболочки для встраивания в контекстное меню файлов пункт для SFX Creator, C++ это не моё...
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

Кстати и штатный ${GetFileVersion} - показывает только первый символ... Как определять версию файла vcredist_x86.exe... ? Ещё мне надо определять версии шрифтов... Существующие плагины тоже не помощники. Кое что, да кое когда определяют, а что надо - нет... Изображение

NSIS ни черта не умеет, за что не возьмись... Начинаю в нём разочаровываться... Изображение Разрабы этот продукт сделали для неискушенных в программировании пользователей, вроде как старались , а поддержать и расширять не хотят...


Цитата K.A.V.:



ругается из-за того, что макрос GetFileVersion уже есть
.: NSIS - все вопросы :. часть 2.




Это понятно из сообщения. Что делать то ?
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата MKN:



Это понятно из сообщения. Что делать то ?
.: NSIS - все вопросы :. часть 2.




Я же тебе выше ответил, закомментируй указанную строку, монитор запачкался что ли? Изображение




Цитата MKN:



Кстати и штатный ${GetFileVersion} - показывает только первый символ... Как определять версию файла vcredist_x86.exe... ?
.: NSIS - все вопросы :. часть 2.




Ну, видимо, файл особенный, я без понятия, в чем проблема, не на всех же файлах отрабатывает без ошибок...




Цитата MKN:



NSIS ни черта не умеет, за что не возьмись... Начинаю в нём разочаровываться...
.: NSIS - все вопросы :. часть 2.




Немножко умеет, раз его использовала не одна известная компания для создания инсталлеров для своих продуктов




Цитата MKN:



вроде как старались , а поддержать и расширять не хотят...
.: NSIS - все вопросы :. часть 2.




Эта проблема всех FreeWare проектов, мне кажется, всё держится на энтузиазме создателей и у всех этот энтузиазм со временем проходит, не у всех есть желание вечно сидеть с красными глазами и пилить софт "для народа"
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата K.A.V.:



закомментируй указанную строку
.: NSIS - все вопросы :. часть 2.




Первым делом закомментил. Всё равно ошибки...

ps Интересно, а нет ли где конвертера из VBScript в NSIS ? Изображение
Аватара пользователя
MaGoth

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MaGoth »

Цитата MKN:



Первым делом закомментил. Всё равно ошибки...
.: NSIS - все вопросы :. часть 2.




У меня нет ошибок и компилируется без проблем, если в коде только 2 указанных тобой инклуда, смотри, где у тебя ещё проблемы и на какие строки ругается...
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

MaGoth, суммарный размер файлов проекта, которые упаковываются, не больше 2 Гб?
Аватара пользователя
MaGoth

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MaGoth »

Цитата MKN:



а что имеется ввиду под macroline 1 ?
.: NSIS - все вопросы :. часть 2.




Ошибка в первой строке в самом макросе

Например, если будет такой код макроса с "левым" текстом в первой строке:





Код:

Код: Выделить всё

!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
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата K.A.V.:



Например, если будет такой код макроса с "левым" текстом в первой строке:
.: NSIS - все вопросы :. часть 2.




Нет там никакого левого текста. Хедер один в один , который я здесь привёл... Хоть комментируй в нём чего, хоть нет - не работает (если вместе с !include "FileFunc.nsh" )...



выложи пожалуйста твой рабочий комплект, а то я уже не знаю на что и думать. Может у меня в самом NSIS "комплекте" чего то не так...
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата MKN:



Нет там никакого левого текста. Хедер один в один , который я здесь привёл... Хоть комментируй в нём чего, хоть нет - не работает (если вместе с !include "FileFunc.nsh" )...
.: NSIS - все вопросы :. часть 2.




Ну не знаю, в чем там у тебя проблема, пробовал пустой код компилить только с этими инклудами?

У меня на NSIS 3.0b1 всё нормально компилится и работает
Ответить

Вернуться в «Автоматическая установка приложений»