2012-03-07 62 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