【问题标题】:New files added in a patch are removed during uninstall - even when marked permanent在卸载过程中删除补丁中添加的新文件 - 即使标记为永久
【发布时间】:2020-05-30 17:40:39
【问题描述】:

在基本 MSI 项目中使用 InstallShield 2013。我们有一些古老的 Microsoft COM DLL,它们在我们的 MSI 中包含的合并模块中提供。我们现在需要在次要升级补丁 (MSP) 中使用较新的 DLL 更新其中的一些 DLL。我们没有来自 Microsoft 的新合并模块,所以我试图弄清楚如何在我们的应用程序中安装这些新的 DLL。

我添加了 2 个新组件,每个文件一个,并构建了新的 MSP。这些文件已正确安装,尽管我确实必须在自定义操作中手动注册它们,否则补丁将是可卸载的(b/c 我更改了 Class 表)。这一切都很好 - 到目前为止。但是,当我删除补丁时,这两个新文件被删除了!! 这就是问题。我会同意他们被放回以前的版本 - 但不是。他们直接被删除了。我将文件标记为 永久 - 同样的问题。我取消了这两个新文件的 GUID - 同样的问题。因为它们是 MS 文件,所以我可以将它们留在新版本中。我怀疑它没有保留这些,因为我只是在补丁中将其标记为永久,而不是在原始 MSI 中。对吧?

Here's some MSI log info during the installation of the MSP:

MSI (s) (FC:C4) [16:53:38:949]: File = comctl32.ocx: Final State = Install
MSI (s) (FC:C4) [16:53:38:949]: File = osl.dll1.BD822168_4484_412B_AA08_455F82BE5E0F: Final State = Install
MSI (s) (FC:C4) [16:53:48:371]: SELMGR: Component 'comctl32.ocx' is a new component added to feature 'WDCoreComp'
MSI (s) (FC:C4) [16:53:49:371]: Component: comctl32.ocx; Installed: Absent;   Request: Local;   Action: Local;   Client State: Unknown
MSI (s) (FC:C4) [16:53:53:199]: Baseline: Existing comctl32.ocx version 6.0.81.5 does not match any baseline. Will not be cached.

Here's MSI log info from the uninstall of this MSP:
MSI (s) (FC:B8) [16:57:33:236]: File = comctl32.ocx: Final State = Remove
MSI (s) (FC:B8) [16:57:33:236]: File = osl.dll1.BD822168_4484_412B_AA08_455F82BE5E0F: Final State = Overwrite
MSI (s) (FC:B8) [16:58:01:939]: Executing op: FileRemove(,FileName=C:\Windows\SysWOW64\comctl32.ocx,,ComponentId={100B5DC4-FD2D-4311-9ADE-2B65B814F446})

我在其中包含了 osl.dll,以指示我们的一个 DLL 的正常修补例程,它用旧版本覆盖它,但它正在删除 comctl32.ocx。

其他选项似乎非常不可取:

  1. 使用 Orca 将新的 bin 破解到旧的合并模块中并重建安装程序。希望 该补丁会识别出它们是新的并正确安装它们
  2. 在自定义操作中手动执行此操作:在安装过程中保存这些文件的副本,然后安装新文件。在卸载期间,从我们保存的副本中恢复旧版本
  3. 将文件安装在临时文件夹中,将它们复制到官方 MS 位置,然后在那里注册。卸载只会将它们从临时文件夹中删除,而不是从官方 MS 位置中删除

数字 3 听起来最不令人反感,但在自定义操作中手动执行所有这些操作仍然是一种糟糕的形式。

【问题讨论】:

    标签: com installation installshield patch merge-module


    【解决方案1】:

    我第一次尝试#3,但 InstallShit 每次都让我受挫。无论我尝试什么,我都无法将文件复制到“Common Files...\VBA”文件夹中。因此,尽管我使用 InstallShield 来编辑合并模块,但我最终还是做了 #1。幸运的是,我能够替换 bin 并重新保存合并模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-31
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多