以编程方式获取应用程序池标识

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; @p0enkie serverManager 是什么? 它存在于 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

【讨论】:

以上是关于以编程方式获取应用程序池标识的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 10 / Windows Server 2019 中以编程方式回收应用程序池

IIS 应用程序池标识以使用登录用户 Windows 标识

如何从PowerShell以编程方式列出VSTS代理池?

如何检查上次回收的应用程序池

如何以编程方式获取堆栈内存统计信息?

以编程方式获取捆绑标识符