文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>IIS的完整控制类 - asp.net 教程-

IIS的完整控制类 - asp.net 教程-

时间:2010-08-27  来源:星空3

 

using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;

namespace CreateWebDir
...{
/**//// <summary>
/// IISManager 的摘要说明。
/// </summary>

public class IISManager
...{
//定义需要使用的
private string _server, _website, _AnonymousUserPass, _AnonymousUserName;
private VirtualDirectories _virdirs;
protected System.DirectoryServices.DirectoryEntry rootfolder;
private bool _batchflag;
/**//// <summary>
/// 默认情况下使用localhost,即访问本地机
/// </summary>

public IISManager()
...{
_server
= "localhost";
_website
= "1";
_batchflag
= false;
}

/**//// <summary>
///
/// </summary>
/// <param name="strServer">主机名称</param>

public IISManager(string strServer)
...{
_server
= strServer;
_website
= "1";
_batchflag
= false;
}

/**//// <summary>
/// 生成一个新的站点
/// </summary>
/// <param name="webSiteName">站点名称</param>
/// <param name="pathToRoot">物理地址</param>
/// <returns></returns>

public int CreateWebSite(string webSiteName, string pathToRoot)
...{
DirectoryEntry root
= new DirectoryEntry("IIS://localhost/W3SVC");
// Find unused ID value for new web site
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;
}

}

}

// Create web site
DirectoryEntry site = (DirectoryEntry) root.Invoke("Create", "IIsWebServer", siteID);
site.Invoke(
"Put", "ServerComment", webSiteName);
site.Invoke(
"Put", "KeyType", "IIsWebServer");
site.Invoke(
"Put", "ServerBindings", ":80:");
site.Invoke(
"Put", "ServerState", 2);
site.Invoke(
"Put", "FrontPageWeb", 1);
site.Invoke(
"Put", "DefaultDoc", "Default.aspx");
site.Invoke(
"Put", "SecureBindings", ":443:");
site.Invoke(
"Put", "ServerAutoStart", 1);
site.Invoke(
"Put", "ServerSize", 1);
site.Invoke(
"SetInfo");
// Create application virtual directory
DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
siteVDir.Properties[
"AppIsolated"][0] = 2;
siteVDir.Properties[
"Path"][0] = pathToRoot;
siteVDir.Properties[
"AccessFlags"][0] = 513;
siteVDir.Properties[
"FrontPageWeb"][0] = 1;
siteVDir.Properties[
"AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root";
siteVDir.Properties[
"AppFriendlyName"][0] = "Root";
siteVDir.CommitChanges();
site.CommitChanges();
return siteID;
}


/**//// <summary>
/// 获得匿名用户
/// </summary>

public void get_AnonymousUser()
...{
_AnonymousUserPass
= "IUSR_DEVE-SERVER";
_AnonymousUserName
= "IUSR_DEVE-SERVER";
VirtualDirectory vDir;
try
...{
Hashtable myList
= (Hashtable) _virdirs;
IDictionaryEnumerator myEnumerator
= myList.GetEnumerator();
while (myEnumerator.MoveNext())
...{
vDir
= (VirtualDirectory) myEnumerator.Value;
if (vDir.AnonymousUserName != "" && vDir.AnonymousUserPass != "")
...{
_AnonymousUserName
= vDir.AnonymousUserName;
_AnonymousUserPass
= vDir.AnonymousUserPass;
break;
}

}

}

catch
...{
_AnonymousUserPass
= "IUSR_DEVE-SERVER";
_AnonymousUserName
= "IUSR_DEVE-SERVER";
}

}

/**//// <summary>
/// 匿名用户名
/// </summary>

public string AnonymousUserName
...{
get ...{ return _AnonymousUserName; }
set ...{ _AnonymousUserName = value; }
}

/**//// <summary>
/// 匿名用户密码
/// </summary>

public string AnonymousUserPass
...{
get ...{ return _AnonymousUserPass; }
set ...{ _AnonymousUserPass = value; }
}


/**//// <summary>
/// Server属性定义访问机器的名字,可以是IP与计算名
/// </summary>

public string Server
...{
get ...{ return _server; }
set ...{ _server = value; }
}

/**//// <summary>
/// WebSite属性定义,为一数字,为方便,使用string
/// 一般来说第一台主机为1,第二台主机为2,依次类推
/// </summary>

public string WebSite
...{
get ...{ return _website; }
set ...{ _website = value; }
}


