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

C# 在VS安装程序(安装程序)项目中禁用播发文件关联,c#,visual-studio,installation,windows-installer,C#,Visual Studio,Installation,Windows Installer,我在VS2005中使用了一个安装项目,我已经了解了所有关于广告快捷方式的“乐趣” “我的项目”在桌面和“开始”菜单上创建程序的快捷方式,每当这些快捷方式运行时,MSI都会重新安装应用程序(因为已安装的文件已更改)。我还为我的应用程序创建了一个文件关联,它也做了同样的事情 我已经知道了如何设置一个vbscript,我可以运行post build来禁用播发的快捷方式(使用DISABLEADVTSHORTCUTS=1),但是,我不知道如何通过文件关联实现相同的功能 更新: 让我解释一下我在做什么,然后

我在VS2005中使用了一个安装项目,我已经了解了所有关于广告快捷方式的“乐趣”

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

我已经知道了如何设置一个vbscript,我可以运行post build来禁用播发的快捷方式(使用DISABLEADVTSHORTCUTS=1),但是,我不知道如何通过文件关联实现相同的功能

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

然后,我运行一个安装程序实现并重写OnAfterInstall以将实用程序解压缩到正确的位置,然后删除实用程序zip。当运行播发的快捷方式时,删除实用程序zip将触发整个安装/修复过程


因此,我想我的解决方案是A)禁用播发的快捷方式和播发的文件关联,或者B)让MSI安装程序不要触发对丢失的zip文件的安装/修复。

问题是为什么安装的文件发生了更改?

MSI修复的好处是,如果有什么事情搞砸了,病毒感染了你的应用程序,或者某个愚蠢的用户删除了错误的文件/注册表项,那么windows isntaller弹性检查将启动并修复你的所有文件

在许多情况下,Windows Installer弹性检查将生效。我建议您更改应用程序的行为,这样您就不会更新已安装的文件。或者,如果您不想遵守“最佳实践”,也不想更新已安装的文件,则可能需要使用其他安装技术

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

防止这种行为发生的一种解决方案是:

  • 将默认配置文件安装到
    All Users\Application Data
  • 第一次运行时将这些复制到
    Username\Application Data
    (又称
    %AppData%
  • 仅更新每个用户的文件。这可以防止在MSI修复期间丢失/更改配置

更新:请不要在特定组件中将ZIP设置为“密钥文件”,我认为windows installer只会检查密钥文件是否未更改。我认为您可能会很快遇到VS2005安装项目的局限性,因此如果您有时间,可能值得一看。您还会发现,Windows Installer安装项目几乎总是杂乱无章,有成百上千个组件似乎是怪兽的天性。

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


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

你的观点是正确的,但我仍然想知道如何禁用广告文件关联。你需要删除zip吗?我不需要删除它,我只是想删除它会很好,因为它已经解压缩,它只是占用了空间。