IIS控制管理(Web虚拟目录的创建及管理)

原创 2004年03月09日 10:22:00

(一)CreateWebDir.cs 使用示例

????? string sServer = "localhost";
????? string VirtualDir = "Bug2004";?????????????????? //虚拟目录
????? string PathDir??? = @"D:/myWebDirTest/Bug2000"?? //物理目录

???IISManager iisMg = new IISManager(sServer);
???iisMg.Connect();
???
???if (iisMg.Exists(VirtualDir]))
???{
????Console.Write(VirtualDir+ " is exist!");
???}
???else
???{
????myINI.IniWriteValue("WebDir","WebDirExist","false");

????iisMg.get_AnonymousUser();
????string[] anonymousUser = new string[2];
????anonymousUser[0] = iisMg.AnonymousUserName ;
????anonymousUser[1] = iisMg.AnonymousUserPass ;

????VirtualDirectory newVirDir = new VirtualDirectory(VirtualDir,PathDir,anonymousUser);
????if (iisMg.Create(newVirDir))
?????Console.Write(VirtualDir+ " 创建成功!");
????else
?????Console.Write(VirtualDir+ " 创建不成功!");
???}

???iisMg.Close();

(二)CreateWebDir.cs 是转贴过来的,我作了些完善和修改

///***********************************************************
///**************??????????? ?? ?IIS控制管理类?????????????? ?**************
///************** 转贴自: 飞刀 http://www.aspcn.com *************
///***********************************************************
using System;
using System.Data;
using System.DirectoryServices;
using System.Collections;

namespace CreateWebDir
{
?///
?/// IISManager 的摘要说明。
?///
?public class IISManager
?{
??//定义需要使用的
??private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
??private VirtualDirectories _virdirs;
??protected System.DirectoryServices.DirectoryEntry rootfolder;
??private bool _batchflag;
??public IISManager()
??{
???//默认情况下使用localhost,即访问本地机
???_server = "localhost";
???_website = "1";
???_batchflag = false;
??}
??public IISManager(string strServer)
??{
???_server = strServer;
???_website = "1";
???_batchflag = false;
??}
??///
??/// 定义公共属性
??///

??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";
???}
??}
??public string AnonymousUserName
??{
???get{ return _AnonymousUserName;}
???set{ _AnonymousUserName = value;}
??}
??public string AnonymousUserPass
??{
???get{ return _AnonymousUserPass;}
???set{ _AnonymousUserPass = value;}
??}
??//Server属性定义访问机器的名字,可以是IP与计算名
??public string Server
??{
???get{ return _server;}
???set{ _server = value;}
??}
??//WebSite属性定义,为一数字,为方便,使用string
??//一般来说第一台主机为1,第二台主机为2,依次类推
??public string WebSite
??{
???get{ return _website; }
???set{ _website = value; }
??}

??//虚拟目录的名字
??public VirtualDirectories VirDirs
??{
???get{ return _virdirs; }
???set{ _virdirs = value;}
??}
??///
??///定义公共方法
??///

??//连接服务器
??public void Connect()
??{
???ConnectToServer();
??}
??//为方便重载
??public void Connect(string strServer)
??{
???_server = strServer;
???ConnectToServer();
??}
??//为方便重载
??public void Connect(string strServer,string strWebSite)
??{
???_server = strServer;
???_website = strWebSite;
???ConnectToServer();
??}
??//判断是否存这个虚拟目录
??public bool Exists(string strVirdir)
??{
???return _virdirs.Contains(strVirdir);
??}
??//添加一个虚拟目录
??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.");
???}
??}
??//得到一个虚拟目录
??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;
??}

??//更新一个虚拟目录
??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.");
???}
??}
 
??//删除一个虚拟目录
??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.");
???}
??}
??//批量更新
??public void UpdateBatch()
??{
???BatchUpdate(_virdirs);
??}
??//重载一个:-)
??public void UpdateBatch(VirtualDirectories vds)
??{
???BatchUpdate(vds);
??}
 
??///
??///私有方法
??///

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

??}
??//连接服务器
??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.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.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
?????tmpdirs.Add(vd.Name,vd);
????}
???}
???return tmpdirs;
??}

?}
?///
?/// VirtualDirectory类
?///
?public class VirtualDirectory
?{
??private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;
??private string _ausername,_auserpass,_name,_path;
??private int _flag;
??private string _defaultdoc;
??///
??/// 构造函数
??///
??public VirtualDirectory()
??{
???SetValue();
??}
??public VirtualDirectory(string sVirDirName)
??{
???SetValue();
???_name = sVirDirName;
??}
??// sVirDirName:虚拟路径;
??// strPhyPath: 物理路径( physics Path)
??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://";
???_ausername = "IUSR_DEVE-SERVER";_auserpass ="IUSR_DEVE-SERVER";_name="";
??}
??///
??///定义属性,IISVirtualDir太多属性了
??///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
??///

