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

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

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

     
      1 using System;
      2 using System.Collections;
      3 using System.Collections.Generic;
      4 using System.DirectoryServices;
      5 using System.Linq;
      6 using System.Net;
      7 using System.Text;
      8 using System.Threading.Tasks;
      9 
     10 namespace IISControlHelper
     11 {
     12     /// <summary>
     13     /// IIS 操作方法集合
     14     /// http://blog.csdn.net/ts1030746080/article/details/8741399 错误
     15     /// </summary>
     16     public class IISWorker
     17     {
     18         private static string HostName = "localhost";
     19 
     20         /// <summary>
     21         /// 获取本地IIS版本
     22         /// </summary>
     23         /// <returns></returns>
     24         public static string GetIIsVersion()
     25         {
     26             try
     27             {
     28                 DirectoryEntry entry = new DirectoryEntry("IIS://" + HostName + "/W3SVC/INFO");
     29                 string version = entry.Properties["MajorIISVersionNumber"].Value.ToString();
     30                 return version;
     31             }
     32             catch (Exception se)
     33             {
     34                 //说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0
     35                 return string.Empty;
     36             }
     37         }
     38 
     39         /// <summary>
     40         /// 创建虚拟目录网站
     41         /// </summary>
     42         /// <param name="webSiteName">网站名称</param>
     43         /// <param name="physicalPath">物理路径</param>
     44         /// <param name="domainPort">站点+端口,如192.168.1.23:90</param>
     45         /// <param name="isCreateAppPool">是否创建新的应用程序池</param>
     46         /// <returns></returns>
     47         public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool)
     48         {
     49             DirectoryEntry root = new DirectoryEntry("IIS://" + HostName + "/W3SVC");
     50             // 为新WEB站点查找一个未使用的ID
     51             int siteID = 1;
     52             foreach (DirectoryEntry e in root.Children)
     53             {
     54                 if (e.SchemaClassName == "IIsWebServer")
     55                 {
     56                     int ID = Convert.ToInt32(e.Name);
     57                     if (ID >= siteID) { siteID = ID + 1; }
     58                 }
     59             }
     60             // 创建WEB站点
     61             DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
     62             site.Invoke("Put", "ServerComment", webSiteName);
     63             site.Invoke("Put", "KeyType", "IIsWebServer");
     64             site.Invoke("Put", "ServerBindings", domainPort + ":");
     65             site.Invoke("Put", "ServerState", 2);
     66             site.Invoke("Put", "FrontPageWeb", 1);
     67             site.Invoke("Put", "DefaultDoc", "Default.html");
     68             // site.Invoke("Put", "SecureBindings", ":443:");
     69             site.Invoke("Put", "ServerAutoStart", 1);
     70             site.Invoke("Put", "ServerSize", 1);
     71             site.Invoke("SetInfo");
     72             // 创建应用程序虚拟目录
     73 
     74             DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
     75             siteVDir.Properties["AppIsolated"][0] = 2;
     76             siteVDir.Properties["Path"][0] = physicalPath;
     77             siteVDir.Properties["AccessFlags"][0] = 513;
     78             siteVDir.Properties["FrontPageWeb"][0] = 1;
     79             siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root";
     80             siteVDir.Properties["AppFriendlyName"][0] = "Root";
     81 
     82             if (isCreateAppPool)
     83             {
     84                 DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");
     85 
     86                 DirectoryEntry newpool = apppools.Children.Add(webSiteName, "IIsApplicationPool");
     87                 newpool.Properties["AppPoolIdentityType"][0] = "4"; //4
     88                 newpool.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式
     89                 newpool.CommitChanges();
     90                 siteVDir.Properties["AppPoolId"][0] = webSiteName;
     91             }
     92 
     93             siteVDir.CommitChanges();
     94             site.CommitChanges();
     95             return siteID;
     96         }
     97 
     98         /// <summary>
     99         /// 得到网站的物理路径
    100         /// </summary>
    101         /// <param name="rootEntry">网站节点</param>
    102         /// <returns></returns>
    103         public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)
    104         {
    105             string physicalPath = "";
    106             foreach (DirectoryEntry childEntry in rootEntry.Children)
    107             {
    108                 if ((childEntry.SchemaClassName == "IIsWebVirtualDir") && (childEntry.Name.ToLower() == "root"))
    109                 {
    110                     if (childEntry.Properties["Path"].Value != null)
    111                     {
    112                         physicalPath = childEntry.Properties["Path"].Value.ToString();
    113                     }
    114                     else
    115                     {
    116                         physicalPath = "";
    117                     }
    118                 }
    119             }
    120             return physicalPath;
    121         }
    122 
    123         /// <summary>
    124         /// 获取站点名
    125         /// </summary>
    126         public static List<IISInfo> GetServerBindings()
    127         {
    128             List<IISInfo> iisList = new List<IISInfo>();
    129             string entPath = String.Format("IIS://{0}/w3svc", HostName);
    130             DirectoryEntry ent = new DirectoryEntry(entPath);
    131             foreach (DirectoryEntry child in ent.Children)
    132             {
    133                 if (child.SchemaClassName.Equals("IIsWebServer", StringComparison.OrdinalIgnoreCase))
    134                 {
    135                     if (child.Properties["ServerBindings"].Value != null)
    136                     {
    137                         object objectArr = child.Properties["ServerBindings"].Value;
    138                         string serverBindingStr = string.Empty;
    139                         if (IsArray(objectArr))//如果有多个绑定站点时
    140                         {
    141                             object[] objectToArr = (object[])objectArr;
    142                             serverBindingStr = objectToArr[0].ToString();
    143                         }
    144                         else//只有一个绑定站点
    145                         {
    146                             serverBindingStr = child.Properties["ServerBindings"].Value.ToString();
    147                         }
    148                         IISInfo iisInfo = new IISInfo();
    149                         iisInfo.DomainPort = serverBindingStr;
    150                         iisInfo.AppPool = child.Properties["AppPoolId"].Value.ToString();//应用程序池
    151                         iisList.Add(iisInfo);
    152                     }
    153                 }
    154             }
    155             return iisList;
    156         }
    157 
    158 
    159         public static bool CreateAppPool(string appPoolName, string Username, string Password)
    160         {
    161             bool issucess = false;
    162             try
    163             {
    164                 //创建一个新程序池
    165                 DirectoryEntry newpool;
    166                 DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");
    167                 newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
    168 
    169                 //设置属性 访问用户名和密码 一般采取默认方式
    170                 newpool.Properties["WAMUserName"][0] = Username;
    171                 newpool.Properties["WAMUserPass"][0] = Password;
    172                 newpool.Properties["AppPoolIdentityType"][0] = "3";
    173                 newpool.CommitChanges();
    174                 issucess = true;
    175                 return issucess;
    176             }
    177             catch // (Exception ex) 
    178             {
    179                 return false;
    180             }
    181         }
    182 
    183 
    184         /// <summary>
    185         /// 建立程序池后关联相应应用程序及虚拟目录
    186         /// </summary>
    187         public static void SetAppToPool(string appname,string poolName)
    188         {
    189             //获取目录
    190             DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");
    191             foreach (DirectoryEntry getentity in getdir.Children)
    192             {
    193                 if (getentity.SchemaClassName.Equals("IIsWebServer"))
    194                 {
    195                     //设置应用程序程序池 先获得应用程序 在设定应用程序程序池
    196                     //第一次测试根目录
    197                     foreach (DirectoryEntry getchild in getentity.Children)
    198                     {
    199                         if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))
    200                         {
    201                             //找到指定的虚拟目录.
    202                             foreach (DirectoryEntry getsite in getchild.Children)
    203                             {
    204                                 if (getsite.Name.Equals(appname))
    205                                 {
    206                                     //【测试成功通过】
    207                                     getsite.Properties["AppPoolId"].Value = poolName;
    208                                     getsite.CommitChanges();
    209                                 }
    210                             }
    211                         }
    212                     }
    213                 }
    214             }
    215         }
    216 
    217 
    218         /// <summary>
    219         /// 判断object对象是否为数组
    220         /// </summary>
    221         public static bool IsArray(object o)
    222         {
    223             return o is Array;
    224         }
    225     }
    226 }
  • 相关阅读:
    windows 临界区 InitializeCriticalSectionAndSpinCount以及InitializeCriticalSection的区别
    SRWLock 轻量级的读写锁
    QT 遍历获取Form上的控件
    mssql 查询作业执行情况,耗时 等
    C++ builder FMX 遍历窗口所有控件 并 动态消失
    delphi fmx 控件从天上掉下来
    Vue2入门必知必会
    人人开源&项目脚手架&微服务整合
    Spring Security应用到源码分析
    K8S系统学习笔记总览
  • 原文地址:https://www.cnblogs.com/webenh/p/7070726.html
Copyright © 2011-2022 走看看