我正在使用VS2005。
使用.msi安装应用程序后。每次加载此应用程序时,如果文件已被修改,它会尝试查找设置并再次自行安装。如果删除.msi文件,则应用程序甚至无法加载。
有没有办法删除应用程序和msi之间的这个链接?
我确定它只是一个复选框。
谢谢!
答案 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所说,有几种方法可以禁用或解决此问题:
然后有几个更高级的选项并不是真正推荐的。例如,您可以识别可能需要手动调整的所有文件,并专门为这些文件禁用修复行为。这通常通过将空白GUID 设置为文件的托管组件来完成,或者设置组件属性“如果存在密钥路径则永远不会覆盖”( msidbComponentAttributesNeverOverwrite )。还有其他一些高级调整,但没有什么是值得推荐的。
另请注意,触发修复的不仅仅是广告的快捷方式。 调用已宣传的COM服务器或广告文件扩展名也可能会触发自我修复。
如果遇到MSI一直要求输入源的情况,只需从添加/删除程序中卸载MSI即可清除系统上的程序注册。然后,您可以使用新构建的MSI重新安装它。