IIS操作类库

来源:互联网 发布:金高考软件下载 编辑:程序博客网 时间:2024/05/07 08:01

类库代码IISHelper.cs

 

using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
using System.Data;
using System.Collections.Generic;
using System.Diagnostics;

namespace Beasyer.Lib
{
    
/// <summary>
    
/// IISWebServer的状态
    
/// </summary>

    public enum IISServerState
    
{
        
/// <summary>
        
/// 
        
/// </summary>

        Starting = 1,
        
/// <summary>
        
/// 
        
/// </summary>

        Started = 2,
        
/// <summary>
        
/// 
        
/// </summary>

        Stopping = 3,
        
/// <summary>
        
/// 
        
/// </summary>

        Stopped = 4,
        
/// <summary>
        
/// 
        
/// </summary>

        Pausing = 5,
        
/// <summary>
        
/// 
        
/// </summary>

        Paused = 6,
        
/// <summary>
        
/// 
        
/// </summary>

        Continuing = 7

    }


    
/// <summary>
    
/// IISManagement 的摘要说明。
    
/// </summary>

    public class IISManagement
    
{
        
/// <summary>
        
/// 实例化IISWebServerCollection
        
/// </summary>

        public IISWebServerCollection WebServers = new IISWebServerCollection();
        
internal static string Machinename = "localhost";
        
/// <summary>
        
/// 析构  IIS启动
        
/// </summary>

        public IISManagement()
        
{
            start();
        }



        
/// <summary>
        
/// 析构 设置服务器IP  IIS启动
        
/// </summary>
        
/// <param name="MachineName">机器名,默认值为localhost</param>

        public IISManagement(string MachineName)
        
{
            
if (MachineName.ToString() != "")
            
{
                Machinename 
= MachineName;
            }

            start();
        }

        
/// <summary>
        
/// 启动IIS
        
/// </summary>

        private void start()
        
{

            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + Machinename + "/W3SVC");
            DirectoryEntry Server;
            DirectoryEntry Root 
= null;
            DirectoryEntry VirDir;
            IEnumerator ie 
= Service.Children.GetEnumerator();
            IEnumerator ieRoot;
            IISWebServer item;
            IISWebVirtualDir item_virdir;
            
bool finded = false;
            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    item 
= new IISWebServer();
                    item.index 
= Convert.ToInt32(Server.Name);

                    item.ServerComment 
= (string)Server.Properties["ServerComment"][0];
                    item.AccessRead 
= (bool)Server.Properties["AccessRead"][0];
                    item.AccessScript 
= (bool)Server.Properties["AccessScript"][0];
                    item.DefaultDoc 
= (string)Server.Properties["DefaultDoc"][0];
                    item.EnableDefaultDoc 
= (bool)Server.Properties["EnableDefaultDoc"][0];
                    item.EnableDirBrowsing 
= (bool)Server.Properties["EnableDirBrowsing"][0];
                    ieRoot 
= Server.Children.GetEnumerator();

                    
while (ieRoot.MoveNext())
                    
{
                        Root 
= (DirectoryEntry)ieRoot.Current;
                        
if (Root.SchemaClassName == "IIsWebVirtualDir")
                        
{
                            finded 
= true;
                            
break;
                        }

                    }

                    
if (finded)
                    
{
                        item.Path 
= Root.Properties["path"][0].ToString();
                    }


                    item.Port 
= Convert.ToInt32(((string)Server.Properties["Serverbindings"][0]).Substring(1, ((string)Server.Properties["Serverbindings"][0]).Length - 2));
                    
this.WebServers.Add_(item);
                    ieRoot 
= Root.Children.GetEnumerator();
                    
while (ieRoot.MoveNext())
                    
{
                        VirDir 
= (DirectoryEntry)ieRoot.Current;
                        
if (VirDir.SchemaClassName != "IIsWebVirtualDir" && VirDir.SchemaClassName != "IIsWebDirectory")
                            
continue;
                        item_virdir 
= new IISWebVirtualDir(item.ServerComment);
                        item_virdir.Name 
= VirDir.Name;
                        item_virdir.AccessRead 
= (bool)VirDir.Properties["AccessRead"][0];
                        item_virdir.AccessScript 
= (bool)VirDir.Properties["AccessScript"][0];
                        item_virdir.DefaultDoc 
= (string)VirDir.Properties["DefaultDoc"][0];
                        item_virdir.EnableDefaultDoc 
= (bool)VirDir.Properties["EnableDefaultDoc"][0];
                        
if (VirDir.SchemaClassName == "IIsWebVirtualDir")
                        
{
                            item_virdir.Path 
= (string)VirDir.Properties["Path"][0];
                        }

                        
else if (VirDir.SchemaClassName == "IIsWebDirectory")
                        
{
                            item_virdir.Path 
= Root.Properties["Path"][0+ "/" + VirDir.Name;
                        }

                        item.WebVirtualDirs.Add_(item_virdir);
                    }

                }

            }

        }


        
