是否有工具或机制可从Windows MSI文件中检索可用的公共属性?
一些提供MSI文件的供应商本身并未记录这些文件,因此,我很想知道是否有一种方法可以在没有源代码的情况下公开这些文件。
是否有工具或机制可从Windows MSI文件中检索可用的公共属性?
一些提供MSI文件的供应商本身并未记录这些文件,因此,我很想知道是否有一种方法可以在没有源代码的情况下公开这些文件。
Answers:
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>
可能会缺少某些属性。
我现在的操作方式是使用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
我认为现在最好的方法是使用Powershell。这是一个很好地完成工作的脚本:https : //gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c
Property
表格。在MSI中,您是否有特定的工作流程或用例?