/**//// <summary>
/// 虚拟目录的名字
/// </summary>

public VirtualDirectories VirDirs
...{
get ...{ return _virdirs; }
set ...{ _virdirs = value; }
}

/**////<summary>
///定义公共方法
///</summary>


/// <summary>
/// 连接服务器
/// </summary>

public void Connect()
...{
ConnectToServer();
}


/**//// <summary>
/// 为方便重载
/// </summary>

public void Connect(string strServer)
...{
_server
= strServer;
ConnectToServer();
}


/**//// <summary>
/// 为方便重载
/// </summary>
/// <param name="strServer"></param>
/// <param name="strWebSite"></param>

public void Connect(string strServer, string strWebSite)
...{
_server
= strServer;
_website
= strWebSite;
ConnectToServer();
}

/**//// <summary>
/// 判断是否存这个虚拟目录
/// </summary>
/// <param name="strVirdir"></param>
/// <returns></returns>

public bool Exists(string strVirdir)
...{
return _virdirs.Contains(strVirdir);
}


/**//// <summary>
/// 添加一个虚拟目录
/// </summary>
/// <param name="newdir">虚拟目录的实例</param>
/// <returns></returns>

public bool Create(VirtualDirectory newdir)
...{
string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;
if (!_virdirs.Contains(newdir.Name) || _batchflag)
...{
try
...{
//加入到ROOT的Children集合中去
DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name, "IIsWebVirtualDir");
newVirDir.Invoke(
"AppCreate", true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
//然后更新数据
UpdateDirInfo(newVirDir, newdir);
return true;
}

catch (Exception ee)
...{
//throw new Exception(ee.ToString());
return false;
}

}

else
...{
return true;
//throw new Exception("This virtual directory is already exist.");
}

}


/**//// <summary>
/// 得到一个虚拟目录
/// </summary>
/// <param name="strVirdir"></param>
/// <returns></returns>

public VirtualDirectory GetVirDir(string strVirdir)
...{
VirtualDirectory tmp
= null;
if (_virdirs.Contains(strVirdir))
...{
tmp
= _virdirs.Find(strVirdir);
((VirtualDirectory) _virdirs[strVirdir]).flag
= 2;
}

else
...{
//throw new Exception("This virtual directory is not exists");
}

return tmp;
}


/**//// <summary>
/// 更新一个虚拟目录
/// </summary>
/// <param name="dir"></param>

public void Update(VirtualDirectory dir)
...{
//判断需要更改的虚拟目录是否存在
if (_virdirs.Contains(dir.Name))
...{
DirectoryEntry ode
= rootfolder.Children.Find(dir.Name, "IIsWebVirtualDir");
UpdateDirInfo(ode, dir);
}

else
...{
//throw new Exception("This virtual directory is not exists.");
}

}


/**//// <summary>
/// 删除一个虚拟目录
/// </summary>
/// <param name="strVirdir"></param>

