InstallShield文件序列号

时间:2011-04-13 18:20:49

标签: windows-installer installshield installscript-msi

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

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

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

有什么想法?

由于

3 个答案:

答案 0 :(得分:2)

可能是一些问题......

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

如果这不能解决问题,它可能与你如何将新文件添加到包(你有外部CAB文件吗?)和补丁构建选项的组合有关'二进制'补丁

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

user707082 是正确的,您应该指向MSI的上一版本,以允许Installshield为同步guids 进行新设置,但这通常适用于动态生成的组件,如果通过手动覆盖违反Windows Installer组件规则,修补程序可能仍会失败。

要使补丁正常工作,我可以按照一些经验法则

  • 每个文件一个组件
  • 更改的绝对文件路径表示新组件GUID
  • 永远不要更改不改变绝对安装路径的文件的组件GUID
  • 不要使用Installshield的动态文件链接
  • 遵循所有组件创建规则(有很多,请参阅SDK)
  • 仅使用完整文件补丁,绝不使用二进制补丁
  • 还有一些我现在不记得的。这不是我的开发人员系统