• C#对IIS进行管理


    View Code
    View Code 
     using System;
     using System.Collections;
     using System.DirectoryServices;
     using Microsoft.Win32;
     
     namespace SCL
     {
     public class IISHelper
     {
     static DirectoryEntry iisDE = new DirectoryEntry("IIS://localhost/W3SVC");
     
     //判断 IIS是否安装
     public static bool IsIISSetup
     {
     get
     {
     object obj=Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Oc Manager\Subcomponents", "iis_inetmgr", "0");
     if (obj == null) return false;
     
     if(obj.ToString ().Equals("1"))
     return true;
     else
     return false;
     }
     }
     
     ///<summary> 
     /// Get The Location IIS WebServers Information 
     ///</summary> 
     ///<returns></returns> 
     public static Hashtable GetLocationIIsWebServers()
     {
     Hashtable result = new Hashtable();
     GetWebSiteInfo(ref result);
     return result;
     }
     
     /// <summary>
     /// 获取服务器IIS版本
     /// </summary>
     /// <param name="DomainName"></param>
     /// <returns></returns>
     public static WebServerTypes GetIISServerType(string DomainName)
     {
     if (string.IsNullOrEmpty(DomainName))
     {
     DomainName = "LOCALHOST";
     }
     string path = "IIS://" + DomainName + "/W3SVC/INFO";
     DirectoryEntry entry = null;
     try
     {
     entry = new DirectoryEntry(path);
     }
     catch
     {
     return WebServerTypes.Unknown;
     }
     int num = 5;
     try
     {
     num = (int)entry.Properties["MajorIISVersionNumber"].Value;
     }
     catch
     {
     return WebServerTypes.IIS5;
     }
     switch (num)
     {
     case 6:
     return WebServerTypes.IIS6;
     
     case 7:
     return WebServerTypes.IIS7;
     }
     return WebServerTypes.IIS6;
     }
     
     ///<summary> 
     /// Create a new IIS Webserver 
     ///</summary> 
     ///<param name="webServerName">webserver name</param> 
     ///<param name="path">webserver directory path</param> 
     ///<param name="port">access port</param> 
     public static void CreateNewIIsWebServer(string webServerName, string path, int port)
     {
     int siteID = GetWebSiteInfo(port);
     using (DirectoryEntry site = (DirectoryEntry)iisDE.Invoke("Create", "IIsWebServer", siteID))
     {
     site.Invoke("Put", "ServerComment", webServerName);
     site.Invoke("Put", "KeyType", "IIsWebServer");
     site.Invoke("Put", "ServerBindings", ":" + port.ToString() + ":");
     site.Invoke("Put", "ServerState", 2);
     site.Invoke("Put", "FrontPageWeb", 1);
     site.Invoke("Put", "DefaultDoc", "Default.aspx");
     site.Invoke("Put", "SecureBindings", ":443:");
     site.Invoke("Put", "ServerAutoStart", 1);
     site.Invoke("Put", "ServerSize", 1);
     site.Invoke("SetInfo");
     using (DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir"))
     {
     siteVDir.Properties["AppIsolated"][0] = 2;
     siteVDir.Properties["Path"][0] = path;
     siteVDir.Properties["AccessFlags"][0] = 513;
     siteVDir.Properties["FrontPageWeb"][0] = 1;
     //siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/"+webServerName; 
     siteVDir.Properties["AppFriendlyName"][0] = webServerName;
     siteVDir.Invoke("AppCreate", true);
     siteVDir.CommitChanges();
     }
     site.CommitChanges();
     }
     
     }
     
     ///<summary> 
     /// Create a new virtual directory 
     ///</summary> 
     ///<param name="website">webserver name</param> 
     ///<param name="dirName">virtual directory name</param> 
     ///<param name="properties">virtual dirctory properties</param> 
     public static void CreateNewVirtualDir(string website, string dirName, System.Data.PropertyCollection properties)
     {
     if (GetVirtualDir(website, dirName)) throw new Exception(" The Virtual Dir is alread existed");
     using (DirectoryEntry de = GetWebSiteInfo(website))
     {
     using (DirectoryEntry vde = de.Children.Add(dirName, "IIsWebVirtualDir"))
     {
     vde.CommitChanges();
     de.CommitChanges();
     UpdateVDirInfo(vde, ref properties);
     vde.Invoke("AppCreate", true);
     vde.CommitChanges();
     de.CommitChanges();
     }
     }
     }
     
     ///<summary> 
     /// Get Common virtual directory setting 
     ///</summary> 
     ///<param name="path">virtual directory path</param> 
     ///<param name="vdir">virtual directory name</param> 
     ///<returns></returns> 
     public static System.Data.PropertyCollection GetDefaultVirtualDirSetting(string path, string vdir)
     {
     System.Data.PropertyCollection vProperty = new System.Data.PropertyCollection();
     //vProperty.Add("AnonymousUserName",""); 
     //vProperty.Add("AnonymousUserPass",""); 
     vProperty.Add("AccessRead", true);
     vProperty.Add("AccessExecute", false);
     vProperty.Add("AuthBasic", true);
     vProperty.Add("AuthNTLM", true);
     vProperty.Add("ContentIndexed", true);
     vProperty.Add("EnableDefaultDoc", true);
     vProperty.Add("EnableDirBrowsing", false);
     vProperty.Add("AccessSSL", false);
     vProperty.Add("AccessScript", false);
     vProperty.Add("DefaultDoc", "Default.aspx");
     vProperty.Add("Path", path);
     vProperty.Add("AppIsolated", 2);
     vProperty.Add("AppFriendlyName", vdir);
     vProperty.Add("AccessFlags", 513);
     vProperty.Add("FrontPageWeb", 1);
     //vProperty.Add("DontLog", true); 
     //vProperty.Add("AppRoot", "LM/W3SVC/" + siteID + "/" + vdir); 
     return vProperty;
     }
     
     ///<summary> 
     /// Delete the virtual directory in the WebServer 
     ///</summary> 
     ///<param name="website">webserver name</param> 
     ///<param name="vdir">virtual directory name</param> 
     public static void DeleteVirtualDir(string website, string vdir)
     {
     if (!GetVirtualDir(website, vdir)) throw new Exception(" The virtual directory don't exist in the website");
     using (DirectoryEntry de = GetWebSiteInfo(website))
     {
     foreach (DirectoryEntry sub in de.Children)
     {
     if (sub.Name == vdir)
     {
     de.Invoke("Delete", new string[] { sub.SchemaClassName, vdir });
     de.CommitChanges();
     }
     }
     }
     }
     
     
     private static void UpdateVDirInfo(DirectoryEntry newDE, ref System.Data.PropertyCollection properties)
     {
     //newDE.Properties["AnonyMousUserName"][0] = properties["AnonymousUserName"].ToString(); 
     //newDE.Properties["AnonymousUserPass"][0] = properties["AnonymousUserPass"].ToString(); 
     newDE.Properties["AccessRead"][0] = (bool)properties["AccessRead"];
     newDE.Properties["AccessExecute"][0] = (bool)properties["AccessExecute"];
     newDE.Properties["AuthBasic"][0] = (bool)properties["AuthBasic"];
     newDE.Properties["AuthNTLM"][0] = (bool)properties["AuthNTLM"];
     newDE.Properties["ContentIndexed"][0] = (bool)properties["ContentIndexed"];
     newDE.Properties["EnableDefaultDoc"][0] = (bool)properties["EnableDefaultDoc"];
     newDE.Properties["EnableDirBrowsing"][0] = (bool)properties["EnableDirBrowsing"];
     newDE.Properties["AccessSSL"][0] = (bool)properties["AccessSSL"];
     newDE.Properties["AccessScript"][0] = (bool)properties["AccessScript"];
     newDE.Properties["DefaultDoc"][0] = properties["DefaultDoc"].ToString();
     newDE.Properties["Path"][0] = properties["Path"].ToString();
     newDE.Properties["AppIsolated"][0] = (int)properties["AppIsolated"];
     newDE.Properties["AppFriendlyName"][0] = properties["AppFriendlyName"].ToString();
     newDE.Properties["AccessFlags"][0] = (int)properties["AccessFlags"];
     newDE.Properties["FrontPageWeb"][0] = (int)properties["FrontPageWeb"];
     //newDE.Properties["DontLog"][0] = (bool)properties["DontLog"]; 
     //newDE.Properties["AppRoot"][0] = properties["AppRoot"].ToString(); 
     }
     
     public static bool GetVirtualDir(string webSite, string dirName)
     {
     bool result = false;
     using (DirectoryEntry de = GetWebSiteInfo(webSite))
     {
     
     if (de != null)
     {
     foreach (DirectoryEntry subVD in de.Children)
     {
     if (subVD.SchemaClassName == "IIsWebVirtualDir" && subVD.Name == dirName)
     {
     result = true;
     break;
     }
     }
     }
     }
     return result;
     }
     
     private static void GetWebSiteInfo(ref Hashtable webServer)
     {
     DirectoryEntries des = iisDE.Children;
     foreach (DirectoryEntry subDE in des)
     {
     if (subDE.SchemaClassName == "IIsWebServer")
     {
     webServer.Add(subDE.Properties["ServerComment"].Value.ToString(), subDE.Name);
     }
     }
     des = null;
     }
     
     private static DirectoryEntry GetWebSiteInfo(string website)
     {
     DirectoryEntry result = null;
     DirectoryEntries des = iisDE.Children;
     foreach (DirectoryEntry subDE in des)
     {
     if (subDE.SchemaClassName == "IIsWebServer" && subDE.Properties["ServerComment"].Value.ToString() == website)
     {
     result = subDE.Children.Find("Root", "IIsWebVirtualDir");
     break;
     }
     }
     des = null;
     return result;
     }
     
     private static int GetWebSiteInfo(int port)
     {
     int result = 1, i = 1;
     DirectoryEntries des = iisDE.Children;
     foreach (DirectoryEntry subDE in des)
     {
     if (subDE.SchemaClassName == "IIsWebServer")
     {
     if ((i = Convert.ToInt32(subDE.Name)) >= result)
     {
     result = i + 1;
     }
     if (subDE.Properties["ServerBindings"][0].ToString() == ":" + port.ToString() + ":")
     {
     throw new Exception(" The port is already used");
     }
     }
     }
     des = null;
     return result;
     }
     }
     
     public enum WebServerTypes
     {
     Unknown,
     IIS5,
     IIS6,
     IIS7
     }
     }

     /// <summary>
            /// 獲取VDir支持的所有屬性
            /// </summary>
            /// <returns></returns>
            public static Dictionary<string, string> GetVDirPropertyName()
            {
                //System.DirectoryServices.DirectoryEntry VDir;
                /* IIS://localhost/W3SVC/1"有如下属性
                LogFileDirectory=C:\inetpub\logs\LogFiles
                LogPluginClsid={FF160663-DE82-11CF-BC0A-00AA006111E0}
                AppPoolId=ASP.NET v4.0
                DontLog=False
                TraceUriPrefix=没有值
                DirBrowseFlags=1073741854
                DefaultDoc=Default.htm,Default.asp,index.htm,index.html,iisstart.htm,default.aspx
                AuthFlags=7
                AnonymousUserName=IUSR
                AspDiskTemplateCacheDirectory=C:\inetpub\temp\ASP Compiled Templates
                HttpErrors=System.Object[]
                SSIExecDisable=False
                AccessSSLFlags=0
                NTAuthenticationProviders=Negotiate,NTLM
                AccessFlags=513
                ScriptMaps=System.Object[]
                RedirectHeaders=没有值
                HttpCustomHeaders=X-Powered-By: ASP.NET
                ServerState=2
                Win32Error=0
                ServerCommand=1
                KeyType=IIsWebServer
                ServerAutoStart=True
                ServerComment=Default Web Site
                ServerBindings=:80:localhost.huawei.com
                CreateCGIWithNewConsole=True
                **/

                /* IIS://localhost/W3SVC/1/ROOT" 有如下属性
                AppPoolId=DefaultAppPool
                DontLog=False
                DirBrowseFlags=1073741854
                DefaultDoc=Default.htm,Default.asp,index.htm,index.html,iisstart.htm,default.aspx
                AuthFlags=7
                AnonymousUserName=IUSR
                AspDiskTemplateCacheDirectory=C:\inetpub\temp\ASP Compiled Templates
                HttpErrors=System.Object[]
                SSIExecDisable=False
                AccessSSLFlags=0
                NTAuthenticationProviders=Negotiate,NTLM
                AccessFlags=513
                ScriptMaps=System.Object[]
                RedirectHeaders=没有值
                HttpCustomHeaders=X-Powered-By: ASP.NET
                CreateCGIWithNewConsole=True
                KeyType=IIsWebVirtualDir
                Path=C:\inetpub\wwwroot
                UNCUserName=china\xWX70375
                UNCPassword=Huaci188
                AppIsolated=0
                AppRoot=/LM/W3SVC/1/ROOT

                **/

                try
                {
                    const String constIISWebSiteRoot = "IIS://localhost/W3SVC/1";//IIS://ComputerName/Service/WebsiteId/Directory
                    DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);
                    string sOut = "";
                    //下面的方法是得到所有属性名称的方法:
                    Dictionary<string, string> keyValueDic = new Dictionary<string, string>();
                    foreach (PropertyValueCollection pvc in root.Properties)
                    {
                        //Console.WriteLine(pvc.PropertyName);
                        if (pvc.Value == null)
                        {
                            keyValueDic.Add(pvc.PropertyName, "没有值");
                        }
                        else
                        {
                            keyValueDic.Add(pvc.PropertyName, pvc.Value.ToString());
                            //sOut += pvc.PropertyName + "=" +pvc.Value.ToString() + System.Environment.NewLine;
                        }
                    }
                    return keyValueDic;
                }
                catch (Exception ex)
                {
                    //服务帐户配置中不存在服务正常运行所需的特权。
                    //您可以使用 Services Microsoft Management Console (MMC)管理单元(services.msc)
                    //和 Local Security Settings MMC 管理单元(secpol.msc)来查看服务配置和帐户配置

                    //解决方法,将Services.msc中IIS Admin Service设为本地系统账户登录
                    return null;
                }
            }

  • 相关阅读:
    “北漂”的那些年 5
    “北漂”的那些年 4
    全国省市区代码-2020版
    记一次CDH修改IP
    Python爬取抖音视频
    代码生成,减少70%的重复劳动
    Log4J配置详解
    linux常用命令
    tomcat修改默认访问首页
    java根据身份证号和获取用户年龄和性别的工具类
  • 原文地址:https://www.cnblogs.com/8090sns/p/2814922.html
Copyright © 2020-2023  润新知