C#操作IIS方法集合
C#操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000)----见https://www.nhooo.com/article/72881.htm
usingSystem; usingSystem.Collections; usingSystem.Collections.Generic; usingSystem.DirectoryServices; usingSystem.Linq; usingSystem.Net; usingSystem.Text; usingSystem.Threading.Tasks; namespaceIISControlHelper { ///<summary> ///IIS操作方法集合 ///https://www.nhooo.com/article/72881.htm错误 ///</summary> publicclassIISWorker { privatestaticstringHostName="localhost"; ///<summary> ///获取本地IIS版本 ///</summary> ///<returns></returns> publicstaticstringGetIIsVersion() { try { DirectoryEntryentry=newDirectoryEntry("IIS://"+HostName+"/W3SVC/INFO"); stringversion=entry.Properties["MajorIISVersionNumber"].Value.ToString(); returnversion; } catch(Exceptionse) { //说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常证明版本为5.0 returnstring.Empty; } } ///<summary> ///创建虚拟目录网站 ///</summary> ///<paramname="webSiteName">网站名称</param> ///<paramname="physicalPath">物理路径</param> ///<paramname="domainPort">站点+端口,如192.168.1.23:90</param> ///<paramname="isCreateAppPool">是否创建新的应用程序池</param> ///<returns></returns> publicstaticintCreateWebSite(stringwebSiteName,stringphysicalPath,stringdomainPort,boolisCreateAppPool) { DirectoryEntryroot=newDirectoryEntry("IIS://"+HostName+"/W3SVC"); //为新WEB站点查找一个未使用的ID intsiteID=1; foreach(DirectoryEntryeinroot.Children) { if(e.SchemaClassName=="IIsWebServer") { intID=Convert.ToInt32(e.Name); if(ID>=siteID){siteID=ID+1;} } } //创建WEB站点 DirectoryEntrysite=(DirectoryEntry)root.Invoke("Create","IIsWebServer",siteID); site.Invoke("Put","ServerComment",webSiteName); site.Invoke("Put","KeyType","IIsWebServer"); site.Invoke("Put","ServerBindings",domainPort+":"); site.Invoke("Put","ServerState",2); site.Invoke("Put","FrontPageWeb",1); site.Invoke("Put","DefaultDoc","Default.html"); //site.Invoke("Put","SecureBindings",":443:"); 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]=physicalPath; siteVDir.Properties["AccessFlags"][0]=513; siteVDir.Properties["FrontPageWeb"][0]=1; siteVDir.Properties["AppRoot"][0]="LM/W3SVC/"+siteID+"/Root"; siteVDir.Properties["AppFriendlyName"][0]="Root"; if(isCreateAppPool) { DirectoryEntryapppools=newDirectoryEntry("IIS://"+HostName+"/W3SVC/AppPools"); DirectoryEntrynewpool=apppools.Children.Add(webSiteName,"IIsApplicationPool"); newpool.Properties["AppPoolIdentityType"][0]="4";//4 newpool.Properties["ManagedPipelineMode"][0]="0";//0:集成模式1:经典模式 newpool.CommitChanges(); siteVDir.Properties["AppPoolId"][0]=webSiteName; } siteVDir.CommitChanges(); site.CommitChanges(); returnsiteID; } ///<summary> ///得到网站的物理路径 ///</summary> ///<paramname="rootEntry">网站节点</param> ///<returns></returns> publicstaticstringGetWebsitePhysicalPath(DirectoryEntryrootEntry) { stringphysicalPath=""; foreach(DirectoryEntrychildEntryinrootEntry.Children) { if((childEntry.SchemaClassName=="IIsWebVirtualDir")&&(childEntry.Name.ToLower()=="root")) { if(childEntry.Properties["Path"].Value!=null) { physicalPath=childEntry.Properties["Path"].Value.ToString(); } else { physicalPath=""; } } } returnphysicalPath; } ///<summary> ///获取站点名 ///</summary> publicstaticList<IISInfo>GetServerBindings() { List<IISInfo>iisList=newList<IISInfo>(); stringentPath=String.Format("IIS://{0}/w3svc",HostName); DirectoryEntryent=newDirectoryEntry(entPath); foreach(DirectoryEntrychildinent.Children) { if(child.SchemaClassName.Equals("IIsWebServer",StringComparison.OrdinalIgnoreCase)) { if(child.Properties["ServerBindings"].Value!=null) { objectobjectArr=child.Properties["ServerBindings"].Value; stringserverBindingStr=string.Empty; if(IsArray(objectArr))//如果有多个绑定站点时 { object[]objectToArr=(object[])objectArr; serverBindingStr=objectToArr[0].ToString(); } else//只有一个绑定站点 { serverBindingStr=child.Properties["ServerBindings"].Value.ToString(); } IISInfoiisInfo=newIISInfo(); iisInfo.DomainPort=serverBindingStr; iisInfo.AppPool=child.Properties["AppPoolId"].Value.ToString();//应用程序池 iisList.Add(iisInfo); } } } returniisList; } publicstaticboolCreateAppPool(stringappPoolName,stringUsername,stringPassword) { boolissucess=false; try { //创建一个新程序池 DirectoryEntrynewpool; DirectoryEntryapppools=newDirectoryEntry("IIS://"+HostName+"/W3SVC/AppPools"); newpool=apppools.Children.Add(appPoolName,"IIsApplicationPool"); //设置属性访问用户名和密码一般采取默认方式 newpool.Properties["WAMUserName"][0]=Username; newpool.Properties["WAMUserPass"][0]=Password; newpool.Properties["AppPoolIdentityType"][0]="3"; newpool.CommitChanges(); issucess=true; returnissucess; } catch//(Exceptionex) { returnfalse; } } ///<summary> ///建立程序池后关联相应应用程序及虚拟目录 ///</summary> publicstaticvoidSetAppToPool(stringappname,stringpoolName) { //获取目录 DirectoryEntrygetdir=newDirectoryEntry("IIS://localhost/W3SVC"); foreach(DirectoryEntrygetentityingetdir.Children) { if(getentity.SchemaClassName.Equals("IIsWebServer")) { //设置应用程序程序池先获得应用程序在设定应用程序程序池 //第一次测试根目录 foreach(DirectoryEntrygetchildingetentity.Children) { if(getchild.SchemaClassName.Equals("IIsWebVirtualDir")) { //找到指定的虚拟目录. foreach(DirectoryEntrygetsiteingetchild.Children) { if(getsite.Name.Equals(appname)) { //【测试成功通过】 getsite.Properties["AppPoolId"].Value=poolName; getsite.CommitChanges(); } } } } } } } ///<summary> ///判断object对象是否为数组 ///</summary> publicstaticboolIsArray(objecto) { returnoisArray; } } }
希望本文所述对大家的C#程序设计有所帮助。