首页 > 编程 > C# > 正文

c#操作iis根目录的方法

2019-10-29 21:42:23
字体:
来源:转载
供稿:网友

这篇文章主要介绍了c#操作iis根目录的方法,涉及C#针对IIS下目录的相关操作技巧,需要的朋友可以参考下

本文实例讲述了c#操作iis根目录的方法。分享给大家供大家参考。具体实现方法如下:

 

 
  1. using System;  
  2. using System.DirectoryServices;  
  3. using System.Collections;  
  4. namespace IISManagement 
  5. {  
  6. /// <summary>  
  7. /// IISManager 的摘要说明。  
  8. /// </summary>  
  9. public class IISManager  
  10. {  
  11. //定义需要使用的  
  12. private string _server,_website;  
  13. private VirtualDirectories _virdirs;  
  14. protected System.DirectoryServices.DirectoryEntry rootfolder;  
  15. private bool _batchflag;  
  16. public IISManager()  
  17. {  
  18. //默认情况下使用localhost,即访问本地机  
  19. _server = "localhost";  
  20. _website = "1";  
  21. _batchflag = false;  
  22. }  
  23. public IISManager(string strServer)  
  24. {  
  25. _server = strServer;  
  26. _website = "1";  
  27. _batchflag = false;  
  28. }  
  29. /// <summary>  
  30. /// 定义公共属性  
  31. /// </summary>  
  32. //Server属性定义访问机器的名字,可以是IP与计算名  
  33. public string Server  
  34. {  
  35. getreturn _server;}  
  36. set{ _server = value;}  
  37. }  
  38. //WebSite属性定义,为一数字,为方便,使用string  
  39. //一般来说第一台主机为1,第二台主机为2,依次类推  
  40. public string WebSite  
  41. {  
  42. getreturn _website; }  
  43. set{ _website = value; }  
  44. }  
  45. //虚拟目录的名字  
  46. public VirtualDirectories VirDirs  
  47. {  
  48. getreturn _virdirs; }  
  49. set{ _virdirs = value;}  
  50. }  
  51. ///<summary>  
  52. ///定义公共方法  
  53. ///</summary>  
  54. //连接服务器  
  55. public void Connect()  
  56. {  
  57. ConnectToServer();  
  58. }  
  59. //为方便重载 
  60. public void Connect(string strServer)  
  61. {  
  62. _server = strServer;  
  63. ConnectToServer();  
  64. }  
  65. //为方便重载  
  66. public void Connect(string strServer,string strWebSite)  
  67. {  
  68. _server = strServer;  
  69. _website = strWebSite;  
  70. ConnectToServer();  
  71. }  
  72. //判断是否存这个虚拟目录  
  73. public bool Exists(string strVirdir)  
  74. {  
  75. return _virdirs.Contains(strVirdir);  
  76. }  
  77. //添加一个虚拟目录  
  78. public void Create(VirtualDirectory newdir)  
  79. {  
  80. string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + 
  81. newdir.Name;  
  82. if(!_virdirs.Contains(newdir.Name) || _batchflag )  
  83. {  
  84. try 
  85. {  
  86. //加入到ROOT的Children集合中去  
  87. DirectoryEntry newVirDir = 
  88. rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");  
  89. newVirDir.Invoke("AppCreate",true);  
  90. newVirDir.CommitChanges();  
  91. rootfolder.CommitChanges();  
  92. //然后更新数据  
  93. UpdateDirInfo(newVirDir,newdir);  
  94. }  
  95. catch(Exception ee)  
  96. {  
  97. throw new Exception(ee.ToString());  
  98. }  
  99. }  
  100. else 
  101. {  
  102. throw new Exception("This virtual directory is already exist."); 
  103.  
  104. }  
  105. }  
  106. //得到一个虚拟目录  
  107. public VirtualDirectory GetVirDir(string strVirdir)  
  108. {  
  109. VirtualDirectory tmp = null;  
  110. if(_virdirs.Contains(strVirdir))  
  111. {  
  112. tmp = _virdirs.Find(strVirdir);  
  113. ((VirtualDirectory)_virdirs[strVirdir]).flag = 2;  
  114. }  
  115. else 
  116. {  
  117. throw new Exception("This virtual directory is not exists");  
  118. }  
  119. return tmp;  
  120. }  
  121. //更新一个虚拟目录  
  122. public void Update(VirtualDirectory dir)  
  123. {  
  124. //判断需要更改的虚拟目录是否存在  
  125. if(_virdirs.Contains(dir.Name))  
  126. {  
  127. DirectoryEntry ode = 
  128. rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");  
  129. UpdateDirInfo(ode,dir);  
  130. }  
  131. else 
  132. {  
  133. throw new Exception("This virtual directory is not exists.");  
  134. }  
  135. }  
  136. //删除一个虚拟目录  
  137. public void Delete(string strVirdir)  
  138. {  
  139. if(_virdirs.Contains(strVirdir))  
  140. {  
  141. object[] paras = new object[2];  
  142. paras[0] = "IIsWebVirtualDir"//表示操作的是虚拟目录  
  143. paras[1] = strVirdir;  
  144. rootfolder.Invoke("Delete",paras);  
  145. rootfolder.CommitChanges();  
  146. }  
  147. else 
  148. {  
  149. throw new Exception("Can''t delete " + strVirdir + ",because it 
  150. isn''t exists.");  
  151. }  
  152. }  
  153. //批量更新  
  154. public void UpdateBatch()  
  155. {  
  156. BatchUpdate(_virdirs);  
  157. }  
  158. //重载一个:-)  
  159. public void UpdateBatch(VirtualDirectories vds)  
  160. {  
  161. BatchUpdate(vds);  
  162. }  
  163. ///<summary>  
  164. ///私有方法  
  165. ///</summary>  
  166. //连接服务器  
  167. private void ConnectToServer()  
  168. {  
  169. string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";  
  170. try 
  171. this.rootfolder = new DirectoryEntry(strPath); 
  172. _virdirs = GetVirDirs(this.rootfolder.Children);  
  173. }  
  174. catch(Exception e)  
  175. {  
  176. throw new Exception("Can''t connect to the server ["+ _server 
  177. +"] ...",e);  
  178. }  
  179. }  
  180. //执行批量更新  
  181. private void BatchUpdate(VirtualDirectories vds)  
  182. {  
  183. _batchflag = true;  
  184. foreach(object item in vds.Values) 
  185. {  
  186. VirtualDirectory vd = (VirtualDirectory)item;  
  187. switch(vd.flag)  
  188. {  
  189. case 0:  
  190. break;  
  191. case 1:  
  192. Create(vd);  
  193. break;  
  194. case 2:  
  195. Update(vd);  
  196. break;  
  197. }  
  198. }  
  199. _batchflag = false;  
  200. }  
  201. //更新东东  
  202. private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)  
  203. {  
  204. de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;  
  205. de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;  
  206. de.Properties["AccessRead"][0] = vd.AccessRead;  
  207. de.Properties["AccessExecute"][0] = vd.AccessExecute;  
  208. de.Properties["AccessWrite"][0] = vd.AccessWrite;  
  209. de.Properties["AuthBasic"][0] = vd.AuthBasic;  
  210. de.Properties["AuthNTLM"][0] = vd.AuthNTLM;  
  211. de.Properties["ContentIndexed"][0] = vd.ContentIndexed;  
  212. de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;  
  213. de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;  
  214. de.Properties["AccessSSL"][0] = vd.AccessSSL;  
  215. de.Properties["AccessScript"][0] = vd.AccessScript;  
  216. de.Properties["DefaultDoc"][0] = vd.DefaultDoc;  
  217. de.Properties["Path"][0] = vd.Path;  
  218. de.CommitChanges();  
  219. }  
  220. //获取虚拟目录集合  
  221. private VirtualDirectories GetVirDirs(DirectoryEntries des)  
  222. {  
  223. VirtualDirectories tmpdirs = new VirtualDirectories();  
  224. foreach(DirectoryEntry de in des)  
  225. {  
  226. if(de.SchemaClassName == "IIsWebVirtualDir")  
  227. {  
  228. VirtualDirectory vd = new VirtualDirectory();  
  229. vd.Name = de.Name;  
  230. vd.AccessRead = (bool)de.Properties["AccessRead"][0];  
  231. vd.AccessExecute = 
  232. (bool)de.Properties["AccessExecute"][0];  
  233. vd.AccessWrite = (bool)de.Properties["AccessWrite"][0]; 
  234. vd.AnonymousUserName = 
  235. (string)de.Properties["AnonymousUserName"][0];  
  236. vd.AnonymousUserPass = 
  237. (string)de.Properties["AnonymousUserName"][0];  
  238. vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];  
  239. vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];  
  240. vd.ContentIndexed = 
  241. (bool)de.Properties["ContentIndexed"][0]; 
  242. vd.EnableDefaultDoc = 
  243. (bool)de.Properties["EnableDefaultDoc"][0];  
  244. vd.EnableDirBrowsing = 
  245. (bool)de.Properties["EnableDirBrowsing"][0];  
  246. vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];  
  247. vd.AccessScript = 
  248. (bool)de.Properties["AccessScript"][0];  
  249. vd.Path = (string)de.Properties["Path"][0];  
  250. vd.flag = 0; 
  251. vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0]; 
  252. tmpdirs.Add(vd.Name,vd); 
  253. }  
  254. return tmpdirs;  
  255. }  
  256. }  
  257. <summary>  
  258. /// VirtualDirectory类  
  259. /// </summary>  
  260. public class VirtualDirectory  
  261. {  
  262. private bool 
  263. _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;  
  264. private string _ausername,_auserpass,_name,_path;  
  265. private int _flag;  
  266. private string _defaultdoc;  
  267. /// <summary>  
  268. /// 构造函数  
  269. /// </summary>  
  270. public VirtualDirectory()  
  271. {  
  272. SetValue();  
  273. }  
  274. public VirtualDirectory(string strVirDirName)  
  275. {  
  276. _name = strVirDirName;  
  277. SetValue();  
  278. }  
  279. private void SetValue()  
  280. {  
  281. _read = true;_execute = false;_script = false;_ssl= 
  282. false;_write=false;_authbasic=false;_authntlm=false;  
  283. _indexed = false;_endirbrow=false;_endefaultdoc = false;  
  284. _flag = 1;  
  285. _defaultdoc = "default.htm,default.aspx,default.asp,index.htm";  
  286. _path = "C://";  
  287. _ausername = "";_auserpass ="";_name="";  
  288. }  
  289. ///<summary>  
  290. ///定义属性,IISVirtualDir太多属性了  
  291. ///我只搞了比较重要的一些,其它的大伙需要的自个加吧。  
  292. ///</summary>  
  293. public int flag  
  294. {  
  295. getreturn _flag;}  
  296. set{ _flag = value;}  
  297. }  
  298. public bool AccessRead  
  299. {  
  300. getreturn _read;}  
  301. set{ _read = value;}  
  302. }  
  303. public bool AccessWrite  
  304. {  
  305. getreturn _write;}  
  306. set{ _write = value;}  
  307. }  
  308. public bool AccessExecute  
  309. {  
  310. getreturn _execute;}  
  311. set{ _execute = value;}  
  312. public bool AccessSSL  
  313. {  
  314. getreturn _ssl;}  
  315. set{ _ssl = value;}  
  316. }  
  317. public bool AccessScript  
  318. {  
  319. getreturn _script;}  
  320. set{ _script = value;}  
  321. }  
  322. public bool AuthBasic  
  323. {  
  324. getreturn _authbasic;}  
  325. set{ _authbasic = value;}  
  326. }  
  327. public bool AuthNTLM  
  328. {  
  329. getreturn _authntlm;}  
  330. set{ _authntlm = value;}  
  331. public bool ContentIndexed  
  332. {  
  333. getreturn _indexed;}  
  334. set{ _indexed = value;}  
  335. }  
  336. public bool EnableDirBrowsing  
  337. {  
  338. getreturn _endirbrow;}  
  339. set{ _endirbrow = value;}  
  340. }  
  341. public bool EnableDefaultDoc  
  342. {  
  343. getreturn _endefaultdoc;}  
  344. set{ _endefaultdoc = value;}  
  345. }  
  346. public string Name  
  347. {  
  348. getreturn _name;}  
  349. set{ _name = value;}  
  350. }  
  351. public string Path  
  352. {  
  353. getreturn _path;}  
  354. set{ _path = value;}  
  355. }  
  356. public string DefaultDoc  
  357. {  
  358. getreturn _defaultdoc;}  
  359. set{ _defaultdoc = value;}  
  360. }  
  361. public string AnonymousUserName  
  362. {  
  363. getreturn _ausername;}  
  364. set{ _ausername = value;}  
  365. }  
  366. public string AnonymousUserPass  
  367. {  
  368. getreturn _auserpass;}  
  369. set{ _auserpass = value;}  
  370. }  
  371. /// <summary>  
  372. /// 集合VirtualDirectories  
  373. /// </summary>  
  374. public class VirtualDirectories : System.Collections.Hashtable  
  375. {  
  376. public VirtualDirectories()  
  377. {  
  378. //添加新的方法  
  379. public VirtualDirectory Find(string strName)  
  380. {  
  381. return (VirtualDirectory)this[strName];  
  382. }  
  383. }  

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表