C#实现创建,删除,查找,配置虚拟目录实例详解
本文实例讲述了C#实现创建,删除,查找,配置虚拟目录的方法。分享给大家供大家参考。具体如下:
#region<<虚拟目录>>
///<summary>
///创建虚拟目录
///</summary>
///<param>虚拟目录别名</param>
///<param>内容所在路径</param>
publicstaticboolCreateVirtualDirectory(stringwebSite,stringvirtualName,stringpath)
{
if(virtualName.Equals(string.Empty)||(!Directory.Exists(path)))
{
MessageBox.Show("1.虚拟目录别名不能为空/r/n2.虚拟目录内容所在路径可能不存在","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
returnfalse;
}
try
{
DirectoryEntrytbEntry=FindVirtualDir(webSite,virtualName);//查找虚拟目录
if(tbEntry==null)//找不到则创建虚拟目录
{
stringIISpath="IIS://localhost/W3SVC/"+webSite+"/ROOT";//IIS参数格式
System.DirectoryServices.DirectoryEntryroot=newDirectoryEntry(IISpath);
tbEntry=root.Children.Add(virtualName,root.SchemaClassName);//创建虚拟目录
}
returnUpdateVirDir(tbEntry,path,virtualName);
}
catch(Exceptionex)
{
MessageBox.Show("1.请确认IIS是否已经安装/r/n2.虚拟目录有可能已经存在/r/n(Error:"+ex.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
WriterLog("CreateVir:/r/n"+ex.ToString());
returnfalse;
}
}
///<summary>
///获取网站列表
///</summary>
///<returns></returns>
publicstaticList<webSiteInfo>GetWebSiteList()
{
try
{
List<webSiteInfo>infoList=newList<webSiteInfo>();
DirectoryEntrydeRoot=newDirectoryEntry("IIS://localhost/W3SVC");
foreach(DirectoryEntryeindeRoot.Children)
{
webSiteInfoinfo=newwebSiteInfo();
PropertyValueCollectionpvc=e.Properties["ServerBindings"];
if(pvc.Count<=0)
continue;
String[]srvBindings=pvc[0].ToString().Split(':');
info.IpAddress=srvBindings[0]==string.Empty?appCode.ToolBox.GetIP():srvBindings[0];//绑定的IP地址
info.Port=srvBindings[1];//对应端口号
info.Name=e.Name;//所在站点索引
infoList.Add(info);
}
returninfoList;
}
catch(Exceptionex)
{
WriterLog(ex.ToString());
returnnull;
}
}
///<summary>
///删除虚拟目录
///</summary>
///<param></param>
///<param></param>
///<returns></returns>
publicstaticboolDelVirtualDirectory(stringwebSite,stringnameDirectory)
{
try
{
DirectoryEntrydeRoot=newDirectoryEntry("IIS://localhost/W3SVC/"+webSite+"/ROOT");
try
{
deRoot.Children.Remove(FindVirtualDir(webSite,nameDirectory));
deRoot=null;
returntrue;
}
catch
{
returntrue;
}
}
catch(Exceptione)
{
WriterLog(e.ToString());
returnfalse;
}
}
///<summary>
///修改虚拟目录
///</summary>
///<param></param>
///<param></param>
///<param></param>
///<returns></returns>
publicstaticboolUpdateVirDir(DirectoryEntrytbEntry,stringpath,stringvirtualName)
{
if(tbEntry==null)
returnfalse;
tbEntry.Properties["Path"][0]=path;//物理目录
tbEntry.Invoke("AppCreate",true);//创建应用程序
tbEntry.Properties["AccessRead"][0]=true;//允许访问
tbEntry.Properties["ContentIndexed"][0]=true;;//
tbEntry.Properties["DefaultDoc"][0]="index.asp,Default.aspx";
tbEntry.Properties["AppFriendlyName"][0]=virtualName;//应用程序名
tbEntry.Properties["AccessScript"][0]=true;//访问权限
tbEntry.Properties["DontLog"][0]=true;//日志
tbEntry.Properties["AuthFlags"][0]=1;//验证,0不,1允许,3基本身份
tbEntry.CommitChanges();//开始应用属性
returntrue;
}
///<summary>
///查找虚拟目录
///</summary>
///<param></param>
///<returns></returns>
publicstaticDirectoryEntryFindVirtualDir(stringwebSite,stringvirtualName)
{
if(virtualName.Equals(string.Empty))
{
MessageBox.Show("虚拟目录别名不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
returnnull;
}
try
{
stringIISpath="IIS://localhost/W3SVC/"+webSite+"/ROOT";//IIS参数格式
System.DirectoryServices.DirectoryEntryroot=newDirectoryEntry(IISpath);//实例IIS类
returnroot.Children.Find(virtualName,root.SchemaClassName);//查找虚拟目录)
}
catch(Exceptionex)
{
WriterLog("虚拟目录不存在:"+ex.Message);
returnnull;
}
}
///<summary>
///为虚拟目录增加扩展名
///</summary>
///<param>虚拟目录名</param>
///<param>扩展名列表</param>
publicstaticvoidSetMime(stringwebSite,stringvirtualName,Dictionary<string,string>exList)
{
if(virtualName.Equals(string.Empty))
{
MessageBox.Show("虚拟目录别名不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
DirectoryEntrytbEntry=FindVirtualDir(webSite,virtualName);
if(tbEntry==null)
return;
System.DirectoryServices.PropertyValueCollectionmime=tbEntry.Properties["MimeMap"];
foreach(stringeinexList.Keys)
{
IISOle.MimeMapClassEx=newIISOle.MimeMapClass();
Ex.Extension=e;
Ex.MimeType=exList[e];
if(ContianValue(Ex,mime)!=null)
continue;
mime.Add(Ex);
Ex=null;
}
tbEntry.CommitChanges();
}
///<summary>
///删除扩展名
///</summary>
///<param></param>
///<param></param>
///<returns></returns>
publicstaticboolDelMime(IISOle.IISMimeTypetype,stringwebSite,stringvirtualName)
{
DirectoryEntrytbEntry=FindVirtualDir(webSite,virtualName);
if(tbEntry==null)
returnfalse;
System.DirectoryServices.PropertyValueCollectionmime=tbEntry.Properties["MimeMap"];
objectv=ContianValue(type,mime);
if(v!=null)
mime.Remove(v);
tbEntry.CommitChanges();
returntrue;
}
///<summary>
///搜索取指定扩展名对象
///</summary>
///<param></param>
///<param></param>
///<returns></returns>
privatestaticobjectContianValue(IISOle.IISMimeTypetype,PropertyValueCollectionmime)
{
foreach(objectvinmime)
{
IISOle.IISMimeTypee=(IISOle.IISMimeType)v;
if(type.Extension.ToLower().Equals(e.Extension.ToLower())&&(type.MimeType.ToLower().Equals(e.MimeType.ToLower())))
{
e=null;
returnv;
}
}
returnnull;
}
///<summary>
///获得虚拟目录的扩展名列表
///</summary>
///<param></param>
///<returns></returns>
publicstaticDictionary<string,string>GetMimeList(stringwebSite,stringvirtualName)
{
if(virtualName.Equals(string.Empty))
{
MessageBox.Show("虚拟目录别名不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
returnnull;
}
try
{
Dictionary<string,string>Res=newDictionary<string,string>();
DirectoryEntrytbEntry=FindVirtualDir(webSite,virtualName);
if(tbEntry==null)
returnnull;
System.DirectoryServices.PropertyValueCollection_mime=tbEntry.Properties["MimeMap"];
foreach(objectein_mime)
{
IISOle.IISMimeTypev=(IISOle.IISMimeType)e;
if(!Res.ContainsKey(v.Extension))
Res.Add(v.Extension,v.MimeType);
v=null;
}
returnRes;
}
catch(Exceptionex)
{
WriterLog("GetMimeList;"+ex.Message);
returnnull;
}
}
#endregion
希望本文所述对大家的C#程序设计有所帮助。