usingSystem; usingSystem.Collections; usingSystem.DirectoryServices; usingSystem.Text.RegularExpressions; namespacenabooColl.Web ...{ /**////<summary> ///IIS管理类,可以实现创建站点、虚拟目录,删除虚拟目录等 ///</summary> publicclassIISManager ...{ privatestring_server,_website,_AnonymousUserPass,_AnonymousUserName; protectedDirectoryEntryrootfolder; privatestring_serverip,_domain,_webSiteName,_port,_path; #region构造函数 /**////<summary> ///构造函数 ///</summary> publicIISManager() ...{ //默认情况下使用localhost,即访问本地机 _server="localhost"; _website="1"; } /**////<summary> ///构造函数 ///</summary> ///<paramname="strServer">服务器</param> publicIISManager(stringstrServer) ...{ _server=strServer; _website="1"; } /**////<summary> ///构造函数 ///</summary> ///<paramname="strServer">服务器</param> ///<paramname="website">站点,每一个站点为1,第二个站点为2,依此类推</param> publicIISManager(stringstrServer,intwebsite) ...{ _server=strServer; _website=website.ToString(); } #endregion #region定义公共属性 #region新建一个网站必须设置的五个参数 /**////<summary> ///用于网站标题,描述 ///</summary> publicstringWebSiteName ...{ get...{return_webSiteName;} set...{_webSiteName=value;} } /**////<summary> ///新建立网站的端口,一般设置为80 ///</summary> publicstringPort ...{ get...{return_port;} set...{_port=value;} } /**////<summary> ///新建立网站的物理路径 ///</summary> publicstringPath ...{ get...{return_path;} set...{_path=value;} } /**////<summary> ///服务器的IP地址 ///</summary> publicstringServerIP ...{ get...{return_serverip;} set...{_serverip=value;} } /**////<summary> ///网站访问的域名 ///</summary> publicstringDoMain ...{ get...{return_domain;} set...{_domain=value;} } #endregion /**////<summary> ///匿名访问用户 ///</summary> publicstringAnonymousUserName ...{ get...{return_AnonymousUserName;} set...{_AnonymousUserName=value;} } /**////<summary> ///匿名访问用户密码 ///</summary> publicstringAnonymousUserPass ...{ get...{return_AnonymousUserPass;} set...{_AnonymousUserPass=value;} } /**////<summary> ///服务器,可以是IP或计算名 ///</summary> publicstringServer ...{ get...{return_server;} set...{_server=value;} } /**////<summary> ///站点,一般来说第一台主机为1,第二台主机为2,依次类推 ///</summary> publicintWebSite ...{ get...{returnConvert.ToInt32(_website);} set...{_website=Convert.ToString(value);} } #endregion /**////<summary> ///连接服务器 ///</summary> publicvoidConnect() ...{ ConnectToServer(); } /**////<summary> ///连接服务器 ///</summary> ///<paramname="strServer">服务器名称</param> publicvoidConnect(stringstrServer) ...{ _server=strServer; ConnectToServer(); } /**////<summary> ///连接服务器 ///</summary> ///<paramname="strServer">服务器名称</param> ///<paramname="strWebSite">站点,一般来说第一台主机为1,第二台主机为2,依次类推</param> publicvoidConnect(stringstrServer,stringstrWebSite) ...{ _server=strServer; _website=strWebSite; ConnectToServer(); } #region获取新网站id的方法 /**////<summary> ///获取网站系统里面可以使用的最小的ID。 ///这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。 ///这里面的算法经过了测试是没有问题的。 ///</summary> ///<returns>最小的id</returns> publicstringGetNewWebSiteID() ...{ ArrayListlist=newArrayList(); stringtmpStr; stringentPath=String.Format("IIS://{0}/w3svc",this._server); DirectoryEntryent=newDirectoryEntry(entPath); foreach(DirectoryEntrychildinent.Children) ...{ if(child.SchemaClassName=="IIsWebServer") ...{ tmpStr=child.Name.ToString(); list.Add(Convert.ToInt32(tmpStr)); } } list.Sort(); inti=1; foreach(intjinlist) ...{ if(i==j) ...{ i++; } } returni.ToString(); } #endregion #region新建立一个IISWEB站点 /**////<summary> ///添加一个站点 ///</summary> publicstringCreateWebSite() ...{ intsiteID=int.Parse(GetNewWebSiteID()); try ...{ DirectoryEntryroot=newDirectoryEntry("IIS://"+this._server+"/W3SVC"); if(!EnsureNewSiteEnavaible(this._serverip+":"+this._port+":"+this._domain)) ...{ return"此用户名的网站已经存在!"; } else ...{ DirectoryEntrysite=(DirectoryEntry)root.Invoke("Create","IIsWebServer",siteID); site.Invoke("Put","ServerComment",this._webSiteName); site.Invoke("Put","KeyType","IIsWebServer"); site.Invoke("Put","ServerBindings",this._serverip+":"+this._port+":"+this._domain); site.Invoke("Put","ServerState",2); site.Invoke("Put","FrontPageWeb",1); site.Invoke("Put","DefaultDoc","index.aspx,index.html,index.html,default.aspx,default.htm,default.html"); site.Invoke("Put","ServerAutoStart",1); site.Invoke("Put","ServerSize",1); site.Invoke("SetInfo"); DirectoryEntrysiteVDir=site.Children.Add("Root","IISWebVirtualDir"); siteVDir.Properties["AppIsolated"][0]=2; siteVDir.Properties["Path"][0]=this._path; siteVDir.Properties["AccessFlags"][0]=513; siteVDir.Properties["FrontPageWeb"][0]=1; siteVDir.Properties["AppRoot"][0]="LM/W3SVC/"+siteID+"/Root"; siteVDir.Properties["AppFriendlyName"][0]="ROOT"; siteVDir.CommitChanges(); site.CommitChanges(); return"创建站点成功!"; } } catch(Exceptionex) ...{ returnex.Message; } } #endregion #region删除一个网站 /**////<summary> ///删除一个网站。根据网站名称删除。 ///</summary> ///<paramname="siteName">网站名称</param> publicvoidDeleteWebSiteByName(stringsiteName) ...{ stringsiteNum=GetWebSiteNum(siteName); stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",this._server,siteNum); DirectoryEntrysiteEntry=newDirectoryEntry(siteEntPath); stringrootPath=String.Format("IIS://{0}/w3svc",this._server); DirectoryEntryrootEntry=newDirectoryEntry(rootPath); rootEntry.Children.Remove(siteEntry); rootEntry.CommitChanges(); } #endregion #region获取一个网站编号的方法 /**////<summary> ///获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站编号 ///</summary> ///<paramname="siteName"></param> ///<returns>返回网站的编号</returns> publicstringGetWebSiteNum(stringsiteName) ...{ Regexregex=newRegex(siteName); stringtmpStr; stringentPath=String.Format("IIS://{0}/w3svc",this._server); DirectoryEntryent=newDirectoryEntry(entPath); foreach(DirectoryEntrychildinent.Children) ...{ if(child.SchemaClassName=="IIsWebServer") ...{ if(child.Properties["ServerBindings"].Value!=null) ...{ tmpStr=child.Properties["ServerBindings"].Value.ToString(); if(regex.Match(tmpStr).Success) ...{ returnchild.Name; } } if(child.Properties["ServerComment"].Value!=null) ...{ tmpStr=child.Properties["ServerComment"].Value.ToString(); if(regex.Match(tmpStr).Success) ...{ returnchild.Name; } } } } return"没有找到要删除的站点"; } #endregion #regionStart和Stop网站的方法 publicvoidStartWebSite(stringsiteName) ...{ stringsiteNum=GetWebSiteNum(siteName); stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",this._server,siteNum); DirectoryEntrysiteEntry=newDirectoryEntry(siteEntPath); siteEntry.Invoke("Start",newobject[]...{}); } publicvoidStopWebSite(stringsiteName) ...{ stringsiteNum=GetWebSiteNum(siteName); stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",this._server,siteNum); DirectoryEntrysiteEntry=newDirectoryEntry(siteEntPath); siteEntry.Invoke("Stop",newobject[]...{}); } #endregion #region确认网站是否相同 publicboolEnsureNewSiteEnavaible(stringbindStr) ...{ stringentPath=String.Format("IIS://{0}/w3svc",this._server); DirectoryEntryent=newDirectoryEntry(entPath); foreach(DirectoryEntrychildinent.Children) ...{ if(child.SchemaClassName=="IIsWebServer") ...{ if(child.Properties["ServerBindings"].Value!=null) ...{ if(child.Properties["ServerBindings"].Value.ToString()==bindStr) ...{ returnfalse; } } } } returntrue; } #endregion #region私有方法 /**////<summary> ///关闭当前对象 ///</summary> publicvoidClose() ...{ rootfolder.Dispose(); } /**////<summary> ///连接服务器 ///</summary> privatevoidConnectToServer() ...{ stringstrPath="IIS://"+_server+"/W3SVC/"+_website+"/ROOT"; try ...{ this.rootfolder=newDirectoryEntry(strPath); } catch(Exception) ...{ Response.Write("无法连接到服务器:"+_server); } } } #endregion } 记得引用System.DirectoryServices.dll 上面这个文件,放在类文件里去。。 下面讲的话,关于他的使用方法。 程序代码 这是新建站点 privatevoidcreatIisWebSite() ...{ IISManageriis=newIISManager(); iis.Connect(); iis.ServerIP="192.168.0.177"; iis.DoMain="demo.caspnet.com.cn"; iis.WebSiteName="demo.caspnet.com.cn"; iis.Port="80"; iis.Path=@"e:zhmingwebsite"; stringresult=iis.CreateWebSite(); Response.Write(result); iis.Close(); } 程序代码 删除站点,站点名称可以通过textbox输入 stringsitename=this.TextBox1.Text; IISManageriis=newIISManager(); iis.Connect(); iis.DeleteWebSiteByName(sitename); iis.Close(); 程序代码 启动站点,站点名称可以通过textbox输入 stringsitename=this.TextBox1.Text; IISManageriis=newIISManager(); iis.Connect(); iis.StartWebSite(sitename); iis.Close(); 程序代码 停止站点,站点名称可以通过textbox输入 stringsitename=this.TextBox1.Text; IISManageriis=newIISManager(); iis.Connect(); iis.StopWebSite(sitename); iis.Close(); 最后一步 在web.config里输入,确保你有足够的权限去操作IIS站点。 程序代码 <identityimpersonate="true"userName="window系统管理用户"password="管理密码"/>