.NET Web 应用程序应该在哪里存储它的(非数据库)设置
Where should a .NET Web Application store it's (non database) setting
我正在构建一个将被多次安装的 Web 应用程序。应用程序需要能够根据请求自行保存某些设置。
我有一个安装程序 (InnoSetup),但我想非常小心我授予 Web 应用程序的权限。
- 我不会使用数据库。
- 默认安装始终将 web.config 保留为只读。 (最安全)
- 注册表可能有问题。除非有一组键,否则 DotNet webapp 总是可以默认写入 (IIS_IUSR)...
- 我正在考虑 App_Data,但默认权限不再有用并且 Inno-Setup 无法轻松正确修复它:
https://support.microsoft.com/en-us/kb/2005172
安全性和易于设置都是大问题..
我也不想弄乱我安装的机器。
A FAILED 解决方案是写入注册表的用户部分:
Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\MyCo\MyApp\");
var reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\MyCo\MyApp", true);
reg.SetValue("MyValue", (string)dataString, Microsoft.Win32.RegistryValueKind.String);
但我发现在 Server 2012 和其他服务器上默认情况下也不允许写入 HKEY_CURRENT_USER。服务器错误页面很有帮助,并提供了一些选项,例如明确授予 IUSR_{MachineName} 显式权限,但这对我来说是不行的。
所以我的最终解决方案是让安装程序创建一个用户可配置的文件夹,然后为所有用户分配 Read/Write 访问该文件夹的权限。如果需要,管理员可以随时将其锁定更多。
如果有人有更好的选择,请告诉我。
我使用 InnoSetup 创建了一个新的向导页面来建议和收集用户的数据文件夹。然后安装程序:
- 已创建该文件夹并授予所有用户 Read/Write 访问权限,
- 添加了一个 HKLM 注册表项,告诉 Web 应用程序在哪里查找文件夹,
- 通知用户他们应该进一步锁定文件夹以防止滥用。
我正在构建一个将被多次安装的 Web 应用程序。应用程序需要能够根据请求自行保存某些设置。
我有一个安装程序 (InnoSetup),但我想非常小心我授予 Web 应用程序的权限。
- 我不会使用数据库。
- 默认安装始终将 web.config 保留为只读。 (最安全)
- 注册表可能有问题。除非有一组键,否则 DotNet webapp 总是可以默认写入 (IIS_IUSR)...
- 我正在考虑 App_Data,但默认权限不再有用并且 Inno-Setup 无法轻松正确修复它: https://support.microsoft.com/en-us/kb/2005172
安全性和易于设置都是大问题..
我也不想弄乱我安装的机器。
A FAILED 解决方案是写入注册表的用户部分:
Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\MyCo\MyApp\");
var reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\MyCo\MyApp", true);
reg.SetValue("MyValue", (string)dataString, Microsoft.Win32.RegistryValueKind.String);
但我发现在 Server 2012 和其他服务器上默认情况下也不允许写入 HKEY_CURRENT_USER。服务器错误页面很有帮助,并提供了一些选项,例如明确授予 IUSR_{MachineName} 显式权限,但这对我来说是不行的。
所以我的最终解决方案是让安装程序创建一个用户可配置的文件夹,然后为所有用户分配 Read/Write 访问该文件夹的权限。如果需要,管理员可以随时将其锁定更多。
如果有人有更好的选择,请告诉我。
我使用 InnoSetup 创建了一个新的向导页面来建议和收集用户的数据文件夹。然后安装程序:
- 已创建该文件夹并授予所有用户 Read/Write 访问权限,
- 添加了一个 HKLM 注册表项,告诉 Web 应用程序在哪里查找文件夹,
- 通知用户他们应该进一步锁定文件夹以防止滥用。