NSIS hat keine native Unterstützung für etwas anderes als VS_FIXEDFILEINFO
Lesen ->dwFileVersion
so müssen Sie direkt die Windows-API-Aufruf:
; Add some version information so we have something to test
VIProductVersion 1.2.3.4
VIAddVersionKey "ProductVersion" "One Two Three Four"
VIAddVersionKey "FileVersion" "Whatever"
VIAddVersionKey "FileDescription" "Whatever"
VIAddVersionKey "LegalCopyright" "(C) Whatever"
!include LogicLib.nsh
Function GetFileVerFirstLangProductVersion
System::Store S
pop $3
push "" ;failed ret
System::Call 'version::GetFileVersionInfoSize(t"$3",i.r2)i.r0'
${If} $0 <> 0
System::Alloc $0
System::Call 'version::GetFileVersionInfo(t"$3",ir2,ir0,isr1)i.r0 ? e'
pop $2
${If} $0 <> 0
${AndIf} $2 = 0 ;a user comment on MSDN said you should check GLE to avoid crash
System::Call 'version::VerQueryValue(i r1,t "\VarFileInfo\Translation",*i0r2,*i0)i.r0'
${If} $0 <> 0
System::Call '*$2(&i2.r2,&i2.r3)'
IntFmt $2 %04x $2
IntFmt $3 %04x $3
System::Call 'version::VerQueryValue(i r1,t "\StringFileInfo\$2$3\ProductVersion",*i0r2,*i0r3)i.r0'
${If} $0 <> 0
pop $0
System::Call *$2(&t$3.s)
${EndIf}
${EndIf}
${EndIf}
System::Free $1
${EndIf}
System::Store L
FunctionEnd
Section
Push "$ExePath" ; Read our own version information in this example
Call GetFileVerFirstLangProductVersion
Pop $0
DetailPrint "ProductVersion=$0"
SectionEnd
@Anders, die Ausgabe dieser Funktion ist 'DetailPrint:„ProdVer: $ R2 . $ R3. $ R4. $ R5 "' .... und ich brauche die tatsächlichen Werte ... – gigiman
Es funktioniert gut für mich, aber es bekommt den Wert zur Laufzeit und das ist, was Sie gefragt haben ("keep es in eine Variable "). Wenn Sie es in einer Definition zur Kompilierzeit wollten, dann sollten Sie danach gefragt haben ... – Anders
@Anders, bitte verzeihen Sie meinen Mangel an Wissen. Ich möchte nur den Produktversionsnamen des Installers verwenden (es ist wirklich nur ein Name, nicht etwas wie xx.xx.xx.xx oder was auch immer), um auf einen Link zum Herunterladen von Dateien zuzugreifen, die für genau diese Produktversion benötigt werden. Ich kenne keine Herangehensweise und dachte darüber nach, sie in einer 'var' zu speichern. Kannst du mir bitte sagen, was meine Wahl ist oder mir ein gutes Beispiel geben? – gigiman