微软处理应用程序配置和运行时数据的首选方式乍一看似乎很明显:App.config,它将存储在应用程序执行目录中(大多数情况下为 C:\Program Files\ProductLocation。)只有特权用户才有写权限. (对我来说很有意义,因为普通用户不应该能够更改基本的应用程序配置)。
对于普通用户配置,有一个 user.config 将被复制到每个用户的个人应用程序数据目录 (%APPDATA%)。
但这会导致几个问题:
- 如何在不以管理员身份执行该过程的情况下更改每个用户的配置?
- 我应该在哪里存储未与应用程序一起部署的应用程序数据,而应在应用程序第一次启动时生成?
- 怎么可能有动态连接字符串,比如数据库健康监控应用程序?
我检查了程序数据文件夹(%PROGRAMDATA% -> C:\ProgramData),但似乎这个地方对于标准用户是只读的。(如果需要,Windows Installer 会在此处创建文件夹,但它们都是只读的。) -> %ALLUSERS% 发生了什么?
微软方式在我看来可能失败的例子:
一个金融应用程序,每个用户都应该将他的信息存储在同一个数据库(一个 SqlCE 文件数据库)中,因为应用程序必须以用户权限运行(我不想成为管理员来管理我的钱包)。应用程序需要连接到在运行时不可用的数据库,并且可能在第一次运行期间使用 EntityFramework 生成。因此,即使连接字符串也可能必须是动态的,而不是在固定此类信息的 app.settings 中配置。
这是愚蠢的!用户可以通过直接访问文件数据库来读取其他用户的敏感信息!
-> 安全性不仅是文件权限,还可能是数据库用户、证书、密码学等)
我是否必须开发自己的设置处理程序作为 Microsoft 预期方式的解决方法?
我想这个问题在 SO 上被问了很多次,但我找到的每个答案都显示了解决方法,不同的解决方案。关于“最佳实践”的问题立即关闭,因此我试图在这里提供一个实际示例。