这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了,翻出来共享了 ~ 据说,控制IIS和别的MS的垃圾(MS的FTP, 用户管理..)可以用ADSI和WMI(WIN2k3的才好),参考了网友们的资料,有版权问题麻烦EMAIL一下原来是按三层写的代码没有整理, 权当笔记,省点稿纸, 大家看个大概, 详细的MSDN都有 ! 三个文件: /**/ ////FileName: hostservice.cs// using System; using System.Data; using Wooyea.WebSite.Modules.Hosts.DataAccess; using Wooyea.WebSite.Modules.Hosts.Configuration; namespace Wooyea.WebSite.Modules.Hosts.Business { /**//// <summary> /// Summary description for HostService. /// </summary> public class HostService { Private fields#region Private fields private ModuleSettings settings; private int id; private string name; private string description; private decimal price; // the field in SQL server is the type of smallmoney private string ip; private int port; private string rootPath; private int maxBandwidth; private int maxConnections; private int cpuLimit; private byte serverSize; private byte appIsolated; #endregion Properties#region Properties public int ID { get {return id;} set {id = value;} } public string Name { get {return name;} set {name = value;} } public string Description { get {return description;} set {description = value;} } public decimal Price { get {return price;} set {price = value;} } public string IP { get {return ip;} set {ip = value;} } public int Port { get {return port;} set {port = value;} } public string RootPath { get {return rootPath;} set {rootPath = value;} } public int MaxBandwidth { get {return maxBandwidth;} set {maxBandwidth = value;} } public int CpuLimit { get {return cpuLimit;} set {cpuLimit = value;} } public byte ServerSize { get {return serverSize;} set {serverSize = value;} } #endregion public HostService() { Configuration.ModuleConfig config = new ModuleConfig(); settings = config.GetSettings(); } public HostService(string name, string description, decimal price, string ip, string rootPath) : this() { this.name = name; this.description = description; this.price = price; this.ip = ip; this.rootPath = rootPath; } public HostService(int id) : this() { this.id = id; GetDetails(); } public void GetDetails() { DataAccess.HostServices dataHostServices = new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString); DataRow tempRow = dataHostServices.GetDetails(id); this.name = (string)tempRow["HostServiceName"]; this.price = Convert.ToDecimal(tempRow["HostServicePrice"]); this.ip = (string)tempRow["HostServiceIP"]; this.port = (int)tempRow["HostServicePort"]; this.rootPath = (string)tempRow["HostServiceRootPath"]; } public DataSet GetHostServices() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString); return dataHostServices.GetHostServices(); } public int Create() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString); return dataHostServices.Insert(name, description, price, rootPath, ip); } public bool Update() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString); return dataHostServices.Update(id, name, description, price, rootPath, ip); } }} /**/ end hostservice.cs/ // FileName: IISManager.cs using System; using System.Collections; using System.Text.RegularExpressions; using System.Text; using System.DirectoryServices; using Wooyea.WebSite.Modules.Hosts; namespace Wooyea.WebSite.Modules.Hosts.Business { /**//// <summary> /// Summary description for Class1. /// </summary> class IISManager { public IISManager() {} public DirectoryEntry GetDirectoryEntry(string entryPath) { // creater direntry instance depend on local or remote DirectoryEntry dirEntry = new DirectoryEntry(entryPath); return dirEntry; } public bool CreateSite(WebSiteInfo newSiteInfo) { string entPath = "IIS://localhost/w3svc"; DirectoryEntry rootEntry = GetDirectoryEntry(entPath); string newSiteID = GetNewSiteID(); DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteID, "IIsWebServer"); newSiteEntry.CommitChanges(); newSiteEntry.Properties["ServerBindings"].Value = newSiteInfo.ServerBindings; newSiteEntry.Properties["ServerComment"].Value = newSiteInfo.Comment; newSiteEntry.CommitChanges(); DirectoryEntry vDirEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir"); vDirEntry.CommitChanges(); vDirEntry.Properties["Path"].Value = newSiteInfo.Path; //ph patth in disk vDirEntry.CommitChanges(); return true; } /**//// <summary> /// Get and return a new website ID of specify host /// </summary> /// <returns>the smallest new website ID of the host</returns> public string GetNewSiteID() { ArrayList idList = new ArrayList(); string tmpStr; string entryPath = "IIS://localhost/W3SVC"; DirectoryEntry entry = GetDirectoryEntry(entryPath); foreach (DirectoryEntry child in entry.Children) { if (child.SchemaClassName == "IIsWebServer") { tmpStr = child.Name.ToString(); idList.Add(Convert.ToInt32(tmpStr)); } } idList.Sort(); int i = 1; foreach (int id in idList) { if (i == id) { i++; } } return i.ToString(); } }} /**/ ///end IISmanager///// // File Name: WebSite.cs using System; using System.DirectoryServices; using Wooyea.WebSite.Modules.Hosts.Configuration; using Wooyea.WebSite.Modules.Hosts.Business; using Wooyea.WebSite.Modules.Hosts.DataAccess; namespace Wooyea.WebSite.Modules.Hosts.Business { /**//// <summary> /// Summary description for WebSite. /// </summary> public class WebSite { Private fields#region Private fields private ModuleSettings settings; private WebSiteInfo siteInfo; #endregion Properties#region Properties #endregion WebSite() { Configuration.ModuleConfig config = new ModuleConfig(); settings = config.GetSettings(); } public WebSite(string newHeader, string newComment, string newIP, int newPort, string newPath) : this() { this.siteInfo.Header = newHeader; this.siteInfo.IP = newIP; this.siteInfo.Port = newPort; this.siteInfo.Comment = newComment; this.siteInfo.Path = newPath; } /**//// <summary> /// Create a new data record in website table and another one in the cross table /// </summary> /// <param name="userID">userID of current priciple</param> /// <returns></returns> public int CreateSite(int userID) { IISManager iis = new IISManager(); iis.CreateSite(siteInfo); DataAccess.WebSites newSite = new WebSites(settings.ConnectionString); return newSite.Add(siteInfo, userID); } }}