如何在IIS应用程序上设置特定用户

本文关键字:设置 用户 程序上 应用程序 IIS 应用 | 更新日期: 2023-09-27 18:27:15

我继承了一些代码,这些代码使用类似以下的代码在IIS 7.0下创建了几个应用程序(为简洁起见,已整理)

DirectoryEntry iisServer = new DirectoryEntry("IIS://localhost/W3SVC/1");
DirectoryEntry folderRoot = iisServer.Children.Find("Root", "IIsWebVirtualDir");
DirectoryEntry newVirDir = folderRoot.Children.Add("MyNewVirtualDir", "IIsWebVirtualDir");
newVirDir.Properties["AccessRead"][0] = true;
newVirDir.Properties["AccessScript"][0] = true;
newVirDir.Properties["Path"].Insert(0, "C:''MyVirtualDirStuff");
newVirDir.Properties["AccessExecute"][0] = true;
newVirDir.Properties["AppIsolated"].Value = 2; //"Medium (Pooled)"
newVirDir.Properties["DefaultDoc"][0] = "index.htm";
newVirDir.Invoke("AppCreate", true);
newVirDir.CommitChanges();
folderRoot.CommitChanges();
iisServer.CommitChanges();

这一切都正常工作,但现在我需要指定应用程序在特定帐户下运行。我可以在IIS的"连接为…"对话框中手动更改此设置,并指定所需的域用户名和密码。

不幸的是,我一辈子都无法弄清楚如何在代码中设置这一点。我尝试过以各种方式设置Username属性,但Invoke("AppCreate")调用总是抛出某种类型的Exception,这取决于我所尝试的。以下都失败了:

newVirDir.Username = "MYDOMAIN''MyUser";
newVirDir.Properties["Username"][0] = "MYDOMAIN''MyUser";
newVirDir.Properties["Username"].Insert(0, "MYDOMAIN''MyUser");

这一定很容易——如果我知道怎么做就好了!

提前感谢,Chris

如何在IIS应用程序上设置特定用户

我已经有一段时间没有这样做了,但我认为您还需要创建一个ApplicationPool,并在应用程序池级别设置凭据,然后在创建虚拟目录时,确保它使用您创建的应用程序池。

这个链接应该让你开始:

http://martinnormark.com/adding-an-application-pool-to-iis7-programmatically

然后,您需要将指定使用网络服务的代码更改为以下代码,这样您就应该开始工作了。(这将设置应用程序池上的凭据)

myAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
myAppPool.ProcessModel.UserName = "username";
myAppPool.ProcessModel.Password = "password";

请确保先创建应用程序池,然后在虚拟目录上设置AppPool,如下所示。。。

newVirDir.Properties["AppPoolId"][0] = "newAppPoolName";

好吧,我发现了一种的方法——我不知道这是否是推荐的方法。

使用此链接作为开始:http://www.iis.net/ConfigReference/system.applicationHost/sites/site/application/virtualDirectory

我现在有了这个,它似乎正是我想要的:

using (ServerManager serverManager = new ServerManager())
{
  Configuration config = serverManager.GetApplicationHostConfiguration();
  ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
  ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
  ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
  ConfigurationElementCollection applicationCollection = siteElement.GetCollection();
  ConfigurationElement applicationElement = FindElement(applicationCollection, "application", "path", @"/MyNewVirtualDir");
  ConfigurationElementCollection virtualDirCollection = applicationElement.GetCollection();
  ConfigurationElement virtualDirElement = FindElement(virtualDirCollection, "virtualDirectory", "path", @"/");
  virtualDirElement.Attributes["userName"].Value = "MYDOMAIN''MyUser";
  virtualDirElement.Attributes["password"].Value = "MyPassword";
  serverManager.CommitChanges();
}

虚拟目录凭证

newVirDir.Properties["AuthFlags"].Value = 5;
newVirDir.Properties["UNCUsername"].Value = "MYDOMAIN''MyUser";
newVirDir.Properties["UNCPassword"].Value = "password";