惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - 中国土匪

MSSql Datetime转换成char 的样式汇总 OpenSocial容器开发,资料备注 列出数据库中有数据的表的全部数据 比较两个数据库之间差异的存储过程 关于Web Application中的类无法在页面中引用的问题 图形字符名称表(备查) 决心--重新拾起技术! BitComet的IE插件BitCommet Helper可能给系统造成错误的巨大Bug!!!求解决方案 Page事件发生的先后顺序 在 ASP.NET 中使用计时器(Timer) (转载) 当了3个礼拜老师感想 给CheckboxList分页 关于ItemCommand事件 (转自混沌居) 在.net1.1中发送邮件的几种办法 常用正则表达式总结 datalist分页方式汇总(更新了一种方法) membership.findusersbyname模糊匹配的写法 用BitComet的奇怪问题 装了红帽子9了
操作IIS过程中碰到的问题总结
中国土匪 · 2007-05-03 · via 博客园 - 中国土匪

1.在代码中不能引入System.DirectoryServices命名空间--首先需要在解决方案中添加对System.DirectoryServices的引用
2.添加引用后,在后台代码可以引入System.DirectoryServices命名空间,在类中却不行--具体原因不知,不过直接把using System.DirectoryServices;写到类中,反正不会报错
3.获得另外一个虚拟目录的路径:第一种方法,使用DirectoryEntry类,DirectoryEntry dirroot = new DirectoryEntry("IIS://" + lpComputerName + "/W3svc/1/Root/Webtest"),其中Webtest是虚拟目录的名称,dirroot.Properties["path"]
第二种方法,Server.Mappath("/Webtest"),注意,一定要用iis当服务器,如果用2005自带的那个服务器的话,就不能获取
4获取虚拟目录的全部属性

        foreach (PropertyValueCollection pvc in dirroot.Properties)
        
{
            Response.Write(pvc.PropertyName 
+ "==");
            Response.Write(dirroot.Properties[pvc.PropertyName][
0+ "<br/>");
        }

5.另外转一片关于操作虚拟目录的文章:文章见此
6.另转一个关于IIS操作的类,非常好用,忘了从哪弄来的了,作者见谅


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

namespace Softcy.IIS
{

    
/// <summary> 
    
/// IISManager 的摘要说明。 
    
/// </summary> 


    
public class IISManager
    
{
        
//定义需要使用的 
        private string _server, _website;
        
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;
        }


        
/// <summary> 

        
/// 定义公共属性 

        
/// </summary> 




        
//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; }
        }


        
///<summary> 

        
///定义公共方法 

        
///</summary> 




        
//连接服务器 

        
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 void 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);
                }

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

            }

            
else
            
{
                
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);
        }




        
///<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.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;
        }

    }


    
/// <summary> 

    
/// VirtualDirectory类 

    
/// </summary> 


    
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;
        
/// <summary> 

        
/// 构造函数 

        
/// </summary> 


        
public VirtualDirectory()
        
{
            SetValue();
        }


        
public VirtualDirectory(string strVirDirName)
        
{
            _name 
= strVirDirName;
            SetValue();
        }


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


        
///<summary> 

        
///定义属性,IISVirtualDir太多属性了 

        
///我只搞了比较重要的一些,其它的大伙需要的自个加吧。 

        
///</summary> 




        
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; }
        }


    }


    
/// <summary> 

    
/// 集合VirtualDirectories 

    
/// </summary> 




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


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


    }


//}

7.2005中使用IIS作为服务器的方法:创建网站的时候选择http,并填写http://localhost/Webtest。打开网站的时候选择本地IIS
8。仍然存在的问题,创建虚拟目录或删除虚拟目录时没有权限,望有人解答