我继承了一些代码,这些代码使用类似于以下内容的代码在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中的Connect As ...对话框中手动更改此项,并指定所需的域用户名和密码。
不幸的是,我不能为我的生活弄清楚如何在代码中设置它。 我已尝试以各种方式设置Username属性,但Invoke(“AppCreate”)调用总是抛出一些取决于我尝试过的类型的异常。以下都没有奏效:
newVirDir.Username = "MYDOMAIN\\MyUser";
newVirDir.Properties["Username"][0] = "MYDOMAIN\\MyUser";
newVirDir.Properties["Username"].Insert(0, "MYDOMAIN\\MyUser");
一定很容易 - 只要我知道该怎么做!
提前致谢, 克里斯
答案 0 :(得分:4)
我有一段时间没有这样做,但我认为您还需要创建一个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";
答案 1 :(得分:0)
好吧,我发现 这样做的方式 - 是否是我不知道的推荐方式。
使用此链接作为开头: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();
}
答案 2 :(得分:0)
虚拟目录凭据
newVirDir.Properties["AuthFlags"].Value = 5;
newVirDir.Properties["UNCUsername"].Value = "MYDOMAIN\\MyUser";
newVirDir.Properties["UNCPassword"].Value = "password";