C#部署通过安装保留文件

时间:2009-06-23 11:56:31

标签: installer windows-installer

我使用Visual Studio创建了一个安装和部署项目并安装了安装程序。 安装完设置后,它会复制一些文件(XML),这些文件在使用应用程序时以编程方式配置。 现在,如果用户再次重新安装此设置,我需要询问用户是否需要覆盖这些配置文件或保留这些文件?

有关如何实现这一点的想法吗?

谢谢&问候, 弗兰

2 个答案:

答案 0 :(得分:2)

查看file versioning rules的Windows Installer。

简而言之,假设您引用的这些XML文件是未版本控制的文本文件,MSI将比较Created和Modified日期,并且不会替换您认为以编程方式更新的更新后的XML文件(安装后时间)。 / p>

我建议你需要考虑其他一些变量,以确保事情按预期运行:major vs. minor upgradeREINSTALLMODE属性。

答案 1 :(得分:1)

我发现处理这种情况的最佳方法是在应用程序中实现“保留更改”逻辑,而不是通过设置。这样可以避免使设置复杂化并更好地控制配置过程,因为所有逻辑都嵌入在主EXE文件中。这意味着您可以逐步完成整个过程,并以正常的“开发方式”对其进行调试。

要实现此目的,您可以将“基本配置”文件安装到只读位置,例如

  • %PROGRAMFILES%\ MyCompany的\ MyApp的\的myconfig *。*

然后,您的应用程序可以在启动时检测现有配置文件是否存在于用户配置文件(或可写共享位置)中,并询问用户是否新配置文件应该覆盖现有的配置。您还可以轻松实现旧配置的备份功能。

为了在部署后每个用户仅询问一次问题,正常的应用是标记HKLM 并使用最新安装的应用程序版本,然后写一个相应的在复制操作完成或用户解雇时,在HKCU中标记:

  • HKLM \ Software \ MyCompany \ MyApp \ Version = 2.0.0
  • HKCU \ Software \ MyCompany \ MyApp \ Version = 1.0.0

在上面的场景中,已经安装了2.0.0版本的应用程序,但尚未针对相关用户运行每用户配置副本。一旦运行,HKCU版本将设置为2.0.0,并且在HKLM递增之前不会再次运行该操作。