如何将我的应用程序配置文件标记为“永久”,以便在卸载或升级期间不会删除/覆盖它?“永久”属性似乎仅适用于文件系统级别的对象,而配置文件显示为我的主要项目输出对象的输出之一,如果标记为永久,也会阻止 EXE 文件被删除。
我正在使用 VS2010 附带的标准 Windows Installer 项目,应用程序类型是 WinForms 桌面应用程序。
如何将我的应用程序配置文件标记为“永久”,以便在卸载或升级期间不会删除/覆盖它?“永久”属性似乎仅适用于文件系统级别的对象,而配置文件显示为我的主要项目输出对象的输出之一,如果标记为永久,也会阻止 EXE 文件被删除。
我正在使用 VS2010 附带的标准 Windows Installer 项目,应用程序类型是 WinForms 桌面应用程序。
就个人而言,我在这里没有看到有效的要求。在默认文件版本控制规则下,如果配置文件在安装后已被修改,它现在包含用户数据,默认情况下不会被删除。默认情况下,它也不会在后续事务期间被覆盖,因为它包含用户数据。我通常看到的真正问题是,当软件的较新版本具有不同的架构时,您需要获取最新的架构和用户数据。MSI 不会这样做,解决方案通常是 2 个配置文件。一个由安装程序拥有,一个由应用程序拥有。
我同意 Christoper 的观点,也许您不知道,在更新时无需保存潜在的用户设置更改。或者换句话说,如果您的文件在安装后发生更改,则任何 msi 更新都不会更改它(但卸载/删除有效)。
但是您正在谈论通过卸载保护此文件不被删除。一方面,您可以尝试将其标记为永久性的,也许选择它的另一个答案,会有所帮助。我不喜欢也不太了解那个工具。
但这是一个很好的架构模式How to manage settings in a setup:
也许您决定,您的配置取决于用户,这在应用程序本身中比在设置中更容易处理。
当程序启动时,在您的应用程序中(不是在您的设置中)启动一个特殊的配置操作/功能。
在此函数中,首先读取安装程序安装的配置文件(或注册表值)作为(主要是机器级)默认配置。
现在在您的应用程序中将实际配置保存到一个文件中,例如作为一个与用户相关的 .config 文件(在 C:\Users\myuser\AppData\Local 中的 %USERPROFILE% 中的某个位置)当然您也可以使用 %ProgramData%对于机器级或注册表(HKCU 或 HKLM)。但现在这是实际配置,而不是默认配置。
=> 因为安装程序不知道这个实际的配置(文件),所以它不会卸载它也不会修改它,只有你可以在你的应用程序中进行。
=> 这种“模式”允许扩展利用设置格式,例如在 2.0 版中添加新设置,并在您的应用程序中导入旧设置格式 V1.0。或者,更简单,忽略 2.0 版中的旧设置。
另一种方法是在 MSI 设置的用户特定部分中进行复制,例如通过使用“DuplicateFiles”,但我不建议设置初学者或 Visual Studio 使用用户相关设置资源等高级内容。在设置中不需要这样做,我上面的模式提供了更多的灵活性和安全性。