2012-04-04 156 views
1

我根据代码here创建了一个安装程序。如果存在以前版本的应用程序,我希望安装程序在安装新版本之前将其删除。WiX主要升级直到衍生后才会完成安装

如果它是一个干净的安装,一切顺利。

如果是升级,会发生奇怪的事情。正如所料,旧版本被删除,注册表被更改,并且快捷方式被放置在桌面上。奇怪的是,当安装程序完成时,主文件不存在于应用程序文件夹中。

在升级后启动后,会弹出一个小的安装程序消息框并指出“请稍候,Windows正在配置-app name- ..”。在此快速消息之后,该文件应该存在于应用程序文件夹中,并且应用程序启动。

在发布之前,它不在那里。我甚至在启动应用程序之前尝试重新启动,以查看是否将该文件放置在某种缓存中。

任何人都见过这种行为?这有点像this questiom,但它发生在每次升级。

回答

1

奇怪的是,当安装程序完成时,主文件不在应用程序文件夹中。

如果组件管理不正确,这是Windows安装程序升级的常见问题。如果从控制面板启动安装程序进入维护模式并执行“修复”,您通常会看到丢失的文件重新出现。在这种情况下,当你启动它时,windows repaired the application automatically

我的头顶部有几个可能的解释:

  1. 您的安装程序的新版本安装在一个新的GUID组件文件。这会导致问题,因为组件GUID应该保持稳定。

  2. 安装程序会为每个组件安装多个文件。这会导致问题,因为组件是否应该安装由keypath确定,并且只有一个文件可以是关键路径。 Stick to one file per component

  3. 该文件的“新版本”实际上具有较低的版本号。这样的“升级”doesn't work correctly

+0

在您可能的解释中,只有第一个符合我的方案。我会看看我能否找到原始应用程序的组件GUID。如果我不能,安装时是否有办法强制文件丢弃? – Tony 2012-04-05 15:11:32

+0

@Tony:不是我所知道的。问题不在于该文件未安装,而是在安装过程结束时删除旧版本产品时卸载该文件。更改GUID会弄乱组件引用计数机制。 – 2012-04-05 15:38:01

+0

我尝试重新使用旧的组件GUID作为主文件,但问题仍然存在。这一次,安装程序也强制重启。我注意到,旧的安装程序的所有文件都在该组件条目下。 – Tony 2012-04-05 17:17:29