随笔 - 229  文章 - 2  评论 - 511  阅读 - 84万

使用c#建立虚拟目录

 
        最近在CSDN论坛里看见网友的一片偏关于使用.net 创建虚拟目录的帖子, 以前一直以为不能用托管代码实现这个功能...
   
        在此总结一下:)


         下面是创建虚拟目录的代码


              const String constIISWebSiteRoot = "IIS://localhost/W3SVC/1/ROOT";
                string virtualDirName = "virtualName";//虚拟目录名称
                string physicalPath = @"c:\1";
                DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);

                DirectoryEntry tbEntry = root.Children.Add(virtualDirName, root.SchemaClassName);


                tbEntry.Properties["Path"][0] = physicalPath;
                tbEntry.Invoke("AppCreate", true);
                 
                tbEntry.Properties["AccessRead"][0] = false;   
                tbEntry.Properties["ContentIndexed"][0] = true; ;
                tbEntry.Properties["DefaultDoc"][0] = "index.asp,Default.aspx";
                tbEntry.Properties["AppFriendlyName"][0] = virtualDirName;   
               tbEntry.Properties["AccessScript"][0] = true;
                tbEntry.Properties["DontLog"][0] = true;
                tbEntry.Properties["AuthFlags"][0] = 0;
                tbEntry.Properties["AuthFlags"][0] = 1;
                tbEntry.CommitChanges();
            


                现在来解释一下这段代码:
               
                创建虚拟目录需要使用System.DirectoryEntries命名空间下的DirectoryEntry类
             
                  首先声明一个DirecotryEntry的实例
                DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);

                  其中的参数constIISWebSiteRoot由一下几个部分组成
                   "IIS://"+domainName+"/W3SVC"+WebSiteNumber+"/ROOT"
            
  WebSiteNumber由你要在哪个站点创建虚拟目录来决定,xp只能有一个站点,所以WebSiteNumber值为1,win2000Server 和win2003可以创建多个站点,所以WebSiteNumber的值可以大于1

                   然后创建DirecotryEntry实例的子节点  ,也就是要创建的虚拟目录
                 DirectoryEntry tbEntry = root.Children.Add(virtualDirName, root.SchemaClassName);

                   root.Children.Add(string namespace,string schemaClassName)方法会创建并返回一个DirectoryEntry的实例

                    下面的部分就是对这个新创建的节点进行操作了

                    tbEntry.Properties["Path"][0] = physicalPath;    //设置虚拟目录指向的物理路径
                    
                     tbEntry.Invoke("AppCreate", true);    //
                
                    tbEntry.Properties["AccessRead"][0] = false;     //设置读取权限
                    
                    tbEntry.Properties["DefaultDoc"][0] = "index.asp,Default.aspx"; //设置默认文档,多值情况下中间用逗号分割
                   
                    tbEntry.Properties["AppFriendlyName"][0] = virtualDirName;    //应用程序名称
                   
                    tbEntry.Properties["AccessScript"][0] = true;  //执行权限
                    
                    tbEntry.Properties["AuthFlags"][0] = 0;   //    设置目录的安全性,0表示不允许匿名访问,1为允许,3为基本身份验证,7为windows继承身份验证
                    
                     tbEntry.CommitChanges();//
           

这里这是列举了部分属性,如果得到更多属性的信息可是访问DirecotryEntry.Properties属性

下面的方法是得到所有属性名称的方法:
foreach (PropertyValueCollection pvc in tbEntry.Properties)
                  {
                      Console.WriteLine(pvc.PropertyName);
                  }

演示代码CreateVirtualSite.rar
posted on   stswordman  阅读(2711)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2006年8月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示