0

我有基本的 MSI 项目,它的 2 个或多个版本可以并行安装每个版本到不同的位置,除了一个共享的 exe,它在桌面上有一个快捷方式。

在 1.0 版 MSI 我有组件 - 将文件安装到 \Program Files\prod_1.0 共享文件组件 A - 将 exe 安装到 \Program Files\prod_shared 共享快捷方式组件 B - 在桌面上创建一个快捷方式到组件 A 中的 exe

在 2.0 版 MSI 我有组件 - 将文件安装到 \Program Files\prod_2.0 共享文件组件 A - 将 exe 安装到 \Program Files\prod_shared 共享快捷方式组件 B - 在桌面上创建一个快捷方式到组件 A 中的 exe

两个 MSI 版本的组件 GUID 相同,并且我在共享快捷方式组件中使用的图标未被其他快捷方式使用。我遇到的问题是,如果我有 2 个版本?并行安装,然后我卸载了一个我希望删除桌面快捷方式的版本。我将此行添加到代码 MsiSetComponentState(hMSI,"Shared_Shortcut_Desktop",INSTALLSTATE_ABSENT);

但是当我卸载时,我收到此消息组件不会被删除,因此不会删除“NewShortcut74_AE5D17DE4C4B4737ABB20A0D0358B69E.exe”图标。

知道如何解决吗?

4

1 回答 1

0

如果这两个快捷方式具有相同的组件 guid,那么除非您还没有说其他内容,否则它实际上只是一个共享组件,并且因为它由两个设置共享,所以卸载其中一个不会删除它。如果您将具有相同组件 ID 的共享文件安装到(例如)相同的 CommonFiles 文件夹位置,那么将应用相同的规则 - 它不会删除该文件,因为它正在被其他产品使用。简短的回答是使用不同的 guid(也可以重命名,可能是产品版本)。

对 MsiSetComponentState 的引用与此有什么关系?这意味着您已经编写了一些代码来尝试删除该组件,但如果它仍然被共享,MSI 将不会删除它。

于 2015-06-03T21:07:34.220 回答