设为首页 收藏本站
查看: 482|回复: 0

[经验分享] C#对IIS进行管理类库,管理代码+事例代码

[复制链接]

尚未签到

发表于 2015-8-15 11:37:06 | 显示全部楼层 |阅读模式
  C#对IIS进行管理,管理代码:

DSC0000.gif DSC0001.gif View Code

  1 using System;
  2 using System.Collections;
  3 using System.DirectoryServices;
  4 using Microsoft.Win32;
  5
  6 namespace SCL
  7 {
  8 public class IISHelper
  9 {
10 static DirectoryEntry iisDE = new DirectoryEntry("IIS://localhost/W3SVC");
11
12 //判断 IIS是否安装
13 public static bool IsIISSetup
14 {
15 get
16 {
17 object obj=Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Oc Manager\Subcomponents", "iis_inetmgr", "0");
18 if (obj == null) return false;
19
20 if(obj.ToString ().Equals("1"))
21 return true;
22 else
23 return false;
24 }
25 }
26
27 ///<summary>
28 /// Get The Location IIS WebServers Information
29 ///</summary>
30 ///<returns></returns>
31 public static Hashtable GetLocationIIsWebServers()
32 {
33 Hashtable result = new Hashtable();
34 GetWebSiteInfo(ref result);
35 return result;
36 }
37
38 /// <summary>
39 /// 获取服务器IIS版本
40 /// </summary>
41 /// <param name="DomainName"></param>
42 /// <returns></returns>
43 public static WebServerTypes GetIISServerType(string DomainName)
44 {
45 if (string.IsNullOrEmpty(DomainName))
46 {
47 DomainName = "LOCALHOST";
48 }
49 string path = "IIS://" + DomainName + "/W3SVC/INFO";
50 DirectoryEntry entry = null;
51 try
52 {
53 entry = new DirectoryEntry(path);
54 }
55 catch
56 {
57 return WebServerTypes.Unknown;
58 }
59 int num = 5;
60 try
61 {
62 num = (int)entry.Properties["MajorIISVersionNumber"].Value;
63 }
64 catch
65 {
66 return WebServerTypes.IIS5;
67 }
68 switch (num)
69 {
70 case 6:
71 return WebServerTypes.IIS6;
72
73 case 7:
74 return WebServerTypes.IIS7;
75 }
76 return WebServerTypes.IIS6;
77 }
78
79 ///<summary>
80 /// Create a new IIS Webserver
81 ///</summary>
82 ///<param name="webServerName">webserver name</param>
83 ///<param name="path">webserver directory path</param>
84 ///<param name="port">access port</param>
85 public static void CreateNewIIsWebServer(string webServerName, string path, int port)
86 {
87 int siteID = GetWebSiteInfo(port);
88 using (DirectoryEntry site = (DirectoryEntry)iisDE.Invoke("Create", "IIsWebServer", siteID))
89 {
90 site.Invoke("Put", "ServerComment", webServerName);
91 site.Invoke("Put", "KeyType", "IIsWebServer");
92 site.Invoke("Put", "ServerBindings", ":" + port.ToString() + ":");
93 site.Invoke("Put", "ServerState", 2);
94 site.Invoke("Put", "FrontPageWeb", 1);
95 site.Invoke("Put", "DefaultDoc", "Default.aspx");
96 site.Invoke("Put", "SecureBindings", ":443:");
97 site.Invoke("Put", "ServerAutoStart", 1);
98 site.Invoke("Put", "ServerSize", 1);
99 site.Invoke("SetInfo");
100 using (DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir"))
101 {
102 siteVDir.Properties["AppIsolated"][0] = 2;
103 siteVDir.Properties["Path"][0] = path;
104 siteVDir.Properties["AccessFlags"][0] = 513;
105 siteVDir.Properties["FrontPageWeb"][0] = 1;
106 //siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/"+webServerName;
107 siteVDir.Properties["AppFriendlyName"][0] = webServerName;
108 siteVDir.Invoke("AppCreate", true);
109 siteVDir.CommitChanges();
110 }
111 site.CommitChanges();
112 }
113
114 }
115
116 ///<summary>
117 /// Create a new virtual directory
118 ///</summary>
119 ///<param name="website">webserver name</param>
120 ///<param name="dirName">virtual directory name</param>
121 ///<param name="properties">virtual dirctory properties</param>
122 public static void CreateNewVirtualDir(string website, string dirName, System.Data.PropertyCollection properties)
123 {
124 if (GetVirtualDir(website, dirName)) throw new Exception(" The Virtual Dir is alread existed");
125 using (DirectoryEntry de = GetWebSiteInfo(website))
126 {
127 using (DirectoryEntry vde = de.Children.Add(dirName, "IIsWebVirtualDir"))
128 {
129 vde.CommitChanges();
130 de.CommitChanges();
131 UpdateVDirInfo(vde, ref properties);
132 vde.Invoke("AppCreate", true);
133 vde.CommitChanges();
134 de.CommitChanges();
135 }
136 }
137 }
138
139 ///<summary>
140 /// Get Common virtual directory setting
141 ///</summary>
142 ///<param name="path">virtual directory path</param>
143 ///<param name="vdir">virtual directory name</param>
144 ///<returns></returns>
145 public static System.Data.PropertyCollection GetDefaultVirtualDirSetting(string path, string vdir)
146 {
147 System.Data.PropertyCollection vProperty = new System.Data.PropertyCollection();
148 //vProperty.Add("AnonymousUserName","");
149 //vProperty.Add("AnonymousUserPass","");
150 vProperty.Add("AccessRead", true);
151 vProperty.Add("AccessExecute", false);
152 vProperty.Add("AuthBasic", true);
153 vProperty.Add("AuthNTLM", true);
154 vProperty.Add("ContentIndexed", true);
155 vProperty.Add("EnableDefaultDoc", true);
156 vProperty.Add("EnableDirBrowsing", false);
157 vProperty.Add("AccessSSL", false);
158 vProperty.Add("AccessScript", false);
159 vProperty.Add("DefaultDoc", "Default.aspx");
160 vProperty.Add("Path", path);
161 vProperty.Add("AppIsolated", 2);
162 vProperty.Add("AppFriendlyName", vdir);
163 vProperty.Add("AccessFlags", 513);
164 vProperty.Add("FrontPageWeb", 1);
165 //vProperty.Add("DontLog", true);
166 //vProperty.Add("AppRoot", "LM/W3SVC/" + siteID + "/" + vdir);
167 return vProperty;
168 }
169
170 ///<summary>
171 /// Delete the virtual directory in the WebServer
172 ///</summary>
173 ///<param name="website">webserver name</param>
174 ///<param name="vdir">virtual directory name</param>
175 public static void DeleteVirtualDir(string website, string vdir)
176 {
177 if (!GetVirtualDir(website, vdir)) throw new Exception(" The virtual directory don't exist in the website");
178 using (DirectoryEntry de = GetWebSiteInfo(website))
179 {
180 foreach (DirectoryEntry sub in de.Children)
181 {
182 if (sub.Name == vdir)
183 {
184 de.Invoke("Delete", new string[] { sub.SchemaClassName, vdir });
185 de.CommitChanges();
186 }
187 }
188 }
189 }
190
191
192 private static void UpdateVDirInfo(DirectoryEntry newDE, ref System.Data.PropertyCollection properties)
193 {
194 //newDE.Properties["AnonyMousUserName"][0] = properties["AnonymousUserName"].ToString();
195 //newDE.Properties["AnonymousUserPass"][0] = properties["AnonymousUserPass"].ToString();
196 newDE.Properties["AccessRead"][0] = (bool)properties["AccessRead"];
197 newDE.Properties["AccessExecute"][0] = (bool)properties["AccessExecute"];
198 newDE.Properties["AuthBasic"][0] = (bool)properties["AuthBasic"];
199 newDE.Properties["AuthNTLM"][0] = (bool)properties["AuthNTLM"];
200 newDE.Properties["ContentIndexed"][0] = (bool)properties["ContentIndexed"];
201 newDE.Properties["EnableDefaultDoc"][0] = (bool)properties["EnableDefaultDoc"];
202 newDE.Properties["EnableDirBrowsing"][0] = (bool)properties["EnableDirBrowsing"];
203 newDE.Properties["AccessSSL"][0] = (bool)properties["AccessSSL"];
204 newDE.Properties["AccessScript"][0] = (bool)properties["AccessScript"];
205 newDE.Properties["DefaultDoc"][0] = properties["DefaultDoc"].ToString();
206 newDE.Properties["Path"][0] = properties["Path"].ToString();
207 newDE.Properties["AppIsolated"][0] = (int)properties["AppIsolated"];
208 newDE.Properties["AppFriendlyName"][0] = properties["AppFriendlyName"].ToString();
209 newDE.Properties["AccessFlags"][0] = (int)properties["AccessFlags"];
210 newDE.Properties["FrontPageWeb"][0] = (int)properties["FrontPageWeb"];
211 //newDE.Properties["DontLog"][0] = (bool)properties["DontLog"];
212 //newDE.Properties["AppRoot"][0] = properties["AppRoot"].ToString();
213 }
214
215 public static bool GetVirtualDir(string webSite, string dirName)
216 {
217 bool result = false;
218 using (DirectoryEntry de = GetWebSiteInfo(webSite))
219 {
220
221 if (de != null)
222 {
223 foreach (DirectoryEntry subVD in de.Children)
224 {
225 if (subVD.SchemaClassName == "IIsWebVirtualDir" && subVD.Name == dirName)
226 {
227 result = true;
228 break;
229 }
230 }
231 }
232 }
233 return result;
234 }
235
236 private static void GetWebSiteInfo(ref Hashtable webServer)
237 {
238 DirectoryEntries des = iisDE.Children;
239 foreach (DirectoryEntry subDE in des)
240 {
241 if (subDE.SchemaClassName == "IIsWebServer")
242 {
243 webServer.Add(subDE.Properties["ServerComment"].Value.ToString(), subDE.Name);
244 }
245 }
246 des = null;
247 }
248
249 private static DirectoryEntry GetWebSiteInfo(string website)
250 {
251 DirectoryEntry result = null;
252 DirectoryEntries des = iisDE.Children;
253 foreach (DirectoryEntry subDE in des)
254 {
255 if (subDE.SchemaClassName == "IIsWebServer" && subDE.Properties["ServerComment"].Value.ToString() == website)
256 {
257 result = subDE.Children.Find("Root", "IIsWebVirtualDir");
258 break;
259 }
260 }
261 des = null;
262 return result;
263 }
264
265 private static int GetWebSiteInfo(int port)
266 {
267 int result = 1, i = 1;
268 DirectoryEntries des = iisDE.Children;
269 foreach (DirectoryEntry subDE in des)
270 {
271 if (subDE.SchemaClassName == "IIsWebServer")
272 {
273 if ((i = Convert.ToInt32(subDE.Name)) >= result)
274 {
275 result = i + 1;
276 }
277 if (subDE.Properties["ServerBindings"][0].ToString() == ":" + port.ToString() + ":")
278 {
279 throw new Exception(" The port is already used");
280 }
281 }
282 }
283 des = null;
284 return result;
285 }
286 }
287
288 public enum WebServerTypes
289 {
290 Unknown,
291 IIS5,
292 IIS6,
293 IIS7
294 }
295 }  
  
  C#对IIS进行管理,事例代码:

View Code

1 if (!IISHelper.IsIISSetup)
2 {
3 //MessageBox.Show("请先安装IIS服务,再进行此操作");
4 return;
5 }
6
7 #region SclService
8
9 string serpath = System.Environment.CurrentDirectory + "\\SCLService";
10 if (System.IO.Directory.Exists(serpath))
11 {
12 string Name = "SclService";
13 string website = "默认网站";
14 System.Data.PropertyCollection properties = IISHelper.GetDefaultVirtualDirSetting(serpath, Name);
15
16 if (IISHelper.GetVirtualDir(website, Name))
17 {
18 //DialogResult dr = MessageBox.Show("WEB数据服务器 虚拟目录已经存在,是否删除重新创建?", "信息提示", MessageBoxButtons.YesNo);
19 //if (dr == DialogResult.Yes)
20 //{
21 IISHelper.DeleteVirtualDir(website, Name);
22 IISHelper.CreateNewVirtualDir(website, Name, properties);
23 // }
24 }
25 else
26 {
27 IISHelper.CreateNewVirtualDir(website, Name, properties);
28 }
29 }
30 System.IO.DirectoryRights.AddDirectoryRights(serpath, "ASPNET", "FullControl");
31 System.IO.DirectoryRights.AddDirectoryRights(serpath, "Everyone", "FullControl");
32 System.IO.DirectoryRights.AddDirectoryRights(serpath, "Users", "FullControl");
33 #endregion
34
35 #region SCLWeb
36 string webpath = System.Environment.CurrentDirectory + "\\SCLWeb";
37 if (System.IO.Directory.Exists(webpath))
38 {
39 string Name = "SclWeb";
40 string website = "默认网站";
41
42 System.Data.PropertyCollection properties = IISHelper.GetDefaultVirtualDirSetting(webpath, Name);
43
44 if (IISHelper.GetVirtualDir(website, Name))
45 {
46 //DialogResult dr = MessageBox.Show("WEB数据发布 虚拟目录已经存在,是否删除重新创建?", "信息提示", MessageBoxButtons.YesNo);
47 //if (dr == DialogResult.Yes)
48 //{
49 IISHelper.DeleteVirtualDir(website, Name);
50 IISHelper.CreateNewVirtualDir(website, Name, properties);
51 //}
52 }
53 else
54 {
55 IISHelper.CreateNewVirtualDir(website, Name, properties);
56 }
57 }  
  官方下载
  本地下载
  NET破解专区

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-99314-1-1.html 上篇帖子: IIS 不能启动, the process cannot access the file because is being...(转) 下篇帖子: IIS 错误代码大汇总
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表