【问题标题】:NSIS Get Product VersionNSIS 获取产品版本
【发布时间】:2016-01-05 16:25:43
【问题描述】:

我正在尝试使用 NSIS 2.49 获取 ProductVersion。有人有关于如何获取产品版本的示例吗?

GetDllVersion  "C:\data\Some.exe" $R0 $R1 ;the two values were read during compilation

IntOp $R2 $R0 / 0x00010000
IntOp $R3 $R0 & 0x0000FFFF
IntOp $R4 $R1 / 0x00010000
IntOp $R5 $R1 & 0x0000FFFF
MessageBox MB_OK '$R2.$R3.$R4.$R5'

我已经尝试了上述方法,但它只是检索文件版本。

【问题讨论】:

    标签: nsis


    【解决方案1】:

    NSIS 对此没有原生支持,您必须直接调用 Windows API:

    Function GetDllProductVersion
    System::Store S
    Pop $3
    System::Call 'VERSION::GetFileVersionInfoSize(tr3,*i)i.r4'
    System::Call '*(&i$4,t""r1,t""r2)i.r5' ; Set $1 and $2 to "" so they are empty if we fail
    StrCmp $4 0 fail
    StrCmp $5 0 fail
        System::Call 'VERSION::GetFileVersionInfo(tr3,i,ir4,ir5)i.r0'
        StrCmp $0 0 fail
        System::Call 'VERSION::VerQueryValue(ir5,t"\",*i.r6,*i.r7)i.r0'
        StrCmp $0 0 fail
        System::Call '*$6(i,i,i,i,i.r2,i.r1)'
    fail:
    System::Free $5
    Push $1
    Push $2
    System::Store L
    FunctionEnd
    
    Section
    !define DllName "$SysDir\ComCtl32.dll"
    
    GetDllVersion "${DllName}" $R0 $R1
    IntOp $R2 $R0 / 0x00010000
    IntOp $R3 $R0 & 0x0000FFFF
    IntOp $R4 $R1 / 0x00010000
    IntOp $R5 $R1 & 0x0000FFFF
    DetailPrint 'FileVer: $R2.$R3.$R4.$R5'
    
    Push "${DllName}"
    Call GetDllProductVersion
    Pop $R0
    Pop $R1
    IntOp $R2 $R0 / 0x00010000
    IntOp $R3 $R0 & 0x0000FFFF
    IntOp $R4 $R1 / 0x00010000
    IntOp $R5 $R1 & 0x0000FFFF
    DetailPrint 'ProdVer: $R2.$R3.$R4.$R5'
    
    SectionEnd
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多