如何在 Inno Setup 中获取 msi 文件的文件版本

2023-12-23

I know GetFileVersion and GetStringFileInfo功能,但它们不能与*.msi文件...有什么想法...?

#define AppVersion GetFileVersion("path\MyFile.msi")
#define AppVersion GetStringFileInfo("path\MyFile.msi", "FileVersion")

我是这样使用它的:

#define AppName "Google Chrome"
#define AppName2 "Google Chrome x86/x64"
#define AppVersion GetFileVersion("path\GoogleChromeStandaloneEnterprise.msi")
#define AppExe "chrome.exe"

[Setup]
AppName={#AppName}
AppVerName={#AppName2} v{#AppVersion}
AppVersion={#AppVersion}
VersionInfoVersion={#AppVersion}

我需要从中获取文件版本GoogleChromeStandaloneEnterprise.msi file.


谢谢马丁,它就像一个魅力...... 问候... ;-)


您可以使用WindowsInstaller.Installer https://learn.microsoft.com/en-us/windows/win32/msi/installer-object从预处理器调用的 PowerShell:

#define GetMsiVersion(str FileName) \
  Local[4] = ExtractFileName(FileName), \
  Local[0] = AddBackslash(GetEnv("TEMP")) + Local[4] + ".ver", \
  Local[1] = \
    "-ExecutionPolicy Bypass -Command """ + \
    "Write-Host 'Retrieving version of MSI " + Local[4] + "'; " + \
    "$windowsInstaller = New-Object -com WindowsInstaller.Installer; " + \
    "$database = $windowsInstaller.GetType().InvokeMember('OpenDatabase', 'InvokeMethod', $Null, $windowsInstaller, @('" + FileName + "', 0)); " + \
    "$q = 'SELECT Value FROM Property WHERE Property = ''ProductVersion'''; " + \
    "$view = $database.GetType().InvokeMember('OpenView', 'InvokeMethod', $Null, $database, ($q)); " + \
    "$view.GetType().InvokeMember('Execute', 'InvokeMethod', $Null, $view, $Null); " + \
    "$record = $view.GetType().InvokeMember('Fetch', 'InvokeMethod', $Null, $view, $Null); " + \
    "$productVersion = $record.GetType().InvokeMember('StringData', 'GetProperty', $Null, $record, 1); " + \
    "$view.GetType().InvokeMember('Close', 'InvokeMethod', $Null, $view, $Null); " + \
    "Set-Content -Path '" + Local[0] + "' -Value $productVersion;" + \
    """", \
  Exec("powershell.exe", Local[1], SourcePath, , SW_HIDE), \
  Local[2] = FileOpen(Local[0]), \
  Local[3] = FileRead(Local[2]), \
  FileClose(Local[2]), \
  DeleteFileNow(Local[0]), \
  Local[3]

像这样使用它:

#define AppVersion GetMsiVersion("path\GoogleChromeStandaloneEnterprise.msi")

该代码基于如何使用 PowerShell 查找 MSI 产品版本号? https://stackoverflow.com/q/8743122/850848

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Inno Setup 中获取 msi 文件的文件版本 的相关文章

随机推荐

  • 为什么我会看到 JavaScript 变量以 $ 为前缀?

    这是一个元问题 我在 SO 上看到的许多 JavaScript 片段都以美元符号前缀命名 例如 id在所示片段的第二行this https stackoverflow com questions 2189537 javascript win
  • 重用图表,并多次使用它

    我正在考虑风格转移 一个重要的部分是重用现有模型 目前我像这样导入 vgg 图 net vgg16 get vgg model name layer conv2 2 conv2 2 0 feature transformed image t
  • 是否可以编辑 NLTK 的维德情感词典?

    我想添加的话vader lexicon txt指定单词的极性分数 这样做的正确方法是什么 我在中看到了这个文件AppData Roaming nltk data sentiment vader lexicon 该文件由单词 其极性 强度以及
  • 从 Cortana 语音命令结果中获取任何值

    是否可以从 Cortana 语音命令中读取任何值 例如 当我说 在我的图书馆中搜索 something 我想从我的应用中的 something 获取结果 我找到了如何与短语表 and 短语主题 但就我而言 可以是任何单词 而不是某些声明的项
  • 抽象工厂模式和属性

    我对设计模式有点陌生 这是我在 stackoverflow 上的第一篇文章 所以希望这个问题有意义 我创建了一个抽象工厂来处理为不同图表供应商 dundas flash 等 生成 xml 字符串 下面是我工厂的代码大纲 如果有帮助的话 我可
  • 如何确保我的默认 C/C++ 编译器是 GCC

    我正在尝试在 macOS 上从源代码安装 Riak https docs riak com riak kv 2 2 3 setup installing mac osx 1 html installing from source https
  • Malloc和Realloc的关系,当内存中没有所需空间时如何处理[重复]

    这个问题在这里已经有答案了 可能的重复 realloc 和 malloc 函数 https stackoverflow com questions 12119724 realloc and malloc functions include
  • python 中每次使用时在函数外部递增值

    我有一个想要多次使用的函数 每次使用时我都希望函数外部的变量递增 沿着 def funtion1 mylists x row 1 for elm in mylists ws write row x elm row 1 x 1 col 0 f
  • 如何从 GCS 获取文件元数据

    我想获取存储在 Google Cloud Storage 中的文件的文件元数据 实际上 我们需要文件的媒体链接 以便可以下载文件或将 url 添加到下载页面 Blob blob storage get gcp public data nex
  • 如何编写非贪婪匹配的正则表达式? [复制]

    这个问题在这里已经有答案了 我需要有关正则表达式与非贪婪选项匹配的帮助 匹配模式为
  • 用 css 修复渐变背景

    我希望我的页面有一个从上到下流动的渐变背景 我希望背景像固定图像一样 渐变从当前浏览器视口的顶部延伸到底部 并且当您上下滚动页面时看起来相同 换句话说 当您滚动时它不会重复 它保持固定在原位 所以我想要的是这样的 and after scr
  • 具有 IPv6 IP 地址的 RewriteRule 不起作用

    我在代理 IPv6 地址内的请求时遇到问题 在 htaccess apache2 conf 上 我有它 RewriteRule http 18 4 15 8 80 path 1 P L 它工作正常 因为它是 IPv4 地址 但是 它不起作用
  • VBA Excel:通过 WinINet FTP GetFile

    我正在尝试使用 VBA Excel 进行 FTP 下载操作 在 Excel 2013 x64 Windows 7 SP1 x64 上 我找到了一些映射到 WinInet API 的代码 我可以成功upload文件使用PutFile功能 但我
  • 将 GPM 每小时数据聚合到 GEE 中的每日数据

    我需要聚合 GPM 集合每天 48 个半小时图像的总和 获取带有 降水 Cal 带和每日图像的图像集合 我尝试填充并迭代一个空的 featureCollection 但我得到一个没有图像的空集合 var dataset ee ImageCo
  • 如何通过创建新数组来合并两个数组并打印结果? (有代码)

    我得到了 rss feed 的内容 但不幸的是它们有不同的结构 在社区的帮助下 我克服了这个问题 我的问题是如何将 entries1 和 entries2 合并到 entries3 中 我将实现的是处理和排序所有具有不同结构的提要 谢谢 第
  • 外观 getFacadeAccessor() 方法如何工作?

    我正在阅读 Laravel 文档 试图更深入地了解该框架 但我在外观方面遇到了一些麻烦 我想我明白它们是什么 它们主要是为了方便访问 Laravels 核心而使用 我对这个主题感到困惑 立面是如何运作的 具体与 getFacadeAcces
  • 命令行上显示不同的 Java 版本

    我最近检查了我的 Java 版本 我运行了命令java version我发现我正在使用java version 1 7 0 09 但是当我尝试检查时C Program Files Java 目录 我似乎没有找到相同的版本 我只看到以下内容
  • 替换为 sympy 而不评估或简化表达式

    考虑以下示例 from sympy import x Symbol x f sqrt 3 x 2 现在我想替换一个数字 比如说5 for x并得到一个 LaTeX 表示 在这种情况下它应该返回 sqrt 3 cdot 5 2 我怎样才能做到
  • Excel - 使用 C# 读取 .NET 中的合并单元格(行)

    问候 StackOverflow lings 让我解释一下我的困境 假设我在一行中有 3 列 总共 9 列 因为它们合并为 3 列 这 3 列中的每一列都有数据 在正下方的行中 我有 9 列 每个单元格中都有数据 这个想法是读取包含 3 列
  • 如何在 Inno Setup 中获取 msi 文件的文件版本

    I know GetFileVersion and GetStringFileInfo功能 但它们不能与 msi文件 有什么想法 define AppVersion GetFileVersion path MyFile msi define