从MSI文件中检索公共属性


12

是否有工具或机制可从Windows MSI文件中检索可用的公共属性?

一些提供MSI文件的供应商本身并未记录这些文件,因此,我很想知道是否有一种方法可以在没有源代码的情况下公开这些文件。


8
微软的ORCAPantaray的SuperORCA和大多数其他MSI编辑将使您能够浏览/编辑任何表格,包括Property表格。在MSI中,您是否有特定的工作流程或用例?
jscott 2012年

2
我想了解可用的公共属性,以便可以在安装过程中准确地传递它们,而不必查询供应商或文档(因为这并非总是可能的)。使用Puppet,我们可以在安装过程中传入MSI属性(我们包装misexec.exe),因此具有此功能非常方便。
肯·巴伯

1
您可以传递其他公共属性来控制安装,尽管这些公共属性未在“属性”表中列出。可以根据条件动态设置属性,例如注册表搜索。因此,供应商文档是更好的信息来源。
阿列克谢·伊凡诺夫

您也可以使用详细日志记录运行安装,以查看属性如何更改其值。
阿列克谢·伊凡诺夫

抱歉,延迟-我已经尝试过Orca及其迷人的功能,但是我已经确认了您描述的@AlexeyIvanov的行为-也就是说,某些属性不会出现。我通过splunk.msi及其文档确认了这一点。我猜Orca中出现的默认值是默认值,但这不是规范列表。您能否详细解释一下详细的日志记录方法?
肯·巴伯

Answers:


8

Lessmsi提供了命令行以及交互式应用程序,用于从.msi中检索任何属性。

以交互方式,打开.msi,然后转到“ 表”视图并选择或键入“属性”。但是,尽管这给出了属性名称,但没有给出所述属性的有效值(或者我没有找到正确的外观)。

命令行列出要控制台的属性表(令人沮丧的是,无法通过简单的> output.csv重定向捕获)

lessmsi l -t Property ...\path\to\setup.msi

1

鉴于MSI文件在内部数据库中存储了公共属性,实际上您可以使用VBScript和SQL查询它们。

这是一个示例脚本,它将返回存储在MSI文件中的所有属性。按照惯例,使用大写字母定义公共财产,因此通常可以识别大写字母。


1

lessmsi是一个很棒的工具,如果您愿意弹出它的GUI并进行一些手工调查,肯定可以在这里使用。但是,我要说的是,以下命令不能可靠地显示所有属性:

lessmsi l -t Property <msi_name>

一种(更好)保证您拥有所有可能属性的方法是使用MSI文件实际执行安装,修复或卸载并记录该过程。以下命令仅记录属性,而没有其他记录:

<msi_name> /lp! <msi_property_logfile>

上面的命令等效于:

msiexec /lp! <msi_property_logfile> /i <msi_name>

但是,我的首选方法是实际安装/删除/修复(而是简单地提取)。与lessmsi相比,此方法的优点在于它不需要第三方工具(即lessmsi),并且不需要您搞乱任何安装。既然您有足够的磁盘空间来实际安装程序,则可以执行以下操作:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

请注意,<absolute_path_to_extract_to>可以指向不存在的目录(该命令将创建必要或失败的目录)。

如果您出于任何原因讨厌安装UI,则可以附加该/qr选项,这将“减少”并消除该UI,而不会影响属性记录过程。但是请注意-如果您比降低的UI(即/qb| /passive/qn| /quiet)“降低” ,则<msi_property_logfile>可能会缺少某些属性。


该方法的问题是:您必须实际运行安装程序。即使将其安装到非标准targetdir,您仍然会弄乱寄存器。
Wang

0

我现在的操作方式是使用Carbon Powershell模块。要安装模块类型:

Install-Module -Name 'Carbon' -AllowClobber

然后简单地

msi your_msi_path.msi

例:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.