.NET Web应用程序应该在哪里存储它(非数据库)设置

时间:2015-05-10 03:23:54

标签: asp.net .net inno-setup

我正在构建一个将多次安装的Web应用程序。应用程序需要能够根据请求自行保存某些设置。

我有一个安装程序(InnoSetup),但我想非常小心我给Web应用程序的权限。

  • 我无法使用数据库。
  • 默认安装始终将web.config保留为只读。 (最安全)
  • 注册表可能有问题。除非有一组密钥,否则DotNet webapp默认情况下总是可以写入(IIS_IUSR)......
  • 我正在考虑App_Data,但默认权限不再有用,Inno-Setup无法轻松正确修复它: https://support.microsoft.com/en-us/kb/2005172

安全性和易于安装都是重大问题。

我也不想弄乱我安装的机器。

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}明确许可的选项,但这对我来说是不行的。

所以我的最终解决方案是让安装程序创建一个用户可配置文件夹,然后为所有用户分配对该文件夹的读/写访问权限。如果需要,管理员可以随时将其锁定。

如果有人有更好的选择,请告诉我。

1 个答案:

答案 0 :(得分:1)

使用InnoSetup,我创建了一个新的向导页面,用于建议和收集用户的Data文件夹。然后安装程序:

  • 创建该文件夹并授予所有用户读/写权限,
  • 添加了一个HKLM注册表项,告诉Web App在哪里查找文件夹
  • 通知用户他们应该进一步锁定文件夹以防止滥用。