Get the Application Pool Identity programmatically

40,086

Solution 1

You could use System.Security.Principal.WindowsIdentity.GetCurrent().Name to identify the Identity in which the current application is running. This link provides a nice utility which displays the identity under which the aspx is run.

Solution 2

You need to make a reference to Microsoft.Web.Administration (in Microsoft.Web.Administration.dll). Microsoft.Web.Administration.dll is located in 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;            
}

Solution 3

Another possibility that seems to work OK for me and does not require installation of the Microsoft.Web.Administration package and its legion dependencies:

string appPoolUserIdentity = WindowsIdentity.GetCurrent().Name;

From forums.asp.net

Share:
40,086
p0enkie
Author by

p0enkie

Updated on July 09, 2020

Comments

  • p0enkie
    p0enkie almost 4 years

    How do I get the identity of an appPool programmatically in C#? I want the application pool user and NOT the user who is currently logged in.

  • p0enkie
    p0enkie about 12 years
    If I change the appPool identity in the IIS Manager shouldn't System.Security.Principal.WindowsIdentity.GetCurrent().Name get the changed value?
  • p0enkie
    p0enkie about 12 years
    Ok for someone out there that might be struggling, this is the code I used to get the username that started the AppPool (it's identity): ApplicationPool pool = serverManager.ApplicationPools["YoutAppPoolName"]; pool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; string user = pool.ProcessModel.UserName;
  • Kiquenet
    Kiquenet over 8 years
    @p0enkie what is serverManager ?
  • Steven Bone
    Steven Bone over 8 years
    It is present in C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll‌​. var serverManager = new ServerManager();
  • devanalyst
    devanalyst about 3 years
    I used this code and it returns blank string. What could be the reason? I have just programmatically created an application pool and I am using the same pool name that I just created.
  • The Red Pea
    The Red Pea over 2 years
    Nice answer, but really the same suggestion as the accepted answer, isn't it? The accepted answer says to use: System.Security.Principal.WindowsIdentity.GetCurrent().Name
  • Vanquished Wombat
    Vanquished Wombat over 2 years
    It may equate to the same. I mentioned it because it seemed to be more simple to deploy without all the Using's.