写了一个删除iis应用程序池的类,单个删除可以,批量删除出现问题
类如下,如果一个一个删除则是可以的,如果循环所有的应用程序池来调用删除,出现下面的奇怪情况:
假设有多个池:1,2,3,4,5,6,7,8,9
第一次循环,只删除1,3,5,7,9
第二次循环,只删除余下的2,6
第三次循环,只删除余下的2
第四次删除,4
我能确定池都是空的,而且都可以删除的,在使用循环的时候,如果某个池不删除,则调用这个类之后的程序也不会执行,请教一下是什么原因.
类如下:
/// <summary>
/// 删除应用程序池
/// </summary>
/// <returns> </returns>
public bool DeleteAppPoolByName(string AppPoolName)
{
bool RetStr=false;
try
{
DirectoryEntry IISEntryPool=new DirectoryEntry( "IIS://localhost/w3svc/AppPools ");
foreach(DirectoryEntry de in IISEntryPool.Children)
{
if(String.Compare(de.Name,AppPoolName,true)==0)
{
IISEntryPool.Children.Remove(de);
IISEntryPool.CommitChanges();
}
}
}
catch(Exception ex)
{
//错误处理过程
}
return RetStr;
}
------解决方案--------------------up
------解决方案--------------------试试这样
public bool DeleteAppPoolByName(string AppPoolName)
{
bool RetStr=false;
DirectoryEntry IISEntryPool=new DirectoryEntry( "IIS://localhost/w3svc/AppPools ");
foreach(DirectoryEntry de in IISEntryPool.Children)
{
if(String.Compare(de.Name,AppPoolName,true)==0)
{
try
{
IISEntryPool.Children.Remove(de);
IISEntryPool.CommitChanges();
}
catch(Exception ex)
{
//错误处理过程
}
}
}
return RetStr;
}
------解决方案--------------------for i --
------解决方案--------------------try{}
catch(Exception ex){}
------解决方案--------------------IISEntryPool.CommitChanges();
放 到 循环 外
因为 IISEntryPool.CommitChanges() 影响 了 循环
------解决方案--------------------你自己用ArrayList测试一下就知道原因了,因为实现了IEnumerater的集合不能在foreach语句中删除
------解决方案--------------------我 说错了
greennetboy(我的老婆叫静静) 说的 对
是 foreach 的 问题
------解决方案--------------------public bool DeleteAppPoolByName(string AppPoolName)
{
bool RetStr = false;
try
{
DirectoryEntry IISEntryPool = new DirectoryEntry( "IIS://localhost/w3svc/AppPools ");
ArrayList tmplist = new ArrayList();
foreach (DirectoryEntry de in IISEntryPool.Children)
{
if (String.Compare(de.Name, AppPoolName, true) == 0)
{
tmplist.Add(de);
}
}
for (int i = 0; i < tmplist.Count; i++)
{
IISEntryPool.Children.Remove((DirectoryEntry)tmplist[i]);
}
IISEntryPool.CommitChanges();
}
catch (Exception ex)
{
//错误处理过程
}
return RetStr;
}
------解决方案--------------------