[英]Programmatically setting the 'Connect as' user in IIS7 using C#
我正在嘗試使用下面的代碼片段執行此操作,但是FindElement不斷顯示錯誤,表明它在當前上下文中不存在。 最終,我要嘗試的是設置網站在“連接為”區域中使用的用戶名和密碼。 這與模擬用戶不同。
using Microsoft.Web.Administration;
using Microsoft.Web.Management;
using Microsoft.Web.Media.TransformManager.Common;
using Microsoft.Web.Media.TransformManager;
using System.Web.Configuration;
using System.Collections;
Configuration config = iisManager.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";
編輯:因此,當我對這個問題ating了幾天后盯着這個問題時,我發現您可以在以下上下文中使用ServerManager來完成此任務。
ServerManager iisManager = new ServerManager()
site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;
因此,當我對這個問題this了幾天之后一直盯着這個問題時,顯然您可以在以下情況下使用Servermanager來完成此任務。
ServerManager iisManager = new ServerManager()
site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;
在VirtualDirectoryDefaults上設置用戶名和密碼可能不會產生您想要的結果。 取而代之的是,您可能希望在此站點對象中定位路徑為根的應用程序(因此查詢中的.Path.Equals(“ /”)過濾器),然后修改該應用程序的虛擬目錄用戶名和密碼。
這可以通過以下方法來完成(請注意:該方法假定您已經通過ServerManagers Sites集合上的搜索找到了所需的Site,並且將該Site對象傳遞給了該方法)。 完成操作后,請確保處置ServerManager對象,以避免內存泄漏。
public static void SetConnectAsAccount(Site site, string username, string password)
{
if (site == null)
{
throw new ArgumentNullException("site");
}
if (string.IsNullOrWhiteSpace(username))
{
throw new ArgumentNullException("username");
}
if (string.IsNullOrWhiteSpace(password))
{
throw new ArgumentNullException("password");
}
foreach (var app in site.Applications.Where(c => c.Path.Equals("/")))
{
try
{
// set the Connect-As Accounts login credentials to the Service Acount
var appVirDir = app.VirtualDirectories.Where(c => c.Path.Equals("/")).FirstOrDefault();
if (appVirDir != null)
{
appVirDir.UserName = username;
appVirDir.Password = password;
}
}
catch (Exception ex)
{
// log your exception somewhere so you know what went wrong
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.