public void Delete(string strVirdir)
...{
if (_virdirs.Contains(strVirdir))
...{
object[] paras = new object[2];
paras[
0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = strVirdir;
rootfolder.Invoke(
"Delete", paras);
rootfolder.CommitChanges();
}

else
...{
//throw new Exception("Can''t delete " + strVirdir + ",because it isn''t exists.");
}

}


/**//// <summary>
/// 批量更新
/// </summary>

public void UpdateBatch()
...{
BatchUpdate(_virdirs);
}

//重载一个:-)
public void UpdateBatch(VirtualDirectories vds)
...{
BatchUpdate(vds);
}


/**////<summary>
///私有方法
///</summary>


public void Close()
...{
_virdirs.Clear();
_virdirs
= null;
rootfolder.Dispose();

}


/**//// <summary>
/// 连接服务器
/// </summary>

private void ConnectToServer()
...{
string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT";
try
...{
this.rootfolder = new DirectoryEntry(strPath);
_virdirs
= GetVirDirs(this.rootfolder.Children);
}

catch (Exception e)
...{
//throw new Exception("Can''t connect to the server ["+ _server +"] ...",e);
}

}

//执行批量更新
private void BatchUpdate(VirtualDirectories vds)
...{
_batchflag
= true;
foreach (object item in vds.Values)
...{
VirtualDirectory vd
= (VirtualDirectory) item;
switch (vd.flag)
...{
case 0:
break;
case 1:
Create(vd);
break;
case 2:
Update(vd);
break;
}

}

_batchflag
= false;
}

//更新东东
private void UpdateDirInfo(DirectoryEntry de, VirtualDirectory vd)
...{
de.Properties[
"AnonymousUserName"][0] = vd.AnonymousUserName;
de.Properties[
"AnonymousUserPass"][0] = vd.AnonymousUserPass;
de.Properties[
"AccessRead"][0] = vd.AccessRead;
de.Properties[
"AccessExecute"][0] = vd.AccessExecute;
de.Properties[
"AccessWrite"][0] = vd.AccessWrite;
de.Properties[
"AuthBasic"][0] = vd.AuthBasic;
de.Properties[
"AuthNTLM"][0] = vd.AuthNTLM;
de.Properties[
"ContentIndexed"][0] = vd.ContentIndexed;
de.Properties[
"EnableDefaultDoc"][0] = vd.EnableDefaultDoc;
de.Properties[
"EnableDirBrowsing"][0] = vd.EnableDirBrowsing;
de.Properties[
"AccessSSL"][0] = vd.AccessSSL;
de.Properties[
"AccessScript"][0] = vd.AccessScript;
de.Properties[
"DefaultDoc"][0] = vd.DefaultDoc;
de.Properties[
"Path"][0] = vd.Path;
de.Properties[
"AppFriendlyName"][0] = vd.AppFriendlyName;
de.CommitChanges();
}


//获取虚拟目录集合
private VirtualDirectories GetVirDirs(DirectoryEntries des)
...{
VirtualDirectories tmpdirs
= new VirtualDirectories();
foreach (DirectoryEntry de in des)
...{
if (de.SchemaClassName == "IIsWebVirtualDir")
...{
VirtualDirectory vd
= new VirtualDirectory();
vd.Name
= de.Name;
vd.AccessRead
= (bool) de.Properties["AccessRead"][0];
vd.AccessExecute
= (bool) de.Properties["AccessExecute"][0];
vd.AccessWrite
= (bool) de.Properties["AccessWrite"][0];
vd.AnonymousUserName
= (string) de.Properties["AnonymousUserName"][0];
vd.AnonymousUserPass
= (string) de.Properties["AnonymousUserName"][0];
vd.AuthBasic
= (bool) de.Properties["AuthBasic"][0];
vd.AuthNTLM
= (bool) de.Properties["AuthNTLM"][0];
vd.ContentIndexed
= (bool) de.Properties["ContentIndexed"][0];
vd.EnableDefaultDoc
= (bool) de.Properties["EnableDefaultDoc"][0];
vd.EnableDirBrowsing
= (bool) de.Properties["EnableDirBrowsing"][0];
vd.AccessSSL
= (bool) de.Properties["AccessSSL"][0];
vd.AccessScript
= (bool) de.Properties["AccessScript"][0];
vd.Path
= (string) de.Properties["Path"][0];
vd.flag
= 0;
vd.AppFriendlyName
= (string) de.Properties["AppFriendlyName"][0];
vd.DefaultDoc
= (string) de.Properties["DefaultDoc"][0];
tmpdirs.Add(vd.Name, vd);
}

}

return tmpdirs;
}


}

/**//// <summary>
/// VirtualDirectory类
/// </summary>

