如何在不使用InstallShield的情况下检查.ism中是否存在文件

问题描述:

我想验证某些exe文件是否已经存在于合并模块.ism(二进制格式)中。有没有使用InstallShield的方法?如何在不使用InstallShield的情况下检查.ism中是否存在文件

+0

您的意思是.ISM或.MSM? –

* .ism文件实际上是一个MSI文件,其扩展名更改为。 MSI文件依次是SQL数据库,以COM结构存储文件的形式存储 - 一个文件系统位于单个文件中,包含各种内容的文件流。这与Office文档中使用的格式相同。

您可以从Windows SDK查看与逆戟鲸MSI文件:http://www.hass.de/content/how-install-microsoft-orca

+1

仅限于二进制格式。它也可以是XML格式,即使用Msi2XML将二进制数据库转换为DTD/XML。 –

的Windows Installer XML(WiX的)部署工具基金会(DTF)有可用的InstallPackage类暴露了FindFiles()方法。这应该很容易查询EXE。只要意识到,作为一个合并模块,您将不会知道MSI通常决定的完整安装路径。

+0

不错的主意,看起来你的代码在这里可以帮助(稍作修改):http://*.com/a/15532841/129130 –

Chris的建议应该可以正常工作,就像使用Orca一样。但它让我想到使用名为Merge Module Finder的工具可能会有更简单的方法。这完全取决于你真正想做什么?在合并模块中查找文件?调查Installshield文件中的合并模块?目前还不清楚你想要做什么。

虽然有时有点笨重(我认为作者没有更新它的最新版本的Windows),它会帮助你在一堆合并模块中交互式地查找文件。您还可以搜索注册表值。以下是屏幕截图:

enter image description here

+0

我写了很多这些类型的工具,但从未发布它们。其中一天,我应该告诉你关于InstallManifest生成器和InstallDifferences工具。但是对于这个简单的搜索,我只是说findstr/s -i -m somefilename * .msm –