1

我正在将文件添加到现有的 InstallShield MSI 项目,构建 MSI,然后从中创建 MSP 以应用于现有安装。

问题是,当我将新文件添加到 MSI 项目时,序列号不会增量设置。我进入了直接编辑器,并编辑了序列号,使它们从旧的停止处开始,但是当我构建项目时,我输入的序列号被忽略了。如果这样的序号不同,会导致MSP安装不正确。

有没有办法修复被 InstallShield 覆盖的序列号?如果我不向项目添加任何新文件,则现有文件的序列号保持不变。就好像我正在添加的新文件正在“中间”安装。

有什么想法吗?

谢谢

4

3 回答 3

2

可能有几个问题...

如果我没记错的话,我认为您需要在设置用于指向以前的 MSI 包的属性之后构建新的 MSI。这将强制新包使用与旧包相同的文件 ID。

如果这不能解决问题,它可能与您如何将新文件添加到包中(您有外部 CAB 文件吗?)以及用于构建“二进制”的补丁构建选项的组合有关修补

于 2011-04-14T01:01:14.143 回答
1

您可以尝试以XML 格式保存项目- 这可以解决内部“无序”数据库顺序的一些奇怪之处。以这种方式第一次保存、关闭和重新加载后,您可以根据需要转换回二进制项目。如果您在添加新文件后尝试此操作,请确保重新排序 File 表的 XML 中的记录,或在尝试此操作之前将其删除。

于 2011-04-14T13:30:27.093 回答
0

这些序号不需要按顺序设置。事实上,在大多数情况下,我倾向于在 Windows 安装程序中为不同的序列号使用 10 的增量,以确保我可以在不更改所有项目的所有数字的情况下重新排序。不要乱用这些数字,让 Installshield 控制它们。

user707082是正确的,您应该指向以前的 MSI 版本以允许 Installshield同步新设置的 guid,但这通常适用于动态生成的组件,如果您通过手动覆盖违反 Windows Installer 组件规则,补丁可能仍会失败.

为了使补丁正常工作,我遵循一些经验法则

  • 每个文件一个组件
  • 更改的绝对文件路径意味着新的组件 GUID
  • 永远不要更改不会更改绝对安装路径的文件的组件 GUID
  • 不要使用 Installshield 的动态文件链接
  • 遵循所有组件创建规则(有很多,请参阅 SDK)
  • 只使用完整的文件补丁,从不使用二进制补丁
  • 再加上一些我现在不记得的。这不是我的开发者系统
于 2011-04-24T00:10:29.967 回答