zoukankan      html  css  js  c++  java
  • C# 操作IIS方法集合

    如果在win8,win7情况下报错:未知错误(0x80005000)

    见http://blog.csdn.net/ts1030746080/article/details/8741399

     
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.DirectoryServices;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;

    namespace IISControlHelper
    {
        /// <summary>
        
    /// IIS 操作方法集合
        
    /// http://blog.csdn.net/ts1030746080/article/details/8741399 错误
        
    /// </summary>    public class IISWorker
        {
            private static string HostName = localhost;

            /// <summary>
            
    /// 获取本地IIS版本
            
    /// </summary>
            
    /// <returns></returns>        public static string GetIIsVersion()
            {
                try
                {
                    DirectoryEntry entry = new DirectoryEntry(IIS:// + HostName + /W3SVC/INFO);
                    string version = entry.Properties[MajorIISVersionNumber].Value.ToString();
                    return version;
                }
                catch (Exception se)
                {
                    //说明一点:IIS5.0中没有(int)entry.Properties[“MajorIISVersionNumber”].Value;属性,将抛出异常 证明版本为 5.0                return string.Empty;
                }
            }

            /// <summary>
            
    /// 创建虚拟目录网站
            
    /// </summary>
            
    /// <param name=”webSiteName”>网站名称</param>
            
    /// <param name=”physicalPath”>物理路径</param>
            
    /// <param name=”domainPort”>站点+端口,如192.168.1.23:90</param>
            
    /// <param name=”isCreateAppPool”>是否创建新的应用程序池</param>
            
    /// <returns></returns>        public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool)
            {
                DirectoryEntry root = new DirectoryEntry(IIS:// + HostName + /W3SVC);
                // 为新WEB站点查找一个未使用的ID            int siteID = 1;
                foreach (DirectoryEntry e in root.Children)
                {
                    if (e.SchemaClassName == IIsWebServer)
                    {
                        int ID = Convert.ToInt32(e.Name);
                        if (ID >= siteID) { siteID = ID + 1; }
                    }
                }
                // 创建WEB站点            DirectoryEntry site = (DirectoryEntry)root.Invoke(CreateIIsWebServer, siteID);
                site.Invoke(PutServerComment, webSiteName);
                site.Invoke(PutKeyTypeIIsWebServer);
                site.Invoke(PutServerBindings, domainPort + :);
                site.Invoke(PutServerState2);
                site.Invoke(PutFrontPageWeb1);
                site.Invoke(PutDefaultDocDefault.html);
                // site.Invoke(“Put”, “SecureBindings”, ”:443:”);            site.Invoke(PutServerAutoStart1);
                site.Invoke(PutServerSize1);
                site.Invoke(SetInfo);
                // 创建应用程序虚拟目录
                DirectoryEntry siteVDir = site.Children.Add(RootIISWebVirtualDir);
                siteVDir.Properties[AppIsolated][0] = 2;
                siteVDir.Properties[Path][0] = physicalPath;
                siteVDir.Properties[AccessFlags][0] = 513;
                siteVDir.Properties[FrontPageWeb][0] = 1;
                siteVDir.Properties[AppRoot][0] = LM/W3SVC/ + siteID + /Root;
                siteVDir.Properties[AppFriendlyName][0] = Root;

                if (isCreateAppPool)
                {
                    DirectoryEntry apppools = new DirectoryEntry(IIS:// + HostName + /W3SVC/AppPools);

                    DirectoryEntry newpool = apppools.Children.Add(webSiteName, IIsApplicationPool);
                    newpool.Properties[AppPoolIdentityType][0] = 4//4                newpool.Properties[ManagedPipelineMode][0] = 0//0:集成模式 1:经典模式                newpool.CommitChanges();
                    siteVDir.Properties[AppPoolId][0] = webSiteName;
                }

                siteVDir.CommitChanges();
                site.CommitChanges();
                return siteID;
            }

            /// <summary>
            
    /// 得到网站的物理路径
            
    /// </summary>
            
    /// <param name=”rootEntry”>网站节点</param>
            
    /// <returns></returns>        public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)
            {
                string physicalPath = “”;
                foreach (DirectoryEntry childEntry in rootEntry.Children)
                {
                    if ((childEntry.SchemaClassName == IIsWebVirtualDir) && (childEntry.Name.ToLower() == root))
                    {
                        if (childEntry.Properties[Path].Value != null)
                        {
                            physicalPath = childEntry.Properties[Path].Value.ToString();
                        }
                        else
                        {
                            physicalPath = “”;
                        }
                    }
                }
                return physicalPath;
            }

            /// <summary>
            
    /// 获取站点名
            
    /// </summary>        public static List<IISInfo> GetServerBindings()
            {
                List<IISInfo> iisList = new List<IISInfo>();
                string entPath = String.Format(IIS://{0}/w3svc, HostName);
                DirectoryEntry ent = new DirectoryEntry(entPath);
                foreach (DirectoryEntry child in ent.Children)
                {
                    if (child.SchemaClassName.Equals(IIsWebServer, StringComparison.OrdinalIgnoreCase))
                    {
                        if (child.Properties[ServerBindings].Value != null)
                        {
                            object objectArr = child.Properties[ServerBindings].Value;
                            string serverBindingStr = string.Empty;
                            if (IsArray(objectArr))//如果有多个绑定站点时                        {
                                object[] objectToArr = (object[])objectArr;
                                serverBindingStr = objectToArr[0].ToString();
                            }
                            else//只有一个绑定站点                        {
                                serverBindingStr = child.Properties[ServerBindings].Value.ToString();
                            }
                            IISInfo iisInfo = new IISInfo();
                            iisInfo.DomainPort = serverBindingStr;
                            iisInfo.AppPool = child.Properties[AppPoolId].Value.ToString();//应用程序池                        iisList.Add(iisInfo);
                        }
                    }
                }
                return iisList;
            }


            public static bool CreateAppPool(string appPoolName, string Username, string Password)
            {
                bool issucess = false;
                try
                {
                    //创建一个新程序池                DirectoryEntry newpool;
                    DirectoryEntry apppools = new DirectoryEntry(IIS:// + HostName + /W3SVC/AppPools);
                    newpool = apppools.Children.Add(appPoolName, IIsApplicationPool);

                    //设置属性 访问用户名和密码 一般采取默认方式                newpool.Properties[WAMUserName][0] = Username;
                    newpool.Properties[WAMUserPass][0] = Password;
                    newpool.Properties[AppPoolIdentityType][0] = 3;
                    newpool.CommitChanges();
                    issucess = true;
                    return issucess;
                }
                catch // (Exception ex)             {
                    return false;
                }
            }


            /// <summary>
            
    /// 建立程序池后关联相应应用程序及虚拟目录
            
    /// </summary>        public static void SetAppToPool(string appname,string poolName)
            {
                //获取目录            DirectoryEntry getdir = new DirectoryEntry(IIS://localhost/W3SVC);
                foreach (DirectoryEntry getentity in getdir.Children)
                {
                    if (getentity.SchemaClassName.Equals(IIsWebServer))
                    {
                        //设置应用程序程序池 先获得应用程序 在设定应用程序程序池
                        
    //第一次测试根目录                    foreach (DirectoryEntry getchild in getentity.Children)
                        {
                            if (getchild.SchemaClassName.Equals(IIsWebVirtualDir))
                            {
                                //找到指定的虚拟目录.                            foreach (DirectoryEntry getsite in getchild.Children)
                                {
                                    if (getsite.Name.Equals(appname))
                                    {
                                        //【测试成功通过】                                    getsite.Properties[AppPoolId].Value = poolName;
                                        getsite.CommitChanges();
                                    }
                                }
                            }
                        }
                    }
                }
            }


            /// <summary>
            
    /// 判断object对象是否为数组
            
    /// </summary>        public static bool IsArray(object o)
            {
                return o is Array;
            }
        }
    }
     
  • 相关阅读:
    正则匹配中 ^ $ 和  的区别
    jQuery 选择同时包含两个class的元素的实现方法
    JSON—去除JSON数据中的所有HTML标…
    HTML5 自定义属性 data-*属性名一定要小写吗?
    Java线程池(ExecutorService)使用
    ExecutorService中submit和execute的区别
    启用Microsoft loopback Adapte
    【Spring】如何配置多个applicationContext.xml文件
    C#编程之AES加密(一)
    C#编程之利用C#创建dll并调用(三)
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778345.html
Copyright © 2011-2022 走看看