??public int flag
??{
???get{ return _flag;}
???set{ _flag = value;}
??}
??public bool AccessRead
??{
???get{ return _read;}
???set{ _read = value;}
??}
??public bool AccessWrite
??{
???get{ return _write;}
???set{ _write = value;}
??}
??public bool AccessExecute
??{
???get{ return _execute;}
???set{ _execute = value;}
??}
??public bool AccessSSL
??{
???get{ return _ssl;}
???set{ _ssl = value;}
??}
??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;}
??}
??public bool EnableDirBrowsing
??{
???get{ return _endirbrow;}
???set{ _endirbrow = value;}
??}
??public bool EnableDefaultDoc
??{
???get{ return _endefaultdoc;}
???set{ _endefaultdoc = value;}
??}
??public string Name
??{
???get{ return _name;}
???set{ _name = value;}
??}
??public string Path
??{
???get{ return _path;}
???set{ _path = value;}
??}
??public string DefaultDoc
??{
???get{ return _defaultdoc;}
???set{ _defaultdoc = value;}
??}
??public string AnonymousUserName
??{
???get{ return _ausername;}
???set{ _ausername = value;}
??}
??public string AnonymousUserPass
??{
???get{ return _auserpass;}
???set{ _auserpass = value;}
??}
?}
?///
?/// 集合VirtualDirectories
?///

?public class VirtualDirectories : System.Collections.Hashtable
?{
??public VirtualDirectories()
??{
??}
??//添加新的方法
??public VirtualDirectory Find(string strName)
??{
???return (VirtualDirectory)this[strName];
??}
?}
}

Asp.net实现IIS控制管理(Web虚拟目录的创建及管理)

(一)CreateWebDir.cs 使用示例      string sServer = "localhost";      string VirtualDir = "Bug2004";      ...
  • myrayes
  • myrayes
  • 2006年11月10日 02:05
  • 296

Asp.net实现IIS控制管理(Web虚拟目录的创建及管理)

Asp.net实现IIS控制管理(Web虚拟目录的创建及管理) (一)CreateWebDir.cs 使用示例 string sServer = "localhost";string VirtualD...
  • a11s
  • a11s
  • 2005年02月24日 09:43
  • 962

Asp.net实现IIS控制管理---Web虚拟目录的创建及管理

(一)CreateWebDir.cs 使用示例      string sServer = "localhost";      string VirtualDir = "Bug2004";      ...
  • Bulemaple
  • Bulemaple
  • 2004年08月20日 16:02
  • 833

如何:在IIS 中创建和配置虚拟目录

http://yxiaoli.2009.blog.163.com/blog/static/12994237320104206320337/ 如何:在IIS 中创建和配置虚拟目录 此页面仅适...
  • mituan1234567
  • mituan1234567
  • 2014年08月12日 13:02
  • 1120

VS中 无法创建虚拟目录

从前就有个疑问了,为什么我拉取别人写好的代码后就可以在IIS里面生成一个网站呢?这里所谓的生成网站,是指包含了所有源代码文件的网站;相对地,发布网站,就是指包含被编译的源文件所得到的DLL文件的网站。...
  • Sven1520
  • Sven1520
  • 2016年12月23日 22:22
  • 4812

C#创建IIS站点或者虚拟目录

using System; using System.Collections.Generic; using System.Text; using System.DirectoryServices...
  • lbuskeep
  • lbuskeep
  • 2012年02月24日 07:10
  • 2841

IIS添加网站虚拟目录出错

出现的错误是 Server error in \ application Parse error 后来将虚拟目录转化为应用程序,同时将虚拟目录下的WEB.CONFIG不想继承父WEB.CONFIG的...
  • handsometone1982
  • handsometone1982
  • 2014年12月17日 16:47
  • 646

在IIs中重建Exchange的虚拟目录

                 用户修改了iis后,发现邮箱不好用了!通过传过来的图片,发现iis中缺失了Exadmin,Exchange,Public三个虚拟路径,肯定是不小心给删掉了!     ...
  • ppp80
  • ppp80
  • 2005年09月21日 15:39
  • 1887

用.NET在IIS中创建虚拟目录

 使用.NET的目录服务就可以访问IIS的设置,添加虚拟目录其实就是创建一个DirectoryEntry复杂的在于DirectoryEntry的属性,其实就是虚拟目的一些配置,比如,权限,是否要log...
  • lucky_yyx
  • lucky_yyx
  • 2007年04月04日 22:18
  • 1365

在Win7中IIS配置Asp.Net虚拟目录的方法及错误总结!

在Win7中IIS配置Asp.Net虚拟目录的方法总结! 一、右键【网站】,点击【添加虚拟目录】或【虚拟应用程序】,笔者建议最好建立虚拟应用程序,因为这就跟一个网站差不多,不用考虑路径问题。 二、...
  • dxnn520
  • dxnn520
  • 2014年06月28日 09:54
  • 4429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IIS控制管理(Web虚拟目录的创建及管理)
举报原因:
原因补充:

(最多只允许输入30个字)