【问题标题】:Windows Installer Automation and Installshield Basic MSI: Mystery String during Chained MSIWindows Installer Automation 和 Installshield Basic MSI:链式 MSI 期间的神秘字符串
【发布时间】:2014-08-19 03:14:24
【问题描述】:

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

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

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

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

链接到名称为 Test.msi 的链式 MSI,生成 _29B31F67F21C9EE77CBF8C4C5D24ACE9

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

我相信这是名称的某种简单哈希,但我没有猜到它。

有没有人知道他们可能在这里使用什么?

谢谢!

【问题讨论】:

    标签: hash windows-installer installshield


    【解决方案1】:

    关闭。它是一些东西组合的基于哈希的 GUID。我不得不费力地查找代码以找出确切的内容,但它至少是相对路径和文件名,并且可能与所讨论的包相关(可能是它的主键值)。

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

    【讨论】:

    • 有趣。当您说 IDE 时,我相信您指的是 InsallShield?我希望简单地生成一个常规 GUID 并手动确保没有任何重复的文件(尽管在这种特定情况下这不太可能发生)。如果我从您所说的内容中正确收集,是否可以合理地假设这不会对结果 MSI 的行为产生任何不良影响? (感谢详细回复!)
    • 正确。如果您打开一个修改过的项目并尝试添加一个重复的文件,它可能会让您生成不同的密钥。但只要您避免这种情况,我就不会在运行时预见到问题。如果有冲突,可能只是第二个文件的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多