MSI卸载:不会删除get message组件,因此不会删除该图标

时间:2015-06-03 11:17:02

标签: windows-installer installshield uninstall desktop-shortcut

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

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

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

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

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

知道怎么解决吗?

1 个答案:

答案 0 :(得分:0)

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

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