最近,我们在安装程序中添加了一个功能,该功能需要稍微重命名的几个桌面快捷方式(添加了版本编号)。我有问题让安装程序用新快捷方式替换旧快捷方式。当问题最初报告时,正在安装新快捷方式,但没有删除旧快捷方式。解决问题后,我遇到了一个不同的问题:一个旧快捷方式正在删除(到目前为止,很好),但是另一个捷径不是(不太好),在这两种情况下,新的捷径是没有安装(甚至更糟)。我已经尝试在安装这些快捷方式的每个组件上更改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
...

正如您在日志中看到的那样,在两种情况下都应该进行新的快捷方式,但事实并非如此。而且我不知所措,可以解释为什么安装人员使用两个旧快捷方式做不同的事情。

仅供参考:我的开发环境是明智的安装工作室7.0。

编辑: 除了当前的产品代码和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: 当前的行为是旧的快捷方式保持安装,并且没有安装新快捷方式。当我重新确定其组件时,旧快捷方式被删除,而新快捷方式仍未安装。我尝试了克里斯托弗·画家的解决方案,但都没有去任何地方。 (请参阅我对该答案的评论。)必须有一种方法来制定新版本的快捷方式代替旧的未陈述。有没有人可以提供有效的解决方案?

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

有帮助吗?

解决方案 2

当我们重新介绍每个营业额的所有内容(构建号总是在增加),就WI而言,这是一个重大升级,因此,一旦我将最新的文件放入了安装中,则将包含台式机的组件重新升级需要更换的快捷方式可以实现我所追求的结果。

其他提示

快捷方式只是目录中的.lnk文件。您不会重命名快捷方式,而是删除它并创建新的捷径。如果您进行重大升级,则删除 /重新安装应处理此操作,但是如果您要进行较小的升级,则会将旧的MSI留下来,因为新的MSI不知道。

两种可能性:

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

2)将旧的组件与旧文件保持周围,并使用具有NO-OP条件的传递属性(Google如何以较小的升级aka dumcture组件模式删除文件)来导致组件,并且要删除它的文件 /快捷方式。创建一个具有新文件名和新快捷方式名称的新组件,以获取新的快捷方式。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top