如果在win8,win7情況下報錯:未知錯誤(0x80005000)
見http://blog.csdn.net/ts1030746080/article/details/8741399
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://blog.csdn.net/ts1030746080/article/details/8741399 錯誤
/// </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;
}
}
}
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://blog.csdn.net/ts1030746080/article/details/8741399 錯誤
/// </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;
}
}
}
如果我的文章對你有幫助,就點一下推薦吧.(*^__^*)