public class VirtualDirectory
...{
private bool _read, _execute, _script, _ssl, _write, _authbasic, _authntlm, _indexed, _endirbrow, _endefaultdoc;
private string _ausername, _auserpass, _name, _path, _appfriendlyname;
private int _flag;
private string _defaultdoc;
/**//// <summary>
/// 构造函数
/// </summary>

public VirtualDirectory()
...{
SetValue();
}

/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="sVirDirName">虚拟目录的名字</param>

public VirtualDirectory(string sVirDirName)
...{
SetValue();
_name
= sVirDirName;
}

/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="sVirDirName">虚拟路径</param>
/// <param name="strPhyPath">物理路径</param>
/// <param name="AnonymousUser">匿名用户名和密码</param>

public VirtualDirectory(string sVirDirName, string strPhyPath, string[] AnonymousUser)
...{
SetValue();
_name
= sVirDirName;
_path
= strPhyPath;
_ausername
= AnonymousUser[0];
_auserpass
= AnonymousUser[1];
}

private void SetValue()
...{
_read
= true;
_execute
= false;
_script
= true;
_ssl
= false;
_write
= false;
_authbasic
= false;
_authntlm
= true;
_indexed
= true;
_endirbrow
= false;
_endefaultdoc
= true;
_flag
= 1;
_defaultdoc
= "default.htm,default.aspx,default.asp,index.htm";
_path
= "C:\\";
_appfriendlyname
= "";
_ausername
= "IUSR_DEVE-SERVER";
_auserpass
= "IUSR_DEVE-SERVER";
_name
= "";
}

/**////<summary>
///定义属性,IISVirtualDir太多属性了
///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
///</summary>

/// <summary>
/// 标志
/// </summary>

public int flag
...{
get ...{ return _flag; }
set ...{ _flag = value; }
}

/**//// <summary>
/// 是否可读
/// </summary>

public bool AccessRead
...{
get ...{ return _read; }
set ...{ _read = value; }
}

/**//// <summary>
/// 是否可写
/// </summary>

public bool AccessWrite
...{
get ...{ return _write; }
set ...{ _write = value; }
}

/**//// <summary>
/// 是否可执行
/// </summary>

public bool AccessExecute
...{
get ...{ return _execute; }
set ...{ _execute = value; }
}

/**//// <summary>
/// SSL验证
/// </summary>

public bool AccessSSL
...{
get ...{ return _ssl; }
set ...{ _ssl = value; }
}

/**//// <summary>
/// 是否允许脚本
/// </summary>

public bool AccessScript
...{
get ...{ return _script; }
set ...{ _script = value; }
}

public bool AuthBasic
...{
get ...{ return _authbasic; }
set ...{ _authbasic = value; }
}

public bool AuthNTLM
...{
get ...{ return _authntlm; }
set ...{ _authntlm = value; }
}

public bool ContentIndexed
...{
get ...{ return _indexed; }
set ...{ _indexed = value; }
}

/**//// <summary>
/// 是否可浏览
/// </summary>

public bool EnableDirBrowsing
...{
get ...{ return _endirbrow; }
set ...{ _endirbrow = value; }
}

public bool EnableDefaultDoc
...{
get ...{ return _endefaultdoc; }
set ...{ _endefaultdoc = value; }
}

/**//// <summary>
/// 虚拟目录的名字
/// </summary>

public string Name
...{
get ...{ return _name; }
set ...{ _name = value; }
}

/**//// <summary>
/// 虚拟目录的物理地址
/// </summary>

public string Path
...{
get ...{ return _path; }
set ...{ _path = value; }
}

/**//// <summary>
/// 默认访问首页
/// </summary>

public string DefaultDoc
...{
get ...{ return _defaultdoc; }
set ...{ _defaultdoc = value; }
}

/**//// <summary>
/// 匿名用户名
/// </summary>

public string AnonymousUserName
...{
get ...{ return _ausername; }
set ...{ _ausername = value; }
}

/**//// <summary>
/// 匿名用户密码
/// </summary>

public string AnonymousUserPass
...{
get ...{ return _auserpass; }
set ...{ _auserpass = value; }
}

/**//// <summary>
/// 应用程序名称
/// </summary>

public string AppFriendlyName
...{
get ...{ return _appfriendlyname; }
set ...{ _appfriendlyname = value; }
}

}

/**//// <summary>
/// 集合VirtualDirectories
/// </summary>

public class VirtualDirectories : System.Collections.Hashtable
...{
public VirtualDirectories()
...{
}

//添加新的方法
public VirtualDirectory Find(string strName)
...{
return (VirtualDirectory) this[strName];
}

}

}
使用例子:
string sServer = "localhost";
string VirtualDir = "vTest"; //虚拟目录
string PathDir = @"c:\\inetpub\\dlwang\\"; //物理目录

IISManager iisMg
= new IISManager(sServer);
iisMg.Connect();

if (iisMg.Exists(VirtualDir))
...{
throw new Exception(VirtualDir + " is exist!");
}

else
...{
VirtualDirectory newVirDir
= new VirtualDirectory(VirtualDir);
newVirDir.Path
= PathDir;
newVirDir.DefaultDoc
= "Index.htm";
newVirDir.AccessExecute
= true;
newVirDir.AccessScript
= true;
newVirDir.AccessWrite
= false;
newVirDir.AppFriendlyName
= "vTestApp";
if (!iisMg.Create(newVirDir))
throw new Exception(VirtualDir + " 创建不成功!");
}


iisMg.Close();

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载