Windows installer 如何强制Windows Installer用重命名的快捷方式替换快捷方式?

Windows installer 如何强制Windows Installer用重命名的快捷方式替换快捷方式?,windows-installer,wise,Windows Installer,Wise,最近,我们在安装程序中添加了一个功能,需要稍微重命名几个桌面快捷方式(名称中添加了版本号)。我在让安装程序用新的快捷方式替换旧的快捷方式时遇到问题。最初报告问题时,正在安装新的快捷方式,但没有删除旧的快捷方式。在解决这个问题之后,我遇到了一个复杂的问题:一个旧的快捷方式被删除(到目前为止,还不错),但另一个不是(还不太好),在这两种情况下,都没有安装新的快捷方式(甚至更糟)。我尝试过在安装这些快捷方式的每个组件上更改GUID,甚至有一次,我尝试过在负责快捷方式的每个合并模块中更改ProductC

最近,我们在安装程序中添加了一个功能,需要稍微重命名几个桌面快捷方式(名称中添加了版本号)。我在让安装程序用新的快捷方式替换旧的快捷方式时遇到问题。最初报告问题时,正在安装新的快捷方式,但没有删除旧的快捷方式。在解决这个问题之后,我遇到了一个复杂的问题:一个旧的快捷方式被删除(到目前为止,还不错),但另一个不是(还不太好),在这两种情况下,都没有安装新的快捷方式(甚至更糟)。我尝试过在安装这些快捷方式的每个组件上更改GUID,甚至有一次,我尝试过在负责快捷方式的每个合并模块中更改ProductCode属性,但似乎没有得到所需的行为(升级时旧的和新的)

在重新引导相关组件之后,以下是日志文件显示的安装状态(为了帮助调试,我稍微重命名了组件,以便可以区分哪些组件来自旧版本,哪些来自新版本):

正如您在日志中看到的,在这两种情况下,新的快捷方式都应该进入,但它们不是。我无法解释为什么安装程序使用两个旧的快捷方式做不同的事情

仅供参考:我的开发环境是Wise Installation Studio 7.0

编辑:我已将所有内容重置为以前的状态,但当前产品版本和产品代码除外。完成后,安装程序保留已安装的旧快捷方式,但不安装新快捷方式。(这与最初报告的和我能够复制的行为不同,即旧的快捷方式保留安装,新的(重命名的)快捷方式也已安装。)重新引导两个相关组件后,安装程序删除旧的快捷方式,但仍不安装新的快捷方式。(这就是XP上发生的情况。)

重新引导组件后,日志中的相关行如下所示:

...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...
前两行似乎表示正在安装新的快捷方式,但它们不是。随后的维修将安装新的快捷方式

当运行可以复制原始问题(升级后存在旧的和新的快捷方式)的安装程序副本时,上面最后两行中报告的操作将为Null,而不是不存在

编辑2:当前的行为是旧的快捷方式保持安装状态,而新的快捷方式未安装。当我重新引导它们的组件时,旧的快捷方式将被删除,而新的快捷方式仍没有安装。我尝试了克里斯托弗·派特的解决方案,但都没有成功。(请参阅我对该答案的评论。)必须有一种方法来安装新版本的快捷方式,以取代旧的未版本快捷方式。有没有人能提供有效的解决方案


编辑3:事实证明,新快捷方式未安装的新行为是由于我在获取源文件时犯了一个错误,而进入安装程序的快捷方式不如要替换的快捷方式最新。一旦最新的文件被编译到安装程序中,我就能够得到想要的结果(旧的快捷方式被删除,新的快捷方式被删除)。(更多信息请参见我的答案。)

快捷方式只是目录中的一个.lnk文件。您不会重命名快捷方式,而是将其删除并创建一个新的快捷方式。如果你做了一个大的升级,删除/重新安装应该可以处理这个问题,但是如果你做了一个小的升级,它会把旧的留下,因为新的MSI不知道

两种可能性:

1) 使用RemoveFile表删除旧的快捷方式

2) 将旧组件与旧文件放在一起,并在无操作条件下使用可传递属性(google如何在小升级组件模式中删除文件)以删除组件及其文件/快捷方式。使用要安装的新文件名和新快捷方式名创建新组件,以获取新快捷方式


我想我应该先试试

由于我们每次更新都会对所有内容进行重新版本(内部版本数量一直在增加),所以就WI而言,这是一次重大升级,所以一旦我在安装中获得了最新的文件,对包含需要更换的桌面快捷方式的组件进行调整,达到了我想要的效果。

较新的Windows版本(Vista及以上版本)使用快捷方式缓存。因此,如果您试图更改快捷方式属性(名称、图标等),Windows仍将使用缓存中的快捷方式。我不确定您的情况是否如此,但您可以尝试在删除原始版本后重新启动计算机。尝试了#1上的变体(在某些情况下升级时需要保留快捷方式)。结果:删除了旧的快捷方式,但未安装新的快捷方式。尝试了#2,但得到了内部错误2756,没有有用的日志文件显示,所以我看不出出出什么问题。
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...