Пытаюсь создать сайт в IIS с помощью кода в asp.net приложении. Выкидывает ошибку UnauthorizedAccessException, хотя логин и пароль задаю верный. Что может быть не так? (если поставить <identity impersonate="true"/> и виндовс аутентификацию, то работает с тем же логином и паролем. но этот путь неприемлим

) Заранее благодарен.
Код ниже:
public string CreateSite(string SiteName, string SitePath, string p_Port)
{
string l_Login = tbLogin.Text.Trim();
string l_Password = tbPassword.Text.Trim();
DirectoryEntry l_Parent;
DirectoryEntry l_NewSite;
l_Parent = new DirectoryEntry("IIS://LOCALHOST/W3SVC", l_Login, l_Password);
long Index = 1;
foreach (DirectoryEntry Child in l_Parent.Children)
{
if (Child.SchemaClassName == "IIsWebServer")
{
Index = Index + 1;
}
}
//Create Web Site
l_NewSite = l_Parent.Children.Add(Index.ToString(), "IIsWebServer");
l_NewSite.Username = l_Login;
l_NewSite.Password = l_Password;
l_NewSite.Invoke("SetInfo");//возникает ошибка UnauthorizedAccessException!
l_NewSite = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + Index.ToString(), l_Login, l_Password);
l_NewSite.InvokeSet("ServerComment", SiteName);
l_NewSite.InvokeSet("KeyType", "IIsWebServer");
l_NewSite.InvokeSet("ServerBindings", string.Format(":{0}:", p_Port));
l_NewSite.InvokeSet("ServerState", 2);
l_NewSite.InvokeSet("FrontPageWeb", 1);
l_NewSite.InvokeSet("DefaultDoc", "Default.aspx");
l_NewSite.InvokeSet("ServerAutoStart", 1);
l_NewSite.InvokeSet("ServerSize", 1);
l_NewSite.Invoke("SetInfo");
l_NewSite = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + l_NewSite.Name, l_Login, l_Password);
//Create Root Virtual Directory
DirectoryEntry l_VDir = l_NewSite.Children.Add("Root", "IISWebVirtualDir");
l_VDir.Username = l_Login;
l_VDir.Password = l_Password;
l_VDir.Invoke("SetInfo");
l_VDir = new DirectoryEntry("IIS://LOCALHOST/W3SVC/" + (l_NewSite.Name + "/" + l_VDir.Name));
l_VDir.Username = l_Login;
l_VDir.Password = l_Password;
l_VDir.InvokeSet("AppIsolated", 2);
l_VDir.InvokeSet("Path", SitePath);
l_VDir.InvokeSet("AccessFlags", 513);
l_VDir.InvokeSet("FrontPageWeb", 1);
l_VDir.InvokeSet("AppRoot", "LM/W3SVC/" + Index + "/Root");
l_VDir.InvokeSet("AppFriendlyName", "Default Application");
l_VDir.Invoke("SetInfo");
l_VDir.Invoke("AppCreate", 1);
//Now Save All Changes
l_NewSite.CommitChanges();
l_VDir.CommitChanges();
return "Created Site with Site ID: " + l_NewSite.Name;
}
Так и нету идей?
Впринципе может подойти решение дать ASP.NET юзеру права на создание сайтов. Только как это сделать?
Здравствуйте, Abuserrr, Вы писали:
A>Так и нету идей?
A>Впринципе может подойти решение дать ASP.NET юзеру права на создание сайтов. Только как это сделать?
Это делать не стоит. Вместо этого можно сварганить некий out-of-process компонент, который будет хоститься, скажем, в сервисе, и работать под учёткой с повышенными правами (да хоть под System), но недоступный извне машины. Ваш сайт при необходимости выполнить привелигированную операцию будет дёргать этот компонент за нужные нитки — для этого повышенные права не нужны... Таким образом убиваются два зайца — сайт по-прежнему работает с минимальными привилегиями, и необходимые операции безопасным образом выполняются...