Как удалить объекты IIS из c#?
Мне нужно удалить виртуальный каталог и пул приложений из .NET как часть моего метода удаления. Где-то в Интернете я нашел следующий код:
private static void DeleteTree(string metabasePath)
{
// metabasePath is of the form "IIS://<servername>/<path>"
// for example "IIS://localhost/W3SVC/1/Root/MyVDir"
// or "IIS://localhost/W3SVC/AppPools/MyAppPool"
Console.WriteLine("Deleting {0}:", metabasePath);
try
{
DirectoryEntry tree = new DirectoryEntry(metabasePath);
tree.DeleteTree();
tree.CommitChanges();
Console.WriteLine("Done.");
}
catch (DirectoryNotFoundException)
{
Console.WriteLine("Not found.");
}
}
Но кажется, что он бросает COMException
на tree.CommitChanges();
. Нужна ли мне эта линия? Является ли это правильным подходом?
1 ответ:
Если вы удаляете такие объекты, как пулы приложений, виртуальные каталоги или приложения IIS, вам нужно сделать это следующим образом:
string appPoolPath = "IIS://Localhost/W3SVC/AppPools/MyAppPool"; using(DirectoryEntry appPool = new DirectoryEntry(appPoolPath)) { using(DirectoryEntry appPools = new DirectoryEntry(@"IIS://Localhost/W3SVC/AppPools")) { appPools.Children.Remove(appPool); appPools.CommitChanges(); } }
Вы создаете объект
DirectoryEntry
для элемента, который хотите удалить, а затем создаете объектDirectoryEntry
для его родителя. Затем вы говорите родителю удалить этот объект.Вы также можете сделать это:
string appPoolPath = "IIS://Localhost/W3SVC/AppPools/MyAppPool"; using(DirectoryEntry appPool = new DirectoryEntry(appPoolPath)) { using(DirectoryEntry parent = appPool.Parent) { parent.Children.Remove(appPool); parent.CommitChanges(); } }
В зависимости от поставленной задачи я буду использовать любой из этих методов.