应用程序链接到msi

时间:2009-06-29 18:50:37

标签: vb.net visual-studio-2005 windows-installer

我正在使用VS2005。

使用.msi安装应用程序后。每次加载此应用程序时,如果文件已被修改,它会尝试查找设置并再次自行安装。如果删除.msi文件,则应用程序甚至无法加载。

有没有办法删除应用程序和msi之间的这个链接?

我确定它只是一个复选框。

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在安装Advertised Shortcut,这意味着当您双击运行应用程序的快捷方式时,Windows Installer会检查以确保安装了应安装的所有文件,注册表项等。

由于某些原因,Windows Installer检测到您的安装已“损坏”,这可能意味着文件已更改,已删除,注册表项丢失或其他原因。

如果您安装了未公布的快捷方式,则会停止修复。然而,更好的解决方案是尝试找出为什么它正在尝试修复您的安装。通常,这表明您的应用程序或安装设计存在问题 - 组件中的任何“密钥文件”在默认情况下都不允许更改,如果已修改则将“修复”。您可能在Visual Studio中没有任何其他选项,因为它相当有限。

我强烈建议您选择The Definitive Guide to Windows Installer的副本,它会清楚地使用VS2005解释所有Windows Installer概念,并展示如何通过使用Orca编辑MSI来解决某些限制。

修改(在本书中为您查找...)您可能需要将DISABLEADVTSHORTCUTS添加到Property表中,其值为{{1} }。我不使用VS所以我不能说是否有复选框。

您也可以在Windows文件夹中“缓存”MSI,这意味着即使删除了原始MSI,您仍然可以修复。再次,不确定如何使用VS。

答案 1 :(得分:1)

有一点需要注意的是,MSI是发布和部署机制 - 它是面向安装MSI的交互式测试,然后更改已安装的文件 - 就像你在开发过程中那样做。

整个技术旨在严格安装MSI文件中的内容维护已部署的配置,并防止手动或意外更改。在作为测试或开发的一部分执行手动更改的系统上,这可能非常烦人,但MSI文件实际上只是“正在完成其工作”。

正如sacha所说,有几种方法可以禁用或解决此问题:

  • 使用非广告(常规)快捷方式
  • 设置DISABLEADVTSHORTCUTS属性
  • 直接启动快捷方式指向的EXE文件(这完全绕过MSI - 如果原始MSI丢失,可用于启动应用程序)

然后有几个更高级的选项并不是真正推荐的。例如,您可以识别可能需要手动调整的所有文件,并专门为这些文件禁用修复行为。这通常通过将空白GUID 设置为文件的托管组件来完成,或者设置组件属性“如果存在密钥路径则永远不会覆盖”( msidbComponentAttributesNeverOverwrite )。还有其他一些高级调整,但没有什么是值得推荐的。

另请注意,触发修复的不仅仅是广告的快捷方式调用已宣传的COM服务器广告文件扩展名也可能会触发自我修复。

如果遇到MSI一直要求输入源的情况,只需从添加/删除程序中卸载MSI即可清除系统上的程序注册。然后,您可以使用新构建的MSI重新安装它。