2011-01-07 88 views
0

最近,我们向我们的安装程序添加了一项功能,要求稍稍重命名几个桌面快捷方式(将版本号添加到名称中)。我在安装程序将旧快捷方式替换为新快捷方式时遇到问题。最初报告问题时,正在安装新的快捷方式,但旧的快捷方式未被删除。在处理完这个问题之后,我遇到了一个混合问题:其中一个旧的捷径正在被删除(迄今为止,这么好),但另一个不是(不太好),并且在这两种情况下,新的捷径没有被安装(甚至更糟糕)。我试着改变安装这些快捷方式的每个组件的GUID,我甚至曾尝试在每个负责快捷方式的合并模块中更改ProductCode属性,但似乎没有得到所需的结果行为(在升级时与旧的和新的一起)。如何强制Windows Installer替换重命名的快捷方式?

只需重新引导相关组件,以下是日志文件为安装状态显示的内容(为了帮助进行调试,我稍微重命名了这些组件,以便我可以分辨哪些是来自旧版本和来自新):

... 
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local; Request: Absent; Action: Absent 
... 
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local; Request: Absent; Action: Null 
... 

正如你可以在日志中看到,新的快捷方式,应在两种情况下会在,但他们没有。我无法解释为什么安装程序使用两个旧快捷方式做了不同的事情。

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

编辑:我已将所有内容重置为之前的内容,但当前ProductVersion和ProductCode除外。完成之后,安装程序会保留旧的快捷方式,但不会安装新的快捷方式。 (这是与最初报告和我能够复制的行为不同的,即旧的快捷方式已安装,并且新的(已重命名的)快捷方式也已安装。)在重新引导两个相关组件后,安装程序删除旧的快捷方式,但仍不会安装新的快捷方式。 (这就是在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 
... 

前两行似乎表明,新的快捷方式正在安装,但他们不是。之后的修复将安装新的快捷方式。

当运行原始问题(升级后存在旧快捷方式和新快捷方式)的安装程序的副本时,上面最后两行报告的操作为空而不是缺席。

编辑2:当前的行为是旧的快捷方式保持安装,并且没有安装新的快捷方式。当我重新GUID他们的组件时,旧的快捷方式被删除,并且新的仍未被安装。我尝试了克里斯托弗Painter的解决方案,但都没有去任何地方。 (请参阅我对该答案的评论。)必须有一种方法可以安装新的版本快捷方式,以替代旧的未版本化快捷方式。有没有人可以提供可行的解决方案?

编辑3:事实证明,没有安装新快捷方式的新行为是由于我在获取源文件时犯的一个错误,并且进入安装程序的错误没有并不像那些被替换的那样最新。一旦最新的文件被编译到安装程序中,我就可以得到所需的结果(旧的快捷方式出来,新的快捷方式)。 (有关更多信息,请参阅我的答案。)

+0

较新的Windows版本(Vista和更高版本)使用快捷方式缓存。因此,如果您尝试更改快捷方式属性(名称,图标等),Windows仍将使用缓存中的一个。我不确定这是否适合您,但您可以在删除原始版本后尝试重新启动机器。 – 2011-01-07 08:11:48

回答

0

当我们为每个营业额(内部版本号一直在增加)重新版本时,对于WI而言这是一个重大升级,所以一旦我获得了最新的安装文件,重新引导包含需要替换的桌面快捷方式的组件实现了我之前的结果。

1

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

两种可能性:

1)使用RemoveFile表来摆脱旧的快捷方式。

2)用旧文件保留旧的组件,并使用带有空操作条件的传递属性(谷歌如何删除小升级文件中的文件即a puncture组件模式)以使组件和它的文件/快捷方式即将被删除。使用新文件名和要安装的新快捷方式名称创建一个新组件,以获取新快捷方式。

我想我会先尝试#1。 :-)

+0

尝试了#1的变化(在某些情况下升级时需要保持快捷方式)。结果:删除旧的快捷方式,但未安装新快捷方式。尝试#2,但得到内部错误2756没有有用的日志文件来显示它,所以我不明白什么是错的。 – RobH 2011-02-10 22:39:53