ASP.NET – 在应用程序外部读取和写入文件系统

有没有办法在当前的ASP.NET应用程序之外访问文件系统,而无需提供IIS_IUSRS权限? 例如,如果我想要这条线工作:

 logStream = File.Open("C:\logs\app.log", FileMode.Append, FileAccess.Write, FileShare.ReadWrite); 

…我通常必须向C:\logs\app.log授予对IIS_IUSRS组的读/写权限。 这使得在新系统上设置应用程序变得很烦人,其中需要访问的目录可以位于不同的位置。 有没有办法告诉ASP.NET它应该访问哪些目录?

你可以使用模仿来做到这一点,但我会敦促你不要这样做。 就安全性而言,你正陷入风险很高的领域。 如果您不是100%确定您正在冒充的身份的访问权限,那么您将面临允许黑客访问您不想要的服务器区域的真正风险。 正确设置ACL非常耗时,您不希望仅使用管理员或超级用户。 您需要专门为此目的设置一个用户,如果您正在这样做,那么您只需向您正在执行的操作添加一个步骤。

更好的解决方案是将应用程序设计为写入应用程序控制的文件夹。 您的安装可以在计算机上创建文件夹并自动授予权限,而不是依赖于现有的系统文件夹。

http://msdn.microsoft.com/en-us/library/ms998258.aspx#pagguidelines0001_impersonationdelegation

您还可以将AppPool设置为在具有相应凭据的帐户下运行。