2012-03-07 69 views
1

我继承了创建使用类似于以下(收拾为了简洁)如何设置

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 7.0下几个应用程序的一些代码在IIS应用程序的特定用户现在我需要指定应用程序在特定帐户下运行。我可以在“连接为...”对话框中的IIS中手动更改此项,并指定所需的域用户名和密码。

不幸的是,我不能为我的生活制定出如何在代码中设置它。 我已经尝试以各种方式设置用户名属性,但调用(“AppCreate”)调用总是会引发一些依赖于我所尝试的类型的异常。以下都失败了:

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

它一定很容易 - 只要我知道该怎么做!

由于提前, 克里斯

回答

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"; 

确保您所创建的应用程序池,然后再设置程序池在这样的虚拟目录...

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

谢谢 - 已经有一个应用程序池,我已经根据需要设置了凭据,但是应用程序本身仍然被设置为“应用程序用户(传递身份验证)”,它不起作用。我发现,除非我明确地在应用程序本身上设置凭据,否则它似乎使用'NT AUTHORITY \ ANONYMOUS LOGON'作为用户。在IIS中设置应用程序本身的凭据可以确保一切正常,但我无法解决如何以编程方式执行此操作。 – 2012-03-08 08:44:32

0

嗯,我发现a这样做 - 是否是我不知道的推荐方式。

使用这个链接作为开始: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(); 
} 
0

虚拟目录凭据

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

你应该对此进行扩展,你没有足够的文字来清楚地解释你的答案在做什么。 – Adam 2017-03-29 18:37:32