将配置文件标记为“永久”

时间:2013-07-20 06:02:40

标签: .net visual-studio-2010 windows-installer

如何将我的应用程序配置文件标记为“永久”,以便在卸载或升级期间不会删除/覆盖它? “永久”属性似乎仅适用于文件系统级别对象,而配置文件显示为主项目输出输出之一> object,如果标记为Permanent,则也会阻止EXE文件被删除。

我正在使用VS2010附带的标准Windows Installer项目,应用程序类型是WinForms桌面应用程序。

2 个答案:

答案 0 :(得分:0)

就个人而言,我在这里看不到有效的要求。在默认文件版本控制规则下,如果配置文件自安装以来已被修改,它现在包含用户数据,默认情况下不会被删除。默认情况下,它也不会在后续事务中被覆盖,因为它包含用户数据。我通常看到的真正问题是,当较新版本的软件具有不同的架构并且您需要获取最新的架构和用户数据时。 MSI不会这样做,解决方案通常是2个配置文件。一个由安装程序拥有,另一个由应用程序拥有。

答案 1 :(得分:0)

我同意Christoper的意见,也许您不知道,在更新的情况下,无需保留潜在的用户设置更改。或者换句话说,如果您的文件在安装后被更改,则msi update不会更改它永远(但卸载/删除工作)。

但是你在谈论保护这个文件不被卸载删除。 一方面,你可以尝试将其标记为永久性,也许是选择它的另一个答案,有助于那里。我不喜欢和了解这个工具。

但这是良好的架构模式如何在设置中管理设置

  • 应完全卸载设置,包括设置文件。但仅将其视为“设置” - 默认,而不是当前配置。
  • 也许你决定,你的配置是依赖于用户的,这在应用程序本身比在设置中更容易处理。

    1. 程序启动时,在应用程序中启动特殊配置操作/功能(不在您的设置中)。

    2. 在此函数中,首先将安装程序安装的配置文件(或注册表值)读入(主要是机器级)默认配置。

    3. 现在在您的应用中保留对文件的实际配置,例如作为依赖于用户的.config文件(在%USERPROFILE%中的某个位置,如在C:\ Users \ myuser \ AppData \ Local中) 当然,您也可以将%ProgramData%用于机器级别或注册表(HKCU或HKLM)。 但现在这是实际的配置,而不是默认配置。

=>并且因为安装程序不知道这个实际配置(文件),它不会卸载它也不会修改它,只有你可以在你的应用程序中执行它。

=>该“模式”允许扩展利用设置格式,例如,在2.0版中添加新设置,并在您的应用中导入旧的设置格式V1.0。或者更简单,忽略版本2.0中的旧设置。

另一种方法是在MSI设置的用户特定部分进行复制,例如:通过使用“DuplicateFiles”,但我不建议像设置初学者和Visual Studio那样的高级内容,如用户相关的设置资源。在设置中没有必要这样做,上面的模式提供了更大的灵活性和安全性。