0

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

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

...
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
...

前两行似乎表明正在安装新的快捷方式,但实际上并没有。之后的修复将安装新的快捷方式。

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

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

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

4

2 回答 2

1

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

两种可能:

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

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

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

于 2011-01-07T04:33:29.377 回答
0

当我们为每个营业额重新版本所有内容(内部版本号总是在增加)时,就 WI 而言,这是一次重大升级,所以一旦我将最新的文件安装到安装中,重新引导包含桌面的组件需要替换的快捷方式达到了我所追求的结果。

于 2011-02-15T17:43:33.827 回答