在VS安装程序(安装程序)项目中禁用播发文件关联

时间:2009-03-24 22:25:14

标签: c# visual-studio installer windows-installer

我在VS 2005中使用了一个安装项目,并且我已经了解了广告快捷方式的“欢乐”。

我的项目在桌面和开始菜单上创建程序的快捷方式,无论何时运行,MSI都会重新安装应用程序(因为已安装的文件已更改)。我还为我的应用程序创建了一个文件关联,它也做了同样的事情。

我已经想出如何设置一个vbscript,我可以运行后构建来禁用广告的快捷方式(使用DISABLEADVTSHORTCUTS = 1),但是,我不知道如何试图找出如何实现相同的功能文件关联!

更新: 让我解释一下我在做什么然后你可以告诉我是否有更好的方法。我要包含一个我的应用程序依赖的单独实用程序。我不想将该实用程序的每个文件都添加为依赖项,因为它真的使安装项目变得混乱,所以我将其压缩并添加了zip。

然后我运行一个安装程序实现并覆盖OnAfterInstall以将实用程序解压缩到适当的位置,然后删除实用程序zip。删除实用程序zip会在运行通告的快捷方式时触发整个安装/修复过程。

所以我想我的解决方案要么是A)禁用公布的快捷方式和公布的文件关联,要么B)让MSI安装程序不会触发缺失的zip文件的安装/修复。

2 个答案:

答案 0 :(得分:2)

问题是为什么安装的文件发生了变化?

MSI修复的好处是,如果某些内容被搞砸,病毒会感染您的应用程序,或者某些愚蠢的用户删除了错误的文件/注册表项,那么windows isntaller弹性检查会启动并修复您的所有文件。

Windows Installer弹性检查会在很多情况下启动。我建议您更改应用程序的行为,以免更新已安装的文件。或者,如果您不想符合“最佳实践”并且不更新已安装的文件,那么您可能需要使用备用安装程序技术。

例如,您不是要对程序文件中的内容进行更改吗?您的应用程序如何处理在受限用户帐户下运行?在终端服务器上?在Vista上?这些方案都不允许写入程序文件文件夹(或任何受保护的每台机器位置)

防止此行为发生的一个解决方案是:

  • 将默认配置文件安装到All Users\Application Data
  • 首次将这些内容复制到Username\Application Data(又名%AppData%
  • 仅更新每用户文件。这可以防止在MSI修复期间丢失/更改配置。

更新:尝试不将ZIP设置为特定组件中的“密钥文件”,我认为Windows安装程序仅检查密钥文件是否未更改。我想你很可能会很快遇到VS2005安装项目的限制,所以如果你有时间的话,可能值得查看WiX。您还会发现,Windows Installer安装项目几乎总是混乱,有数百或数千个组件似乎是野兽的本质。

答案 1 :(得分:0)

尝试在安装项目中标记.zip文件属性Exclude = true,这将使文件可供安装程序使用,而无需将其安装在目标计算机上。

也就是说,我同意Sascha的说法,即安装程序项目通常有数百个依赖项。