【问题标题】:How do I discover the IIS account under which an ASP.Net application is running?如何发现运行 ASP.Net 应用程序的 IIS 帐户?
【发布时间】:2018-04-10 13:50:08
【问题描述】:

我需要确保当 C# (.Net 4.6.2) ASP.Net 应用程序启动时,它的根文件夹中有一个可用的本地文件夹,它可以向其中写入临时数据。如果文件夹不存在,我可以让应用程序创建文件夹,但如何确定应用程序安装在哪个 IIS 帐户下? (我无法控制这一点,并希望确保只有该帐户具有必要的权限)。大多数情况下,这将是一个应用程序池标识,但有时不是。

TIA

【问题讨论】:

  • 您是否拥有 IIS 服务器的屏幕/管理员权限,或 IIS 管理员权限?
  • 我需要以编程方式进行。代码需要创建文件夹并为运行它的 IIS 帐户设置必要的安全性。根据定义,它没有管理员权限 - 它是一个 Web 应用程序。

标签: c# asp.net iis


【解决方案1】:

有几种不同的方法可以获取进程正在运行的身份(帐户)——就像在 IIS 中一样。可能最简单的是Request.ServerVariables()https://msdn.microsoft.com/en-us/library/ms524602.aspx

//I think this is the one you are asking about
Request.ServerVariables("APP_POOL_ID");
//if your request is not anonymous
Request.ServerVariables("LOGON_USER");
Request.ServerVariables("REMOTE_USER");

否则,如果您使用的是经过身份验证的(非匿名)asp.net 页面,您可以从System.Security.Principal.WindowsIdentity.GetCurrent 获得更多信息

System.Security.Principal.WindowsIdentity wi;
wi = System.Security.Principal.WindowsIdentity.GetCurrent();
var sid = wi.User.Value;

【讨论】:

  • 谢谢,但我的问题是我不知道应用池 ID - 客户可以选择自己的应用池,请求可能是匿名的,也可能不是。
  • 那么,如果您有一个名为 diagnostic.aspx 的页面,并且在该页面中,您只是显示了我的第一个建议 APP_POOL_ID 中的值?这会让你得到你需要的信息吗?
  • 否 - 它必须以编程方式完成,静默获取价值并使用它。无需用户干预。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多