以编程方式获取应用程序池标识
Posted
技术标签:
【中文标题】以编程方式获取应用程序池标识【英文标题】:Get the Application Pool Identity programmatically 【发布时间】:2012-04-23 11:25:34 【问题描述】:如何在 C# 中以编程方式获取 appPool 的标识?我想要应用程序池用户,而不是当前登录的用户。
【问题讨论】:
【参考方案1】:您可以使用System.Security.Principal.WindowsIdentity.GetCurrent().Name
来识别当前应用程序正在运行的身份。 This link 提供了一个很好的实用程序,可以显示运行 aspx 的身份。
【讨论】:
如果我在 IIS 管理器中更改了 appPool 标识,System.Security.Principal.WindowsIdentity.GetCurrent().Name 不应该得到更改后的值吗? 好吧,对于那些可能正在苦苦挣扎的人来说,这是我用来获取启动 AppPool 的用户名的代码(它的身份): ApplicationPool pool = serverManager.ApplicationPools["YoutAppPoolName"]; pool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;字符串用户 = pool.ProcessModel.UserName; @p0enkieserverManager
是什么?
它存在于 C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll 中。 var serverManager = new ServerManager();【参考方案2】:
您需要引用 Microsoft.Web.Administration(在 Microsoft.Web.Administration.dll 中)。 Microsoft.Web.Administration.dll 位于 C:\Windows\System32\inetsrv。
//Add this to your using statements:
using Microsoft.Web.Administration;
//You can get the App Pool identity like this:
public string GetAppPoolIdentity(string appPoolName)
var serverManager = new ServerManager();
ApplicationPool appPool = serverManager.ApplicationPools[appPoolName];
appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
return appPool.ProcessModel.UserName;
【讨论】:
我使用了这段代码,它返回空白字符串。可能是什么原因?我刚刚以编程方式创建了一个应用程序池,我使用的池名称与我刚刚创建的相同。【参考方案3】:另一种对我来说似乎工作正常并且不需要安装 Microsoft.Web.Administration 包及其军团依赖项的可能性:
string appPoolUserIdentity = WindowsIdentity.GetCurrent().Name;
来自forums.asp.net
【讨论】:
以上是关于以编程方式获取应用程序池标识的主要内容,如果未能解决你的问题,请参考以下文章