http://topic.csdn.net/u/20090525/13/f1d14958-c2cc-4326-be1c-77112e1bb648.html
http://www.xue5.com/itedu/200802/104864_2.html
一下摘自:
http://groups-beta.google.com/group/microsoft.public.cn.dotnet.framework.aspnet/msg/bdd2c95baee7a637?hl=en&
你好
把我GOGLE找到的代碼給你,希望對你有幫助:
操作iis應用程序池
using System;
using System.DirectoryServices;
using System.Reflection;
namespace ADSI1
{
///
/// Small class containing methods to configure IIS.
///
class ConfigIIS
{
///
/// The main entry point for the application.
///
[STAThread]
//主程序入口,可以選擇用哪些,我爲了方便,全部功能都寫上去了。
static void Main(string[] args)
{
string AppPoolName = "MyAppPool";
string newvdir1 = "MyVDir";
DirectoryEntry newvdir = createVDir(newvdir1);
createAppPool(AppPoolName);
AssignAppPool(newvdir, AppPoolName);
ConfigAppPool("Stop",AppPoolName);
}
//創建虛擬目錄
static DirectoryEntry createVDir (string vdirname)
{
DirectoryEntry newvdir;
DirectoryEntry root=new
DirectoryEntry("IIS://localhost/W3SVC/1/Root");
newvdir=root.Children.Add(vdirname, "IIsWebVirtualDir");
newvdir.Properties["Path"][0]= "c://inetpub//wwwroot";
newvdir.Properties["AccessScript"][0] = true;
newvdir.CommitChanges();
return newvdir;
}
//創建新的應用程序池。
static void createAppPool(string AppPoolName)
{
DirectoryEntry newpool;
DirectoryEntry apppools=new
DirectoryEntry("IIS://localhost/W3SVC/AppPools");
newpool=apppools.Children.Add(AppPoolName, "IIsApplicationPool");
newpool.CommitChanges();
}
static void AssignAppPool(DirectoryEntry newvdir, string AppPoolName)
{
object[] param={0, AppPoolName, true};
newvdir.Invoke("Appcreate3", param);
}
//method是管理應用程序池的方法,有三種Start、Stop、Recycle,而
AppPoolName是應用程序池名稱
static void ConfigAppPool(string method,string AppPoolName)
{
DirectoryEntry appPool = new
DirectoryEntry("IIS://localhost/W3SVC/AppPools");
DirectoryEntry findPool =
appPool.Children.Find(AppPoolName,IIsApplicationPool");
findPool.Invoke(method,null);
appPool.CommitChanges();
appPool.Close();
}
//應用程序池的列表
static void AppPoolList()
{
DirectoryEntry appPool = new
DirectoryEntry("IIS://localhost/W3SVC/AppPools");
foreach(DirectoryEntry a in appPool.Children)
{
Console.WriteLine(a.Name);
}
}
private void VDirToAppPool()
{
DirectroryEntry VD = new
DirectoryEntry("IIS://localhost/W3SVC/1/ROOT/ccc");
Console.WriteLine(VD.Properties["AppPoolId"].Value.ToString());
}
}
iis6操作的例子
using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
namespace Wuhy.ToolBox
{
///
public class IISAdminLib
{
#region UserName,Password,HostName的定義
public static string HostName
{
get
{
return hostName;
}
set
{
hostName = value;
}
}
public static string UserName
{
get
{
return userName;
}
set
{
userName = value;
}
}
public static string Password
{
get
{
return password;
}
set
{
if(UserName.Length <= 1)
{
throw new ArgumentException("還沒有指定好用戶名。請先指定用戶名");
}
password = value;
}
public static void RemoteConfig(string hostName, string userName, string
password)
{
HostName = hostName;
UserName = userName;
Password = password;
private static string hostName = "localhost";
private static string userName;
private static string password;
#endregion
#region 根據路徑構造Entry的方法
///
/// 根據是否有用戶名來判斷是否是遠程服務器。
/// 然後再構造出不同的DirectoryEntry出來
///
/// DirectoryEntry的路徑
/// 返回的是DirectoryEntry實例
public static DirectoryEntry GetDirectoryEntry(string entPath)
{
DirectoryEntry ent;
if(UserName == null)
{
ent = new DirectoryEntry(entPath);
}
else
{
// ent = new DirectoryEntry(entPath, HostName+"//"+UserName, Password,
AuthenticationTypes.Secure);
ent = new DirectoryEntry(entPath, UserName, Password,
AuthenticationTypes.Secure);
}
return ent;
#endregion
#region 添加,刪除網站的方法
///
/// 創建一個新的網站。根據傳過來的信息進行配置
///
/// 存儲的是新網站的信息
public static void createNewWebSite(NewWebSiteInfo siteInfo)
{
if(! EnsureNewSiteEnavaible(siteInfo.BindString))
{
throw new DuplicatedWebSiteException("已經有了這樣的網站了。" +
Environment.NewLine + siteInfo.BindString);
}
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry rootEntry = GetDirectoryEntry(entPath);
string newSiteNum = GetNewWebSiteID();
DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum,
"IIsWebServer");
newSiteEntry.CommitChanges();
newSiteEntry.Properties["ServerBindings"].Value = siteInfo.BindString;
newSiteEntry.Properties["ServerComment"].Value =
siteInfo.CommentOfWebSite;
newSiteEntry.CommitChanges();
DirectoryEntry vdEntry = newSiteEntry.Children.Add("root",
"IIsWebVirtualDir");
vdEntry.CommitChanges();
vdEntry.Properties["Path"].Value = siteInfo.WebPath;
vdEntry.CommitChanges();
///
/// 刪除一個網站。根據網站名稱刪除。
///
/// 網站名稱
public static void deleteWebSiteByName(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName,
siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
string rootPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);
rootEntry.Children.Remove(siteEntry);
rootEntry.CommitChanges();
#endregion
#region Start和Stop網站的方法
public static void StartWebSite(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName,
siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
siteEntry.Invoke("Start", new object[] {});
public static void StopWebSite(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName,
siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
siteEntry.Invoke("Stop", new object[] {});
#endregion
#region 確認網站是否相同
///
/// 確定一個新的網站與現有的網站沒有相同的。
/// 這樣防止將非法的數據存放到IIS裏面去
///
/// 網站邦定信息
/// 真爲可以創建,假爲不可以創建
public static bool EnsureNewSiteEnavaible(string bindStr)
{
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
if(child.Properties["ServerBindings"].Value != null)
{
if(child.Properties["ServerBindings"].Value.ToString() == bindStr)
{
return false;
}
}
}
}
return true;
#endregion
#region 獲取一個網站編號的方法
///
/// 獲取一個網站的編號。根據網站的ServerBindings或者ServerComment來確定網站
編號
///
///
/// 返回網站的編號
/// 表示沒有找到網站
public static string GetWebSiteNum(string siteName)
{
Regex regex = new Regex(siteName);
string tmpStr;
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
if(child.Properties["ServerBindings"].Value != null)
{
tmpStr = child.Properties["ServerBindings"].Value.ToString();
if(regex.Match(tmpStr).Success)
{
return child.Name;
}
}
if(child.Properties["ServerComment"].Value != null)
{
tmpStr = child.Properties["ServerComment"].Value.ToString();
if(regex.Match(tmpStr).Success)
{
return child.Name;
}
}
}
}
throw new NotFoundWebSiteException("沒有找到我們想要的站點" + siteName);
#endregion
#region 獲取新網站id的方法
///
/// 獲取網站系統裏面可以使用的最小的ID。
/// 這是因爲每個網站都需要有一個唯一的編號,而且這個編號越小越好。
/// 這裏面的算法經過了測試是沒有問題的。
///
/// 最小的id
public static string GetNewWebSiteID()
{
ArrayList list = new ArrayList();
string tmpStr;
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
tmpStr = child.Name.ToString();
list.Add(Convert.ToInt32(tmpStr));
}
}
list.Sort();
int i = 1;
foreach(int j in list)
{
if(i == j)
{
i++;
}
}
return i.ToString();
#endregion
}
#region 新網站信息結構體
public struct NewWebSiteInfo
{
private string hostIP; // The Hosts IP Address
private string portNum; // The New Web Sites Port.generally is "80"
private string descOfWebSite; // 網站表示。一般爲網站的網站名。例如
"www.dns.com.cn"
private string commentOfWebSite;// 網站註釋。一般也爲網站的網站名。
private string webPath; // 網站的主目錄。例如"e:/tmp"
public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite,
string commentOfWebSite, string webPath)
{
this.hostIP = hostIP;
this.portNum = portNum;
this.descOfWebSite = descOfWebSite;
this.commentOfWebSite = commentOfWebSite;
this.webPath = webPath;
}
public string BindString
{
get
{
return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite);
}
}
public string CommentOfWebSite
{
get
{
return commentOfWebSite;
}
}
public string WebPath
{
get
{
return webPath;
}
}
#endregion
}
--
--
微軟社區ASP.NET,ADO.NET,FRAMEWORK組組長之一!
願我們共同進步!
其它更詳細的操作IIS 有關文檔查看我的網摘。
下面是有關程序池創建後屬性的設置:
DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool");
setLog("正在輸出" + AppPoolName + "應用程序池相關屬性!");
foreach (string elmentName in apppools.Properties.PropertyNames)
{
PropertyValueCollection valueCollection = apppools.Properties[elmentName];
for (int i = 0; i < valueCollection.Count; i++)
{
setLog(elmentName + "[ " + i.ToString() + "] = " + valueCollection[i].ToString() + " <br/> ");
}
}
屬性輸出結果:
2011-6-28 14:04:44
正在輸出SHAPPPOOL應用程序池相關屬性!
2011-6-28 14:04:44
AppPoolIdentityType[ 0] = 2 <br/>
2011-6-28 14:04:44
AppPoolQueueLength[ 0] = 1000 <br/>
2011-6-28 14:04:44
CPULimit[ 0] = 0 <br/>
2011-6-28 14:04:44
CPUResetInterval[ 0] = 5 <br/>
2011-6-28 14:04:44
DisallowOverlappingRotation[ 0] = False <br/>
2011-6-28 14:04:44
DisallowRotationOnConfigChange[ 0] = False <br/>
2011-6-28 14:04:44
IdleTimeout[ 0] = 20 <br/>
2011-6-28 14:04:44
LoadBalancerCapabilities[ 0] = 2 <br/>
2011-6-28 14:04:44
LogEventOnRecycle[ 0] = 137 <br/>
2011-6-28 14:04:44
MaxProcesses[ 0] = 1 <br/>
2011-6-28 14:04:44
OrphanWorkerProcess[ 0] = False <br/>
2011-6-28 14:04:44
PeriodicRestartMemory[ 0] = 0 <br/>
2011-6-28 14:04:44
PeriodicRestartPrivateMemory[ 0] = 0 <br/>
2011-6-28 14:04:44
PeriodicRestartRequests[ 0] = 0 <br/>
2011-6-28 14:04:44
PeriodicRestartTime[ 0] = 1740 <br/>
2011-6-28 14:04:44
PingingEnabled[ 0] = True <br/>
2011-6-28 14:04:44
PingInterval[ 0] = 30 <br/>
2011-6-28 14:04:44
PingResponseTime[ 0] = 90 <br/>
2011-6-28 14:04:44
RapidFailProtection[ 0] = True <br/>
2011-6-28 14:04:44
RapidFailProtectionInterval[ 0] = 5 <br/>
2011-6-28 14:04:44
RapidFailProtectionMaxCrashes[ 0] = 5 <br/>
2011-6-28 14:04:44
ShutdownTimeLimit[ 0] = 90 <br/>
2011-6-28 14:04:44
SMPAffinitized[ 0] = False <br/>
2011-6-28 14:04:44
SMPProcessorAffinityMask[ 0] = -1 <br/>
2011-6-28 14:04:44
StartupTimeLimit[ 0] = 90 <br/>
2011-6-28 14:04:44
KeyType[ 0] = IIsApplicationPools <br/>
2011-6-28 14:04:44
AdminACL[ 0] = System.__ComObject <br/>
2011-6-28 14:04:44
WAMUserName[ 0] = IWAM_PHD-MAIN <br/>
2011-6-28 14:04:44
WAMUserPass[ 0] = ~qN0N5)Gks2#uj <br/>
2011-6-28 14:04:44
輸出SHAPPPOOL應用程序池相關屬性完成!
C#控制IIS啓動,停止,重啓 using System.Diagnostics; ServiceController sc = new ServiceController("iisadmin"); Process.Start("iisreset");//重啓 |