Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自exe-nsis的产品版本字符串_Nsis - Fatal编程技术网

来自exe-nsis的产品版本字符串

来自exe-nsis的产品版本字符串,nsis,Nsis,如果在运行时可能的话,我想从给定的可执行文件(实际上是从我试图创建的安装程序)读取产品版本()。此字符串将进一步用于从链接下载文件 多谢各位 NSIS本机不支持读取除->dwFileVersion之外的任何内容,因此您必须直接调用Windows API: ; Add some version information so we have something to test VIProductVersion 1.2.3.4 VIAddVersionKey "ProductVersion" "One

如果在运行时可能的话,我想从给定的可执行文件(实际上是从我试图创建的安装程序)读取产品版本()。此字符串将进一步用于从链接下载文件


多谢各位

NSIS本机不支持读取除
->dwFileVersion
之外的任何内容,因此您必须直接调用Windows API:

; 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
;添加一些版本信息,这样我们就可以进行测试了
VIProductVersion 1.2.3.4
ViadVersionKey“ProductVersion”“一二三四”
ViadVersionKey“文件版本”“任意”
ViadVersionKey“文件描述”“无论什么”
ViadVersionKey“LegalCopyright”“(C)无论如何”
!包括LogicLib.nsh
函数GetFileVerFirstLangProductVersion
系统::商店
流行音乐3美元
按“;失败的ret
系统::调用'version::GetFileVersionInfo大小(t“$3”,i.r2)i.r0'
${If}$0
系统::Alloc$0
系统::调用'version::GetFileVersionInfo(t“$3”、ir2、ir0、isr1)i.r0?e'
流行音乐2美元
${If}$0
${AndIf}$2=0;MSDN上的一位用户评论说,您应该检查GLE以避免崩溃
系统::调用'version::VerQueryValue(i r1,t“\VarFileInfo\Translation”,*i0r2,*i0)i.r0'
${If}$0
系统::调用“*$2(&i2.r2,&i2.r3)”
IntFmt$2%04x$2
IntFmt$3%04x$3
系统::调用'version::VerQueryValue(i r1,t“\StringFileInfo\$2$3\ProductVersion”,*i0r2,*i0r3)i.r0'
${If}$0
流行音乐$0
系统::调用*$2(&t$3.s)
${EndIf}
${EndIf}
${EndIf}
系统::免费1美元
${EndIf}
系统::商店L
功能端
部分
按“$ExePath”;阅读本例中我们自己的版本信息
调用GetFileVerFirstLangProductVersion
流行音乐$0
DetailPrint“ProductVersion=$0”
分段结束

NSIS本机不支持读取除
->dwFileVersion
之外的任何内容,因此您必须直接调用Windows API:

; 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
;添加一些版本信息,这样我们就可以进行测试了
VIProductVersion 1.2.3.4
ViadVersionKey“ProductVersion”“一二三四”
ViadVersionKey“文件版本”“任意”
ViadVersionKey“文件描述”“无论什么”
ViadVersionKey“LegalCopyright”“(C)无论如何”
!包括LogicLib.nsh
函数GetFileVerFirstLangProductVersion
系统::商店
流行音乐3美元
按“;失败的ret
系统::调用'version::GetFileVersionInfo大小(t“$3”,i.r2)i.r0'
${If}$0
系统::Alloc$0
系统::调用'version::GetFileVersionInfo(t“$3”、ir2、ir0、isr1)i.r0?e'
流行音乐2美元
${If}$0
${AndIf}$2=0;MSDN上的一位用户评论说,您应该检查GLE以避免崩溃
系统::调用'version::VerQueryValue(i r1,t“\VarFileInfo\Translation”,*i0r2,*i0)i.r0'
${If}$0
系统::调用“*$2(&i2.r2,&i2.r3)”
IntFmt$2%04x$2
IntFmt$3%04x$3
系统::调用'version::VerQueryValue(i r1,t“\StringFileInfo\$2$3\ProductVersion”,*i0r2,*i0r3)i.r0'
${If}$0
流行音乐$0
系统::调用*$2(&t$3.s)
${EndIf}
${EndIf}
${EndIf}
系统::免费1美元
${EndIf}
系统::商店L
功能端
部分
按“$ExePath”;阅读本例中我们自己的版本信息
调用GetFileVerFirstLangProductVersion
流行音乐$0
DetailPrint“ProductVersion=$0”
分段结束

@Anders,该函数的输出是
DetailPrint:“ProdVer:$R2.$R3.$R4.$R5”
。。。。我需要实际的值…它对我来说很好,但它在运行时得到值,这就是您所要求的(“将其保存到变量中”)。如果你想在编译时定义它,那么你应该要求它…@Anders,请原谅我知识的缺乏。我只想使用安装程序的产品版本名(它实际上只是一个名称,而不是像xx.xx.xx.xx之类的名称)来访问一个链接,以便下载该产品版本所需的一些文件。我不知道任何方法,我考虑将其存储在
var
中。你能告诉我我的选择是什么,或者给我一个有效的例子吗?我已经给你指出了一些东西,可以提供你想要的东西,即版本信息中固定块中存储的64位产品版本的GetDlVersion。@Anders,我不知道如何使用它……顺便说一句,我使用的是32位系统。@Anders,该函数的输出是
DetailPrint:“ProdVer:$R2.$R3.$R4.$R5”
。。。。我需要实际的值…它对我来说很好,但它在运行时得到值,这就是您所要求的(“将其保存到变量中”)。如果你想在编译时定义它,那么你应该要求它…@Anders,请原谅我知识的缺乏。我只想使用安装程序的产品版本名(它实际上只是一个名称,而不是像xx.xx.xx.xx之类的名称)来访问一个链接,以便下载该产品版本所需的一些文件。我不知道任何方法,我考虑将其存储在
var
中。你能告诉我我的选择是什么,或者给我一个有效的例子吗?我已经给你指出了一些东西,可以提供你想要的东西,即版本信息中固定块中存储的64位产品版本的GetDlVersion。@Anders,我不知道如何使用它……顺便说一句,我使用的是32位系统。好的,我现在有了一个更清晰的视图。谢谢你花时间来帮助我,非常感谢。好的,我现在有一个更清晰的看法。谢谢你花时间来帮助我,非常感谢。