Microsoft.Web.Administration迭代地删除IIS应用程序

时间:2015-01-09 19:26:03

标签: c# iis-7

我正在使用C#与Microsoft.Web.Administration删除网站内的所有应用程序。我不想删除网站应用程序本身(path =“/”)。

以下是代码:

ServerManager manager = new ServerManager();
for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++)
{
    if (manager.Sites[siteName].Applications[i].Path != "/")
    {
        manager.Sites[siteName].Applications.RemoveAt(i);
    }
}
manager.CommitChanges();

此代码会发生一些应用程序被删除而其他应用程序无法删除,哪些应用程序被删除,哪些应用程序每次运行都不同。

manager.Sites[sitename].Applications.Clear();

会起作用,但它也会删除带有path =“/”的应用程序,这是我不想要的。

我也尝试过这样的事情:

Application baseApp = null;
for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++)
{
    if (manager.Sites[siteName].Applications[i].Path == "/")
    {
        baseApp = manager.Sites[siteName].Applications[i];
    }
}

manager.Sites[siteName].Applications.Clear();

if (baseApp != null)
{
    manager.Sites[siteName].Applications.Add(baseApp);
}

manager.CommitChanges();

但这也不起作用。具有path =“/”的应用程序从未重新添加,或未正确添加。

是否有人对Microsoft.Web.Automation有更多经验,他们有一些关于一次删除多个应用程序的见解可以帮助我解决这个问题?

1 个答案:

答案 0 :(得分:1)

事实证明,我在通过它进行枚举的过程中犯了一个经典的愚蠢错误。第一个应用程序将被删除,计数将下降。有些应用程序从未被人看过。去除的随机性仅仅是由于集合的无序性质。傻傻的我!

这有效:

     List<Application> appsToRemove = new List<Application>();
     for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++)
     {
        if (manager.Sites[siteName].Applications[i].Path != "/")
        {
           Console.WriteLine("Removing {0}", manager.Sites[siteName].Applications[i].Path);
           appsToRemove.Add(manager.Sites[siteName].Applications[i]);
        }
     }
     foreach (Application a in appsToRemove)
     {
        manager.Sites[siteName].Applications.Remove(a);
     }
     manager.CommitChanges();