为什么我用MSI安装程序创建的快捷方式每次都会重新启动安装过程?

7

我通过VS 2008为我们的C#应用程序创建了MSI安装程序并进行了安装。它在桌面上为我创建了一个快捷方式。我点击该快捷方式,安装过程再次运行,最后启动了我们的应用程序。昨天在添加一些自定义操作以创建数据库之前,这不是这样的。我没有在安装程序中重新创建快捷方式。为什么会这样呢?

6个回答

7

手动使用Orca打开MSI文件。在Property表格中添加以下记录(不带引号):

Property = 'DISABLEADVTSHORTCUTS' Value = '1'

这也可以作为后期构建事件的一部分进行脚本化和运行。


6

MSI带有自动修复功能,会在使用快捷方式启动应用程序时检查是否存在安装的所有组件。

在您的情况下,可能有一个或多个组件已被删除,因此安装程序会再次启动以修复您的安装。

为了防止自动修复运行,请执行以下操作之一:

  • 确保未删除任何文件、注册表设置或其他已安装组件

或者

  • 不要为这些组件设置关键路径。这将防止MSI检查这些特定组件

从您的其他问题中看来,您的MSI是由Visual Studio Setup和Deployment Project创建的。不幸的是,Visual Studio内部没有修改关键路径的选项。您有以下选项:

  • 使用Orca手动修改MSI(这不是一个好的选择,因为它需要手动操作)
  • 编写脚本如VBScript来修补MSI文件
  • 转移到更高级的安装系统,如WiX或NSIS,以获得更多控制

你说得对。我删除了一些临时设置文件(批处理文件和SQL文件)。我需要找到一个避免这种情况的方法。谢谢。 - 5YrsLaterDBA
@5YrsLaterDBA:由于您的设置似乎已经非常复杂,因此您应该一定要寻找其他创建设置的方式,而不是使用VS。无论如何,VS设置项目将来会消失。如果您正在使用VS 2010,您也可以尝试InstallShield LE。 - Dirk Vollmar
遗憾的是,VS安装项目(VDPROJ)无法控制关键文件(所有资源,包括注册表键都是单个组件的单个关键文件),也无法禁用广告快捷方式。您必须成为相当不错的MSI绝地大师才能知道如何解决这个问题。我建议看一下InstallShield 2010LE或WiX。对我来说,VDPROJ在很多年前就已经死了。 - Christopher Painter

1
当应用程序删除安装过程中部署的文件时,就会发生这种情况。自动修复被激活,因此您会看到安装屏幕。

它对我起作用了,谢谢!我在安装时忘记了一个过时的'config.txt'文件,但是当应用程序启动时,这个文件会被删除并替换为'config.xml'文件。从安装程序中删除该文件就足够了。 - Elo

1

这个快捷方式是指向你的应用程序还是安装程序?如果它指向安装程序并将其更改为应用程序,问题是否解决?


1

听起来系统认为安装已经损坏,并自动尝试修复。请查看事件日志(在应用程序事件日志中查找MsiInstaller的来源)。

您是否一直在构建多个副本?


0

我曾经遇到过同样的问题。在我的情况下,问题出在部署项目属性中的“制造商”和“产品名称”字段上。它需要与您的快捷方式指向的文件夹结构相同,否则您将在事件查看器中遇到“资源'C:\ Program Files(x86)[Manufacturer] [ProductName] \ '不存在”的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接