linux - Linux 中如何从 MSI 中获取文件的真实名称(或者,如何读取 MSI 数据库)?

标签 linux visual-studio-2010 windows-installer cab

更新:我更改了这个问题的标题以反射(reflect)下面一些答案真正需要的内容。

我希望能够在 Linux 中从 Visual Studio 2010 的 native 部署工具中生成的 MSI 获取特定的可执行文件。但是cabextract得到的名字都是funky:

-rw-r--r-- 1 root wheel     159 Jul 16 17:26 _07DAC52BD05CC8A8D6B2195350CC8C13
-rw-r--r-- 1 root wheel   34304 Oct 29 12:10 _09C75789ECE59A0AC891A85289474E75
-rw-r--r-- 1 root wheel    8704 Oct 29 12:10 _0CB147FD23752DEFAC3B73925E1E38DB
-rw-r--r-- 1 root wheel     766 Oct 29 12:10 _1D0B16C3296C400D9FD4018E77AC0B05
-rw-r--r-- 1 root wheel   10752 Oct 29 12:10 _24792622E94742D68A455C4F1D54D51F
-rw-r--r-- 1 root wheel     159 Oct 29 12:10 _90A663D25084CD22A230CCB8F55A3700
-rw-r--r-- 1 root wheel   12800 Oct 29 12:10 _BC47FBF48B42E5E71C9901188422814A
-rw-r--r-- 1 root wheel  873984 Oct 29 12:10 _EAFFD36EAA914E7F9D3DAC8BA13DFB6A
-rw-r--r-- 1 root wheel    4608 Oct 29 12:10 _F434E52DDE0AB5C2D68CE7A78B0B2477
-rw-r--r-- 1 root wheel  467456 Oct 29 12:10 _F90AF0EB7EEF445A92623132D00191EA
-rw-r--r-- 1 root wheel  421200 Oct 29 12:10 F_CENTRAL_msvcp100_x86.AFA96EB4_FA9F_335C_A7CB_36079407553D
-rw-r--r-- 1 root wheel  773968 Oct 29 12:10 F_CENTRAL_msvcr100_x86.AFA96EB4_FA9F_335C_A7CB_36079407553D

与解决方案的 Release 目录相比,我可以看到我想要的文件 (itragent.exe) 实际上是 _F90AF0EB7EEF445A92623132D00191EA —— 有没有办法在 Linux 中以编程方式得出这个结论?使用 cabextract 还是借助其他实用程序?那里有两个 XML 文本文件,但它们只有 .NET Framework 版本信息,没有其他信息。

或者,有没有办法强制 VS 2010 以正确的名称在 MSI 中归档可执行文件?

最佳答案

有问题,cab 不包含有关文件“真实”名称的信息。但它包含这些文件的顺序。 MSI 文件有表 File,其中每个压缩文件都有 Sequence 编号。该编号应与文件在文件柜中的序号相同。

我认为,您可以打开 MSI,从 FileName 列中获取真实文件名及其 Sequence 编号,然后以某种方式将它们等同于 cab 序列。

有用的链接:Description of CAB Format , information regarding File tableWindows Installer SDK

关于linux - Linux 中如何从 MSI 中获取文件的真实名称(或者,如何读取 MSI 数据库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123739/

相关文章:

linux - alsa 工具 arecord 无法识别 Arch Linux 上的plughw :1, 0

linux - 某些 Linux 错误消息未被重定向到带有 2>x 的文件

c - 编辑链接列表中的配置文件

visual-studio - 为什么不允许在 Visual Studio 2010 中进行更改?

c# - 如何为超过 1 个项目创建 msi 项目

installation - 是否可以在 Installshield 2012 PRQ 中使用逻辑 OR 或否定条件?

c# - OnAfterInstall 事件去哪里了?

c++ - 使用 OpenMP 将线程绑定(bind)到特定 CPU 内核

c++ - Visual Studio 2015 中的格式更改

c - 创建子进程时重定向输出问题。在 POSIX 中编写自己的 Shell