/// <summary>
        
/// 创建站点
        
/// </summary>
        
/// <param name="iisServer"></param>

        public static void CreateIISWebServer(IISWebServer iisServer)
        
{
            
if (iisServer.ServerComment.ToString() == "")
            
{
                
throw (new Exception("IISWebServer的ServerComment不能为空!"));
            }

            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            
int i = 0;
            IEnumerator ie 
= Service.Children.GetEnumerator();

            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    
if (Convert.ToInt32(Server.Name) > i)
                        i 
= Convert.ToInt32(Server.Name);
                    
//                    if( Server.Properties["Serverbindings"][0].ToString() == ":" + iisServer.Port + ":" )    
                    
//                    {
                    
//                        Server.Invoke("stop",new object[0]);
                    
//                    }
                }

            }

            i
++;
            
try
            
{
                iisServer.index 
= i;
                Server 
= Service.Children.Add(i.ToString(), "IIsWebServer");
                Server.Properties[
"ServerComment"][0= iisServer.ServerComment;
                Server.Properties[
"Serverbindings"].Add(":" + iisServer.Port + ":");
                Server.Properties[
"AccessScript"][0= iisServer.AccessScript;
                Server.Properties[
"AccessRead"][0= iisServer.AccessRead;
                Server.Properties[
"EnableDirBrowsing"][0= iisServer.EnableDirBrowsing;
                Server.Properties[
"DefaultDoc"][0= iisServer.DefaultDoc;
                Server.Properties[
"EnableDefaultDoc"][0= iisServer.EnableDefaultDoc;

                DirectoryEntry root 
= Server.Children.Add("Root""IIsWebVirtualDir");
                root.Properties[
"path"][0= iisServer.Path;


                Service.CommitChanges();
                Server.CommitChanges();
                root.CommitChanges();
                root.Invoke(
"AppCreate2"new object[12 });

                
//启动aspnet_iis.exe程序
                ReStartIISwithFramework(iisServer, Service);
                

                
//Server.Invoke("start",new object[0]);
            }

            
catch (Exception es)
            
{
                
throw (es);
            }

        }


        
/// <summary>
        
/// 重新启动IIS改变Framework版本
        
/// </summary>
        
/// <param name="iisServer"></param>
        
/// <param name="Service"></param>

        public static void ReStartIISwithFramework(IISWebServer iisServer, DirectoryEntry Service)
        
{
            
try
            
{
                ProcessStartInfo startInfo 
= new ProcessStartInfo(iisServer.AspDotNetLibaryIISExe);
                
//处理目录路径
                string path = Service.Path.ToUpper();
                
int index = path.IndexOf("W3SVC");
                
if (index > 0)
                
{
                    path 
= path.Remove(0, index);
                }

                
//启动aspnet_iis.exe程序,刷新教本映射
                startInfo.Arguments = "-s " + path;
                startInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
                startInfo.UseShellExecute 
= false;
                startInfo.CreateNoWindow 
= true;
                startInfo.RedirectStandardOutput 
= true;
                startInfo.RedirectStandardError 
= true;
                Process process 
= new Process();
                process.StartInfo 
= startInfo;
                process.Start();
                process.WaitForExit();
                
string errors = process.StandardError.ReadToEnd();
                
if (errors != string.Empty)
                
{
                    
throw new Exception(errors);
                }

            }

            
catch(Exception ex)
            
{
                
throw ex;
            }

        }


        
/// <summary>
        
/// 删除IISWebServer
        
/// </summary>

        public static void RemoveIISWebServer(string ServerComment)
        
{
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            IEnumerator ie 
= Service.Children.GetEnumerator();

            ServerComment 
= ServerComment.ToLower();
            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    
if (Server.Properties["ServerComment"][0].ToString().ToLower() == ServerComment)
                    
{
                        Service.Children.Remove(Server);
                        Service.CommitChanges();
                        
return;
                    }

                }

            }

        }


        
/// <summary>
        
/// 删除IISWebServer
        
/// </summary>

        public static void RemoveIISWebServer(int index)
        
{
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            
try
            
{
                DirectoryEntry Server 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                
if (Server != null)
                
{
                    Service.Children.Remove(Server);
                    Service.CommitChanges();
                }

                
else
                
{
                    
throw (new Exception("找不到此IISWebServer"));
                }

            }

            
catch
            
{
                
throw (new Exception("找不到此IISWebServer"));
            }

        }


        
/// <summary>
        
/// 检查是否存在IISWebServer
        
/// </summary>
        
/// <param name="ServerComment">网站说明</param>
        
/// <returns></returns>

        public static bool ExistsIISWebServer(string ServerComment)
        
{
            ServerComment 
= ServerComment.Trim();
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server 
= null;
            IEnumerator ie 
= Service.Children.GetEnumerator();

            
string comment;
            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    comment 
= Server.Properties["ServerComment"][0].ToString().ToLower().Trim();
                    
if (comment == ServerComment.ToLower())
                    
{
                        
return true;
                    }

                }

            }


            
return false;
        }


        
/// <summary>
        
/// 返回指定的IISWebServer
        
/// </summary>
        
/// <param name="ServerComment"></param>
        
/// <returns></returns>

        internal static DirectoryEntry returnIISWebserver(string ServerComment)
        
{
            ServerComment 
= ServerComment.Trim();
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server 
= null;
            IEnumerator ie 
= Service.Children.GetEnumerator();

            
string comment;
            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    comment 
= Server.Properties["ServerComment"][0].ToString().ToLower().Trim();
                    
if (comment == ServerComment.ToLower())
                    
{
                        
return Server;
                    }

                }

            }


            
return null;
        }



        
