C# 操作IIS -App & AppPools

  1 using System;
  2 using System.DirectoryServices;
  3 using System.Management;
  4 using Microsoft.Web.Administration;
  5 
  6 namespace ConsoleApplication_IsNullTest
  7 {
  8     /// <summary>
  9     /// IIS Helper.
 10     /// </summary>
 11     public class IISHelper
 12     {
 13 
 14         private static string siteName = "siteName";
 15         private static string sitePath = "sitePath";
 16         private static string serverId = "001";
 17         private static string runtimeVersion="v4.0";
 18 
 19         public static string RuntimeVersion
 20         {
 21             get { return runtimeVersion; }
 22         }
 23 
 24         public static DirectoryEntry iisSite = new DirectoryEntry("IIS://localhost/W3SVC", "UserName", "Userpwd");
 25 
 26         private static ManagementScope scope = null;
 27 
 28         public IISHelper()
 29         {
 30             scope = new ManagementScope("ConfigManager.ManagementScopePath");
 31             if (scope.IsConnected == false)
 32             {
 33                 scope.Connect();
 34             }
 35         }
 36 
 37         /// <summary>
 38         /// 创建应用程序池
 39         /// </summary>
 40         /// <param name="AppPoolName">程序池名</param>
 41         /// <param name="PipelineModel">Managed pipeline model.</param>
 42         public static void CreateAppPool(string AppPoolName, ManagedPipelineMode pipelineMode)
 43         {
 44             DirectoryEntry newpool;
 45             DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
 46             newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool");
 47             newpool.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
 48             newpool.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
 49             newpool.CommitChanges();
 50         }
 51 
 52         /// <summary>
 53         /// 创建site
 54         /// </summary>
 55         public static void CreateWebSite(Object site)
 56         {
 57             ManagementObject manage = new ManagementObject(scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);
 58             ManagementBaseObject inputParameters = manage.GetMethodParameters("CreateNewSite");
 59             ManagementBaseObject[] serverBinding = new ManagementBaseObject[1];
 60             serverBinding[0] = CreateServerBinding("", "127.0.0.1", "8081");
 61             inputParameters["ServerComment"] = siteName;
 62             inputParameters["ServerBindings"] = serverBinding;
 63             inputParameters["PathOfRootVirtualDir"] = sitePath;
 64             inputParameters["ServerId"] = serverId;
 65             try
 66             {
 67                 manage.InvokeMethod("CreateNewSite", inputParameters, null);
 68             }
 69             catch
 70             {
 71                 throw new Exception("createNewSite");
 72             }
 73             SetAppToPool(siteName, serverId);
 74 
 75             System.Threading.Thread.Sleep(3000);
 76 
 77             //启动web site
 78             string serverName = "W3SVC/" + serverId;
 79             ManagementObject manageSite = new ManagementObject(scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
 80             manageSite.InvokeMethod("Start", null);
 81         }
 82 
 83         /// <summary>
 84         /// 关联应用程序池
 85         /// </summary>
 86         /// <param name="appPoolName"></param>
 87         /// <param name="serverId"></param>
 88         private static void SetAppToPool(string appPoolName, string serverId)
 89         {
 90             string path = string.Format("IIS://localhost/W3SVC/{0}/Root", serverId);
 91             DirectoryEntry entry = new DirectoryEntry(path);
 92             entry.Properties["AppPoolId"].Value = appPoolName;
 93             entry.CommitChanges();
 94             entry.Close();
 95         }
 96 
 97         /// <summary>
 98         /// Get site url前缀
 99         /// </summary>
100         /// <param name="HostName"></param>
101         /// <param name="IP"></param>
102         /// <param name="Port"></param>
103         /// <returns></returns>
104         private static ManagementObject CreateServerBinding(string HostName, string IP, string Port)
105         {
106             try
107             {
108                 ManagementClass classBinding = new ManagementClass(scope, new ManagementPath("ServerBinding"), null);
109                 ManagementObject serverBinding = classBinding.CreateInstance();
110                 serverBinding.Properties["Hostname"].Value = HostName;
111                 serverBinding.Properties["IP"].Value = IP;
112                 serverBinding.Properties["Port"].Value = Port;
113                 serverBinding.Put();
114                 return serverBinding;
115             }
116             catch
117             {
118                 return null;
119             }
120         }
121 
122         /// <summary>
123         /// 创建web site 子项的site $ 应用程序池
124         /// </summary>
125         /// <param name="site"></param>
126         /// <param name="serviceName"></param>
127         /// <param name="AppolName"></param>
128         public static void CreateApplication(Object site, string serviceName, string AppolName)
129         {
130             DirectoryEntry defaultWebSite = GetWebisteDirectory("FUSiteName");//父级site name
131             if (defaultWebSite != null)
132             {
133                 DirectoryEntry defaultWebSiteRoot = new DirectoryEntry(defaultWebSite.Path + "/Root");
134 
135                 //Create and setup new virtual directory
136                 DirectoryEntry virtualDirectory = defaultWebSiteRoot.Children.Add(siteName, "IIsWebVirtualDir");
137 
138                 virtualDirectory.Properties["Path"][0] = sitePath;
139                 virtualDirectory.Properties["AppFriendlyName"][0] = siteName;
140                 virtualDirectory.CommitChanges();
141 
142                 virtualDirectory.Invoke("AppCreate", 1);
143                 object[] param = { 0, siteName, true };
144                 virtualDirectory.Invoke("AppCreate3", param);
145                 virtualDirectory.Properties["AppPoolId"].Value = AppolName;
146 
147                 string appPoolPath = @"IIS://localhost/W3SVC/AppPools/" + AppolName;
148                 try
149                 {
150                     var appPoolEntry = new DirectoryEntry(appPoolPath);
151                     appPoolEntry.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
152                     appPoolEntry.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
153                     appPoolEntry.Invoke("SetInfo", null);
154                     appPoolEntry.CommitChanges();
155                     appPoolEntry.Close();
156                 }
157                 catch
158                 {
159 
160                 }
161                 virtualDirectory.CommitChanges();
162                 virtualDirectory.Close();
163             }
164         }
165 
166 
167         /// <summary>
168         /// Get web site directory.
169         /// </summary>
170         /// <param name="websiteName"></param>
171         /// <returns></returns>
172         private static DirectoryEntry GetWebisteDirectory(string websiteName)
173         {
174             DirectoryEntries des = iisSite.Children;
175             foreach (DirectoryEntry sub in des)
176             {
177                 if (sub.SchemaClassName == "IIsWebServer" && sub.Properties["ServerComment"].Contains(websiteName.Trim()))
178                 {
179 
180                     return sub;
181                 }
182             }
183             return null;
184         }
185     }
186 }

 

posted @ 2013-10-29 18:01  1280  阅读(1093)  评论(0编辑  收藏  举报
不想当将军的厨师不是好裁缝
友荐云推荐
QQ:63219702