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#程序设计有所帮助。