C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000) ----见http://www.phpstudy.net/article/72881.htm
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 操作方法集合
/// http://www.phpstudy.net/article/72881.htm 错误
/// </summary>
public class IISWorker
{
private static string HostName = \"localhost\";
/// <summary>
/// 获取本地IIS版本
/// </summary>
/// <returns></returns>
public static string 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
return string.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>
public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool)
{
DirectoryEntry root = new DirectoryEntry(\"IIS://\" + HostName + \"/W3SVC\");
// 为新WEB站点查找一个未使用的ID
int siteID = 1;
foreach (DirectoryEntry e in 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>
public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)
{
string physicalPath = \"\";
foreach (DirectoryEntry childEntry in 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>
public static List<IISInfo> GetServerBindings()
{
List<IISInfo> iisList = new List<IISInfo>();
string entPath = String.Format(\"IIS://{0}/w3svc\", HostName);
DirectoryEntry ent = new DirectoryEntry(entPath);
foreach (DirectoryEntry child in 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;
}
public static bool 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)
{
return false;
}
}
/// <summary>
/// 建立程序池后关联相应应用程序及虚拟目录
/// </summary>
public static void SetAppToPool(string appname,string poolName)
{
//获取目录
DirectoryEntry getdir = new DirectoryEntry(\"IIS://localhost/W3SVC\");
foreach (DirectoryEntry getentity in getdir.Children)
{
if (getentity.SchemaClassName.Equals(\"IIsWebServer\"))
{
//设置应用程序程序池 先获得应用程序 在设定应用程序程序池
//第一次测试根目录
foreach (DirectoryEntry getchild in getentity.Children)
{
if (getchild.SchemaClassName.Equals(\"IIsWebVirtualDir\"))
{
//找到指定的虚拟目录.
foreach (DirectoryEntry getsite in getchild.Children)
{
if (getsite.Name.Equals(appname))
{
//【测试成功通过】
getsite.Properties[\"AppPoolId\"].Value = poolName;
getsite.CommitChanges();
}
}
}
}
}
}
}
/// <summary>
/// 判断object对象是否为数组
/// </summary>
public static bool IsArray(object o)
{
return o is Array;
}
}
}
希望本文所述对大家的C#程序设计有所帮助。
本文地址:https://www.stayed.cn/item/24925
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我