【问题标题】:How to remove desktop shortcut when MSI minor upgrade is get uninstalled?卸载 MSI 次要升级时如何删除桌面快捷方式?
【发布时间】:2022-08-18 03:47:51
【问题描述】:

我的客户希望在程序的桌面快捷方式的文件名中看到一些“版本号”。例如:\"Foobar 10.lnk\" 或 \"Foobar 12.lnk\"。

因此,我们的 .WXS 文件之一中有以下 sn-p:

<DirectoryRef Id=\"DesktopFolder\">
  <Component Id=\"...\" Guid=\"...\">
    <Shortcut Id=\"....\" Name=\"Foobar_10\" ... />
    <RegistryValue ... />
  </Component>
</DirectoryRef>

每次发布新版本时,我们都会更新该 .WXS 文件。在我们生产时,这个方案没有问题重大升级,因为我们的重大升级先卸载现有产品,然后再安装新版本。

但是现在我们必须发布一个小升级.并将\"Foobar 10.1.lnk\" 文件放入\"Desktop\" 目录。因此,我们有一个版本 10 的 MSI 文件,另一个版本 10.1 的 MSI 文件和用于将产品从版本 10 升级到版本 10.1 的 MSP 补丁。

根据Changing the Product Code,使用小升级添加或删除新快捷方式是合法的:

更新可以添加、删除或修改不被两个或多个功能共享的组件的...快捷方式。 ...如果更新删除了资源,它还应该更新 RemoveFile 和 RemoveRegistry 表以删除任何未使用的文件、注册表项或已安装的快捷方式。

如果我们使用上面的快捷方式 sn-p 安装 MSP 文件,我们最终会在 \"Desktop\" 目录中得到两个快捷方式:Foobar_10.lnk 和 Foobar_10.1.lnk,因为转换应用于Shortcut 表。因此,根据我已经提到的文章,我们必须更新RemoveFile 表:

<DirectoryRef Id=\"DesktopFolder\">
  <Component Id=\"...\" Guid=\"...\">
    <Shortcut Id=\"....\" Name=\"Foobar_10.1\" ... />
    <RemoveFile Id=\"...\" Name=\"Foobar_10.lnk\" On=\"install\" />
    <RegistryValue ... />
  </Component>
</DirectoryRef>

现在,如果将那个 MSP 文件安装到已经安装的 ``Foobar version 10\'\' 上,他/她会在 \"Desktop\" 目录中获得单个 .LNK 文件——Foobar_10.1.lnk。

到目前为止,一切都很好。

但是,如果使用系统的“控制面板”删除该次要升级(因此,只进行次要升级,恢复到“Foobar 版本 10”),他/她将再次获得两个快捷方式:Foobar_10。 1.lnk \"remained\" 来自 MSI+MSP,Foobar_10.lnk 由转换后的Shortcut 表中的CreateShortcuts 操作创建。

我的主要问题是: 卸载 MSP 次要升级时如何删除文件 Foobar_10.1.lnk?我应该“检查”哪些操作/属性来捕获此类卸载?

顺便说一句,我试图从卸载小升级中获取日志,但我未能使用命令行卸载升级。例如,这个:

msiexec -uninstall {valid-patch-guid-here} -package foobar.msi

以“foobar.msi”的维护模式结束。以下两个命令:

msiexec /I {valid-product-code-guid} MSIPATCHREMOVE={valid-patch-guid}
msiexec -package {valid-product-code-guid} -uninstall {valid-patch-guid}

给出相同的(这些命令来自Uninstalling Patches)。

我只能使用“控制面板”删除次要升级。因此,我无法获得卸载日志。没有它,我看不到在这个过程中会发生什么。我知道一次问两个问题是个坏主意,但可能有人知道如何使用命令行删除补丁?

谢谢。

    标签: wix wix3


    【解决方案1】:

    我找到了一个解决方案——“Transitive components”。次要升级:a)为快捷方式(在“桌面”和/或“开始菜单”中)添加新的传递组件,条件评估为“真”,b)将现有“快捷方式组件”的条件修改为评估为“假”。

    灵感来自 SO 上的“Minor upgrade fails on removing files”主题。谢谢克里斯托弗画家@。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多