NSIS 获取产品版本

2023-12-01

我正在尝试使用 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 3.08 添加GetDLLVersion /ProductVersion.

旧版本没有对此的本机支持,您必须直接调用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSIS 获取产品版本 的相关文章

  • NSIS脚本学习:如何检测并卸载已有软件版本

    前言 目前开发的程序以基于 net的应用程序为主 程序开发好后 需要进行安装包的生成 及setup文件的生成 常见的是NSIS工具 之前一直用的单文件打包工具 不适合将运行环境加进去 因此开始使用更高版本的NSIS 3 06 这里要解决的是
  • 使Windows刷新图标缓存

    我真的很喜欢 KDE SC 4 的氧气外观 我编写了一个程序将这些图标应用到 Windows 该程序是用 NSIS 编写的 目前几乎功能齐全 但是 我发现让 Windows 意识到图标更改的唯一方法是终止 explorer exe 删除图标
  • 选择后添加浏览安装目录“${PRODUCT_NAME}”后的 NSIS 目录页面

    我有一个带有目录页面的简单 NSIS 脚本 用户可以在其中选择要安装应用程序的目录 请参阅下面的示例 如果应用程序已安装 它将从注册表或 www 根目录或 program files publisher product name 中获取值
  • 创建安装程序:从注册表项读取安装路径(例如 wix/installshield/nsis)

    我想创建我的程序的安装程序 但由于安装相当复杂 我需要比 installshield 限量版更高级的东西 我必须从当前的安装程序中运行另一个安装程序 用户是否按 取消 或安装该程序并不重要 我只需要运行它即可 我必须在用户计算机上安装一个包
  • 检查返回代码(或其他代码)以确保 MSI 已正确安装

    我正在使用 NSIS 安装一些 MSI 我在用着ExecWait msiexec passive liare SETUP LOG FILE i TEMP MyMsi msi 当 MSI 与已安装的应用程序版本相同时 安装会失败 已安装此产品
  • 在 IF ELSE 块中包含 InstallDir

    我尝试使用以下代码 The default installation directory InstallDir PROGRAMFILES PRODUCT NAME to include x64 nsh If RunningX64 The d
  • 设置在 nsis 安装程序的自定义对话框页面上添加的自定义标签的字体

    如何设置 nsis 安装程序中自定义添加页面上添加的标签的字体 为了创建标签 我使用了这个 nsDialogs Create 1018 var Label NSD CreateLabel 0 0 100 32u PLEASE CHOOSE
  • 是否可以从 Java 代码调用 Ant 或 NSIS 脚本?

    是否可以在运行时从 Java 代码以编程方式调用 Ant 或 NSIS 脚本 如果是这样 怎么办 You can从 Java 代码调用 ant 脚本 See 本文 http ant apache org manual running htm
  • 如何使用 NSIS 请求管理员权限?

    我对 NSIS 还很陌生 我试图请求管理员权限才能运行安装程序 因为它与注册表有点混乱 我对 RequestExecutionLevel 和 MULTIUSER EXECUTIONLEVEL 的问题是 它们都绝对阻止任何非管理员用户打开安装
  • 使用 SIS 执行 postgres db init 的批处理文件给出权限被拒绝

    跟随我的上一个问题 https stackoverflow com questions 30924913 how to install postgres with nsis with all parameters我现在尝试通过 NSIS 代
  • 为 NSIS 安装程序设置 UAC“发布者”字段

    当我打开安装程序 使用 NSIS 创建的 时 会出现 UAC 对话框 其中包含有关我的安装程序的信息 场出版商是 未知 我听说过对应用程序进行数字签名 您知道如何在 NSIS 中执行此操作吗 如何设置字段 属性出版商到 我的安装程序 或其他
  • 如何在 NSIS 中获取命令输出?

    我想知道如何在 NSIS 中获取 execwait 命令的输出 例如 如果我运行tree 我将如何获得输出 这将是实际的树 您不能使用 ExecWait 来做到这一点 您必须使用以下插件之一 nsExec http nsis sourcef
  • NSIS 安装程序 - 显示不同的许可证

    我正在尝试修改现有的 NSIS 安装脚本 以允许根据用户是新用户还是现有用户向用户提供不同的许可证文件 我有预先存在的代码 可以检测 onInit 部分中的现有安装 然而 我在尝试使用 NSIS 提供的许可证屏幕时遇到了障碍 例如 Inse
  • Win32 安装程序:有没有办法为每个用户写入 HKU 启动?

    是否有一个 Windows 安装程序可以为每个用户添加启动项 例如
  • 卸载程序不删除注册表

    Function Check32or64BitWindows If RunningX64 strcpy INSTDIR PROGRAMFILES64 APP FULL PATH SetRegView 64 Else SetRegView 3
  • 如何在 NSIS 中使用 try catch

    您好 我在安装时在 nsis 安装程序中的几台机器上遇到了奇怪的错误 使用 fontreg nsh 安装字体时给出 无效的 win32 文件句柄 我试过谷歌但没有得到这个问题的答案 现在我正在考虑抑制此消息 那么有什么方法可以抑制此消息 或
  • NSIS:在标签中插入链接

    假设我有以下 nsDialog 标签 单击 接受 即表示我同意示例的许可协议和隐私政策 您可以访问需要使用个人信息的功能 欲了解更多信息 请下载示例的内容政策 我想在此标签中插入链接 如下所示 单击 接受 即表示我同意示例的内容许可协议 h
  • NSIS - 在命令行安装期间打印提示

    我正在使用 NSIS 为 Windows 制作安装程序 并且有许多用户可以使用命令行指定的自定义安装选项 例如 installer exe IDPATH c Program Files Adobe Adobe InDesign CS5 S
  • 如何使用 NSIS 脚本检测 Windows 32 位或 64 位?

    我已经为java项目编写了nsis脚本 我的项目中有批处理文件 我已经为常见的Windows 32位和64位编写了批处理文件 安装后我已经使用自动启动批处理文件Exec命令 它在 32 位 Windows 中工作正常 但同时这在 64 位
  • NSIS获取参数

    to get n 0值作为字符串 不需要选项 传递给安装程序 我不太明白这个函数的工作原理是什么 GetParameters input none output top of stack replaces with e g whatever

随机推荐