代码之家  ›  专栏  ›  技术社区  ›  user2421167

Windows Installer Automation和Installshield Basic MSI:链接MSI期间的神秘字符串

  •  0
  • user2421167  · 技术社区  · 11 年前

    编辑: 原来神秘字符串是文件名的简单MD5散列(包括扩展名和大写)。

    我正在尝试通过InstallShield自动化创建链式MSI的过程。在GUI中,这涉及到 Releases ,添加一个链接包,链接到MSI并将文件流式传输到项目中。

    我通过将项目文件分析为XML,对幕后发生的事情进行了逆向工程。它本质上只是表编辑。我知道您可以使用Windows Installer Automation打开 *.ism 文件并访问数据库表( LINK ).

    然而,ISChainPackageData表中只有一个字段,我似乎无法生成或弄清楚它是如何计算的。这是标题为, File 。它是一个32个字符的十六进制字符串,前面有下划线。我发现,决定此字段的唯一属性是正在流式传输的MSI文件的名称。例如:

    通过名称链接到链接的MSI Test.msi ,产量 _29B31F67F21C9EE77CBF8C4C5D24ACE9 .

    更改名称会改变这一点。更改文件,包括将其替换为同名的空文件,都不会。

    我相信这是一种简单的名字杂凑,但我猜不到它。

    有没有人了解他们在这里可能使用什么?

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Michael Urman    11 年前

    关它是一个基于哈希的GUID,由一些东西组合而成。我必须费力地编写代码,以找出确切的内容,但至少是相对路径和文件名,以及可能与所讨论的包相关的内容(可能是其主键值)。

    这用于为包中包含的每个文件生成唯一密钥,而不允许重复文件。(Windows Installer不喜欢主键中的反斜杠。)此处的实际值没有意义;如果您小心地避免重复键,并且不重叠文件路径和名称组合,那么您可能可以输入任何您喜欢的有效键值。但是,这可能会阻止IDE自己检测重复项。