C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000)using System;
using System.Collections;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace IISControlHelper
{
/// <summary>
///IIS 操作方法集合
/// </summary> publicclass IISWorker
{
privatestaticstring HostName =” localhost ”;
/// <summary>
///获取本地IIS版本
/// </summary>
/// <returns></returns> publicstaticstring GetIIsVersion()
{
try
{
DirectoryEntry entry =new DirectoryEntry( ” IIS:// ” + HostName +” /W3SVC/INFO ”);
string version = entry.Properties[ ” MajorIISVersionNumber ”].Value.ToString();
return version;
}
catch (Exception se)
{
// 说明一点:IIS5.0中没有(int)entry.Properties[“MajorIISVersionNumber”].Value;属性,将抛出异常 证明版本为 5.0 returnstring.Empty;
}
}
/// <summary>
///创建虚拟目录网站
/// </summary>
/// <param name=”webSiteName”> 网站名称 </param>
/// <param name=”physicalPath”> 物理路径 </param>
/// <param name=”domainPort”> 站点+端口,如192.168.1.23:90 </param>
/// <param name=”isCreateAppPool”> 是否创建新的应用程序池 </param>
/// <returns></returns> publicstaticint CreateWebSite( string webSiteName,string physicalPath,string domainPort, bool isCreateAppPool)
{
DirectoryEntry root =new DirectoryEntry( ” IIS:// ” + HostName +” /W3SVC ”);
//为新WEB站点查找一个未使用的ID int siteID =1;
foreach (DirectoryEntry ein root.Children)
{
if (e.SchemaClassName ==” IIsWebServer ”)
{
int ID = Convert.ToInt32(e.Name);
if (ID >= siteID) { siteID = ID +1; }
}
}
//创建WEB站点 DirectoryEntry site = (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 ”);
//创建应用程序虚拟目录
DirectoryEntry siteVDir = 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)
{
DirectoryEntry apppools =new DirectoryEntry( ” IIS:// ” + HostName +” /W3SVC/AppPools ”);
DirectoryEntry newpool = 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();
return siteID;
}
/// <summary>
///得到网站的物理路径
/// </summary>
/// <param name=”rootEntry”> 网站节点 </param>
/// <returns></returns> publicstaticstring GetWebsitePhysicalPath(DirectoryEntry rootEntry)
{
string physicalPath =“”;
foreach (DirectoryEntry childEntryin rootEntry.Children)
{
if ((childEntry.SchemaClassName ==” IIsWebVirtualDir ”) && (childEntry.Name.ToLower() ==” root ”))
{
if (childEntry.Properties[ ” Path ”].Value !=null)
{
physicalPath = childEntry.Properties[ ” Path ”].Value.ToString();
}
else
{
physicalPath =“”;
}
}
}
return physicalPath;
}
/// <summary>
///获取站点名
/// </summary> publicstatic List<IISInfo> GetServerBindings()
{
List<IISInfo> iisList =new List<IISInfo>();
string entPath = String.Format( ” IIS://{0}/w3svc ”, HostName);
DirectoryEntry ent =new DirectoryEntry(entPath);
foreach (DirectoryEntry childin ent.Children)
{
if (child.SchemaClassName.Equals( ” IIsWebServer ”, StringComparison.OrdinalIgnoreCase))
{
if (child.Properties[ ” ServerBindings ”].Value !=null)
{
object objectArr = child.Properties[ ” ServerBindings ”].Value;
string serverBindingStr =string.Empty;
if (IsArray(objectArr)) // 如果有多个绑定站点时 {
object[] objectToArr = ( object[])objectArr;
serverBindingStr = objectToArr[ 0].ToString();
}
else // 只有一个绑定站点 {
serverBindingStr = child.Properties[ ” ServerBindings ”].Value.ToString();
}
IISInfo iisInfo =new IISInfo();
iisInfo.DomainPort = serverBindingStr;
iisInfo.AppPool = child.Properties[ ” AppPoolId ”].Value.ToString(); // 应用程序池 iisList.Add(iisInfo);
}
}
}
return iisList;
}
publicstaticbool CreateAppPool( string appPoolName,string Username,string Password)
{
bool issucess =false;
try
{
// 创建一个新程序池 DirectoryEntry newpool;
DirectoryEntry apppools =new DirectoryEntry( ” 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;
return issucess;
}
catch//(Exception ex) {
returnfalse;
}
}
/// <summary>
///建立程序池后关联相应应用程序及虚拟目录
/// </summary> publicstaticvoid SetAppToPool( string appname, string poolName)
{
// 获取目录 DirectoryEntry getdir =new DirectoryEntry( ” IIS://localhost/W3SVC ”);
foreach (DirectoryEntry getentityin getdir.Children)
{
if (getentity.SchemaClassName.Equals( ” IIsWebServer ”))
{
// 设置应用程序程序池 先获得应用程序 在设定应用程序程序池
// 第一次测试根目录 foreach (DirectoryEntry getchildin getentity.Children)
{
if (getchild.SchemaClassName.Equals( ” IIsWebVirtualDir ”))
{
// 找到指定的虚拟目录. foreach (DirectoryEntry getsitein getchild.Children)
{
if (getsite.Name.Equals(appname))
{
// 【测试成功通过】 getsite.Properties[ ” AppPoolId ”].Value = poolName;
getsite.CommitChanges();
}
}
}
}
}
}
}
/// <summary>
///判断object对象是否为数组
/// </summary> publicstaticbool IsArray( object o)
{
return ois Array;
}
}
}
文档来源:51CTO技术博客https://blog.51cto.com/u_11739124/3118150
页:
[1]