Get the Application Pool Identity programmatically
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.
Programmatically assigning IIS Application Pool Identity users to Groups
A solution presented itself sooner than I expected, though it's not the one I preferred. For anyone interested, there are a couple of additional options on this pinvoke page. The managed solution did not work for me, but the sample using DllImport worked. I ended up adjusting the sample to handle arbitrary groups based on mapping an enum to SID strings, and including another DllImport for:
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool ConvertStringSidToSid(
string StringSid,
out IntPtr ptrSid);
The modified (working) function looks something like this:
static public bool AddUserToGroup(string user, UserGroup group)
{
var name = new StringBuilder(512);
var nameSize = (uint)name.Capacity;
var refDomainName = new StringBuilder(512);
var refDomainNameSize = (uint)refDomainName.Capacity;
var sid = new IntPtr();
switch (group)
{
case UserGroup.PerformanceMonitorUsers:
ConvertStringSidToSid("S-1-5-32-558", out sid);
break;
case UserGroup.Administrators:
ConvertStringSidToSid("S-1-5-32-544", out sid);
break;
// Add additional Group/cases here.
}
// Find the user and populate our local variables.
SID_NAME_USE sidType;
if (!LookupAccountSid(null, sid, name, ref nameSize,
refDomainName, ref refDomainNameSize, out sidType))
return false;
LOCALGROUP_MEMBERS_INFO_3 info;
info.Domain = user;
// Add the user to the group.
var val = NetLocalGroupAddMembers(null, name.ToString(), 3, ref info, 1);
// If the user is in the group, success!
return val.Equals(SUCCESS) || val.Equals(ERROR_MEMBER_IN_ALIAS);
}
Hopefully this will be of interest to someone else, and I would still like to know if anyone comes across a working, fully managed solution.
How to programmatically set App Pool Identity on IIS 8
Try this ( from How can I change the username/password of an ApplicationPool in IIS from C#? )
myAppPool .Properties["AppPoolIdentityType"].Value = 3;
myAppPool .Properties["WAMUserName"].Value = Environment.MachineName + @"\" + username;
myAppPool .Properties["WAMUserPass"].Value = password;
Related Topics
Set Item Focus in Listview Wpf
Datetime's Representation in Milliseconds
How Can User Resize Control at Runtime in Winforms
Event Handlers Not Thread Safe
Update Requires a Valid Updatecommand When Passed Datarow Collection with Modified Rows
Using Extension Methods in .Net 2.0
Failed to Update .Mdf Database Because the Database Is Read-Only (Windows Application)
How to Determine the True Pixel Size of My Monitor in .Net
How Does Stringbuilder Work Internally in C#
JSONvalueproviderfactory Throws "Request Too Large"
Why Aren't Generic Type Constraints Inheritable/Hierarchically Enforced
How to Atomically Swap 2 Ints in C#
C# - How to Detect a Windows Shutdown/Logoff and Cancel That Action (After Asking the User)