/// <summary>
        
///  返回指定的IISWebServer
        
/// </summary>
        
/// <param name="index"></param>
        
/// <returns></returns>

        internal static DirectoryEntry returnIISWebserver(int index)
        
{
            DirectoryEntry Server 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
            
try
            
{
                IEnumerator ie 
= Server.Children.GetEnumerator();
                
return Server;
            }

            
catch
            
{
                
return null;
            }

        }


        
private static DirectoryEntry getRoot(DirectoryEntry Server)
        
{
            
foreach (DirectoryEntry child in Server.Children)
            
{
                
string name = child.Name.ToLower();
                
if (name == "iiswebvirtualdir" || name == "root")
                
{
                    
return child;
                }

            }

            
return null;
        }


        
/// <summary>
        
/// 修改与给定的IISWebServer具有相同网站说明的站点配置
        
/// </summary>
        
/// <param name="iisServer">给定的IISWebServer</param>

        public static void EditIISWebServer(IISWebServer iisServer)
        
{
            
if (iisServer.index == -1)
                
throw (new Exception("找不到给定的站点!"));
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;

            IEnumerator ie 
= Service.Children.GetEnumerator();

            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    
if (Server.Properties["Serverbindings"][0].ToString() == ":" + iisServer.Port + ":")
                    
{
                        Server.Invoke(
"stop"new object[0]);
                    }

                }

            }


            Server 
= returnIISWebserver(iisServer.index);
            
if (Server == null)
            
{
                
throw (new Exception("找不到给定的站点!"));
            }


            
try
            
{

                Server.Properties[
"ServerComment"][0= iisServer.ServerComment;
                Server.Properties[
"Serverbindings"][0= ":" + iisServer.Port + ":";
                Server.Properties[
"AccessScript"][0= iisServer.AccessScript;
                Server.Properties[
"AccessRead"][0= iisServer.AccessRead;
                Server.Properties[
"EnableDirBrowsing"][0= iisServer.EnableDirBrowsing;
                Server.Properties[
"DefaultDoc"][0= iisServer.DefaultDoc;
                Server.Properties[
"EnableDefaultDoc"][0= iisServer.EnableDefaultDoc;

                DirectoryEntry root 
= getRoot(Server);

                Server.CommitChanges();
                
if (root != null)
                
{
                    root.Properties[
"path"][0= iisServer.Path;
                    root.CommitChanges();
                }


                Server.Invoke(
"start"new object[0]);
            }

            
catch (Exception es)
            
{
                
throw (es);
            }

        }


        
/// <summary>
        
/// 返回所有站点的网站说明
        
/// </summary>
        
/// <returns></returns>

        public static ArrayList returnIISServerComment()
        
{
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;

            ArrayList list 
= new ArrayList();
            IEnumerator ie 
= Service.Children.GetEnumerator();

            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    list.Add(Server.Properties[
"ServerComment"][0]);
                }

            }


            
return list;
        }


        
/// <summary>
        
/// 创建虚拟目录
        
/// </summary>
        
/// <param name="iisVir"></param>
        
/// <param name="deleteIfExist"></param>

        public static void CreateIISWebVirtualDir(IISWebVirtualDir iisVir, bool deleteIfExist)
        
{
            
if (iisVir.Parent == null)
                
throw (new Exception("IISWebVirtualDir没有所属的IISWebServer!"));

            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server 
= returnIISWebserver(iisVir.Parent.index);

            
if (Server == null)
            
{
                
throw (new Exception("找不到给定的站点!"));
            }


            Server 
= getRoot(Server);
            
if (deleteIfExist)
            
{
                
foreach (DirectoryEntry VirDir in Server.Children)
                
{
                    
if (VirDir.Name.ToLower().Trim() == iisVir.Name.ToLower())
                    
{
                        Server.Children.Remove(VirDir);
                        Server.CommitChanges();
                        
break;
                    }

                }

            }


            
try
            
{
                DirectoryEntry vir;
                vir 
= Server.Children.Add(iisVir.Name, "IIsWebVirtualDir");
                vir.Properties[
"Path"][0= iisVir.Path;
                vir.Properties[
"DefaultDoc"][0= iisVir.DefaultDoc;
                vir.Properties[
"EnableDefaultDoc"][0= iisVir.EnableDefaultDoc;
                vir.Properties[
"AccessScript"][0= iisVir.AccessScript;
                vir.Properties[
"AccessRead"][0= iisVir.AccessRead;
                vir.Invoke(
"AppCreate2"new object[12 });

                Server.CommitChanges();
                vir.CommitChanges();

            }

            
catch (Exception es)
            
{
                
throw (es);
            }


        }


        
/// <summary>
        
/// 删除虚拟目录
        
/// </summary>
        
/// <param name="WebServerComment">站点说明</param>
        
/// <param name="VirtualDir">虚拟目录名称</param>

        public static void RemoveIISWebVirtualDir(string WebServerComment, string VirtualDir)
        
{
            VirtualDir 
= VirtualDir.ToLower();
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server 
= returnIISWebserver(WebServerComment);

            
if (Server == null)
            
{
                
throw (new Exception("找不到给定的站点!"));
            }


            Server 
= getRoot(Server);
            
foreach (DirectoryEntry VirDir in Server.Children)
            
{
                
if (VirDir.Name.ToLower().Trim() == VirtualDir)
                
{
                    Server.Children.Remove(VirDir);
                    Server.CommitChanges();
                    
return;
                }

            }


            
throw (new Exception("找不到给定的虚拟目录!"));
        }


        
/// <summary>
        
/// 删除虚拟目录
        
/// </summary>
        
/// <param name="iisVir"></param>

        public static void RemoveIISWebVirtualDir(IISWebVirtualDir iisVir)
        
{
            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server 
= returnIISWebserver(iisVir.Parent.index);

            
if (Server == null)
            
{
                
throw (new Exception("找不到给定的站点!"));
            }


            Server 
= getRoot(Server);
            
foreach (DirectoryEntry VirDir in Server.Children)
            
{
                
if (VirDir.Name.ToLower().Trim() == iisVir.Name.ToLower())
                
{
                    Server.Children.Remove(VirDir);
                    Server.CommitChanges();
                    
return;
                }

            }


            
throw (new Exception("找不到给定的虚拟目录!"));
        }


    }


    
/// <summary>
    
/// 重构出站点的CollectionBase
    
/// </summary>

    public class IISWebServerCollection : CollectionBase
    
{

        
/// <summary>
        
/// 指定网站索引获得网站类
        
/// </summary>

        public IISWebServer this[int Index]
        
{
            
get
            
{
                
return (IISWebServer)this.List[Index];

            }

        }


        
/// <summary>
        
/// 指定网站名称获得网站类
        
/// </summary>

        public IISWebServer this[string ServerComment]
        
{
            
get
            
{
                ServerComment 
= ServerComment.ToLower().Trim();
                IISWebServer list;
                
for (int i = 0; i < this.List.Count; i++)
                
{
                    list 
= (IISWebServer)this.List[i];
                    
if (list.ServerComment.ToLower().Trim() == ServerComment)
                        
return list;
                }

                
return null;
            }

        }


        
internal void Add_(IISWebServer WebServer)
        
{
            
this.List.Add(WebServer);
        }


        
/// <summary>
        
/// 添加一个网站
        
/// </summary>
        
/// <param name="WebServer"></param>

        public void Add(IISWebServer WebServer)
        
{
            
try
            
{
                
this.List.Add(WebServer);
                IISManagement.CreateIISWebServer(WebServer);
            }

            
catch
            
{
                
throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }


        }


        
/// <summary>
        
/// 是否包含指定的网站
        
/// </summary>
        
/// <param name="ServerComment"></param>
        
/// <returns></returns>

        public bool Contains(string ServerComment)
        
{
            ServerComment 
= ServerComment.ToLower().Trim();
            
for (int i = 0; i < this.List.Count; i++)
            
{
                IISWebServer server 
= this[i];
                
if (server.ServerComment.ToLower().Trim() == ServerComment)
                    
return true;
            }

            
return false;
        }


        
/// <summary>
        
/// 是否包含指定的网站
        
/// </summary>
        
/// <param name="index"></param>
        
/// <returns></returns>

        public bool Contains(int index)
        
{
            
for (int i = 0; i < this.List.Count; i++)
            
{
                IISWebServer server 
= this[i];
                
if (server.index == index)
                    
return true;
            }

            
return false;
        }


        
/// <summary>
        
/// 添加一组网站
        
/// </summary>
        
/// <param name="WebServers"></param>

        public void AddRange(IISWebServer[] WebServers)
        
{
            
for (int i = 0; i <= WebServers.GetUpperBound(0); i++)
            
{
                Add(WebServers[i]);
            }

        }


        
/// <summary>
        
/// 移除一个网站
        
/// </summary>
        
/// <param name="WebServer"></param>

        public void Remove(IISWebServer WebServer)
        
{
            
for (int i = 0; i < this.List.Count; i++)
            
{
                
if ((IISWebServer)this.List[i] == WebServer)
                
{
                    
this.List.RemoveAt(i);
                    
return;
                }

            }

            IISManagement.RemoveIISWebServer(WebServer.index);
        }

    }



    
/// <summary>
    
/// FrameWorkVersion的状态
    
/// </summary>

    public enum FrameWorkVersion
    
{
        v114322 
= 1,
        
/// <summary>
        
/// 
        
/// </summary>

        v2050727 = 2,
    }



    
/// <summary>
    
/// 网站类
    
/// </summary>

    public class IISWebServer
    
{
        
public FrameWorkVersion AspDotNetVersion;

        
public string AspDotNetLibaryIISExe
        
{
            
get
            
{
                
switch (AspDotNetVersion)
                
{
                    
case FrameWorkVersion.v114322:
                        
return Environment.GetEnvironmentVariable("windir"+ @"Microsoft.NETFrameworkv1.1.4322aspnet_regiis.exe";
                    
case FrameWorkVersion.v2050727:
                        
return Environment.GetEnvironmentVariable("windir"+ @"Microsoft.NETFrameworkv2.0.50727aspnet_regiis.exe";
                    
default:
                        
return Environment.GetEnvironmentVariable("windir"+ @"Microsoft.NETFrameworkv2.0.50727aspnet_regiis.exe";

                }

            }

        }

        
/// <summary>
        
/// 
        
/// </summary>

        internal int index = -1;
        
/// <summary>
        
/// 
        
/// </summary>

        public IISWebVirtualDirCollection WebVirtualDirs;
        
/// <summary>
        
/// 网站说明
        
/// </summary>

        public string ServerComment = "Way";
        
/// <summary>
        
/// 脚本支持
        
/// </summary>

        public bool AccessScript = true;
        
/// <summary>
        
/// 读取
        
/// </summary>

        public bool AccessRead = true;
        
/// <summary>
        
/// 物理路径
        
/// </summary>

        public string Path = @"C:Inetpubwwwroot";
        
/// <summary>
        
/// 端口
        
/// </summary>

        public int Port = 80;
        
/// <summary>
        
/// 目录浏览
        
/// </summary>

        public bool EnableDirBrowsing = false;
        
/// <summary>
        
/// 默认文档
        
/// </summary>

        public string DefaultDoc = "default.aspx";
        
/// <summary>
        
/// 使用默认文档
        
/// </summary>

        public bool EnableDefaultDoc = true;

        
/// <summary>
        
/// IISWebServer的状态
        
/// </summary>

        public IISServerState ServerState
        
{
            
get
            
{
                DirectoryEntry server 
= IISManagement.returnIISWebserver(this.index);
                
if (server == null)
                
{
                    
throw (new Exception("找不到此IISWebServer"));
                }

                
switch (server.Properties["ServerState"][0].ToString())
                
{
                    
case "2":
                        
return IISServerState.Started;
                    
case "4":
                        
return IISServerState.Stopped;
                    
case "6":
                        
return IISServerState.Paused;
                }

                
return IISServerState.Stopped;
            }

        }


        
/// <summary>
        
/// 停止IISWebServer
        
/// </summary>

        public void Stop()
        
{
            DirectoryEntry Server;
            
if (index == -1)
                
throw (new Exception("在IIS找不到此IISWebServer!"));
            
try
            
{
                Server 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                
if (Server != null)
                    Server.Invoke(
"stop"new object[0]);
                
else
                    
throw (new Exception("在IIS找不到此IISWebServer!"));
            }

            
catch
            
{
                
throw (new Exception("在IIS找不到此IISWebServer!"));
            }

        }


        
/// <summary>
        
/// 把基本信息的更改更新到IIS
        
/// </summary>

        public void CommitChanges()
        
{
            IISManagement.EditIISWebServer(
this);
        }


        
/// <summary>
        
/// 启动IISWebServer
        
/// </summary>

        public void Start()
        
{
            
if (index == -1)
                
throw (new Exception("在IIS找不到此IISWebServer!"));

            DirectoryEntry Service 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC");
            DirectoryEntry Server;
            IEnumerator ie 
= Service.Children.GetEnumerator();

            
while (ie.MoveNext())
            
{
                Server 
= (DirectoryEntry)ie.Current;
                
if (Server.SchemaClassName == "IIsWebServer")
                
{
                    
if (Server.Properties["Serverbindings"][0].ToString() == ":" + this.Port + ":")
                    
{
                        Server.Invoke(
"stop"new object[0]);
                    }

                }

            }


            
try
            
{
                Server 
= new DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index);
                
if (Server != null)
                    Server.Invoke(
"start"new object[0]);
                
else
                    
throw (new Exception("在IIS找不到此IISWebServer!"));
            }

            
catch
            
{
                
throw (new Exception("在IIS找不到此IISWebServer!"));
            }

        }


        
/// <summary>
        
/// 
        
/// </summary>

        public IISWebServer()
        
{
            WebVirtualDirs 
= new IISWebVirtualDirCollection(this);
        }

    }



    
/// <summary>
    
/// 重构出虚拟目录的CollectionBase
    
/// </summary>

    public class IISWebVirtualDirCollection : CollectionBase
    
{
        
/// <summary>
        
/// 所属站点
        
/// </summary>

        public IISWebServer Parent = null;

        
/// <summary>
        
/// 指定索引号获得虚拟目录类
        
/// </summary>

        public IISWebVirtualDir this[int Index]
        
{
            
get
            
{
                
return (IISWebVirtualDir)this.List[Index];

            }

        }


        
/// <summary>
        
/// 指定名称获得虚拟目录类
        
/// </summary>

        public IISWebVirtualDir this[string Name]
        
{
            
get
            
{
                Name 
= Name.ToLower();
                IISWebVirtualDir list;
                
for (int i = 0; i < this.List.Count; i++)
                
{
                    list 
= (IISWebVirtualDir)this.List[i];
                    
if (list.Name.ToLower() == Name)
                        
return list;
                }

                
return null;
            }

        }



        
internal void Add_(IISWebVirtualDir WebVirtualDir)
        
{
            
try
            
{
                
this.List.Add(WebVirtualDir);
            }

            
catch
            
{
                
throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }


        }


        
/// <summary>
        
/// 添加一个虚拟目录
        
/// </summary>
        
/// <param name="WebVirtualDir"></param>

        public void Add(IISWebVirtualDir WebVirtualDir)
        
{
            WebVirtualDir.Parent 
= this.Parent;
            
try
            
{
                
this.List.Add(WebVirtualDir);

            }

            
catch
            
{
                
throw (new Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"));
            }

            IISManagement.CreateIISWebVirtualDir(WebVirtualDir, 
true);

        }


        
/// <summary>
        
/// 添加一组虚拟目录
        
/// </summary>
        
/// <param name="WebVirtualDirs"></param>

        public void AddRange(IISWebVirtualDir[] WebVirtualDirs)
        
{
            
for (int i = 0; i <= WebVirtualDirs.GetUpperBound(0); i++)
            
{
                Add(WebVirtualDirs[i]);
            }

        }


        
/// <summary>
        
/// 移除一个虚拟目录
        
/// </summary>
        
/// <param name="WebVirtualDir"></param>

        public void Remove(IISWebVirtualDir WebVirtualDir)
        
{
            
for (int i = 0; i < this.List.Count; i++)
            
{
                
if ((IISWebVirtualDir)this.List[i] == WebVirtualDir)
                
{
                    
this.List.RemoveAt(i);
                    IISManagement.RemoveIISWebVirtualDir(WebVirtualDir);
                    
return;
                }

            }

        }


        
/// <summary>
        
/// 指定父站点
        
/// </summary>
        
/// <param name="Parent"></param>

        public IISWebVirtualDirCollection(IISWebServer Parent)
        
{
            
this.Parent = Parent;
        }

    }



    
/// <summary>
    
/// 虚拟目录类
    
/// </summary>

    public class IISWebVirtualDir
    
{
        
/// <summary>
        
/// 所属站点
        
/// </summary>

        public IISWebServer Parent = null;
        
/// <summary>
        
/// 虚拟目录名称
        
/// </summary>

        public string Name = "Way";
        
/// <summary>
        
/// 读取
        
/// </summary>

        public bool AccessRead = true;
        
/// <summary>
        
/// 脚本支持
        
/// </summary>

        public bool AccessScript = true;
        
/// <summary>
        
/// 物理路径
        
/// </summary>

        public string Path = @"C:Inetpubwwwroot";
        
/// <summary>
        
/// 默认文档
        
/// </summary>

        public string DefaultDoc = "default.aspx";
        
/// <summary>
        
/// 使用默认文档
        
/// </summary>

        public bool EnableDefaultDoc = true;
        
/// <summary>
        
/// 所属的网站的网站说明
        
/// </summary>

        public string WebServer = "";

        
/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="WebServerName"></param>

        public IISWebVirtualDir(string WebServerName)
        
{
            
if (WebServerName.ToString() == "")
                
throw (new Exception("WebServerName不能为空!"));
            
this.WebServer = WebServerName;
        }

        
/// <summary>
        
/// 
        
/// </summary>

        public IISWebVirtualDir()
        
{

        }

    }

}

 应用实例代码如下:

 

原创粉丝点击