ibcadmin 发表于 2019-8-13 19:14:57

asp.net 创建虚拟目录 iis创建虚拟目录

<p style="margin-left: 30px;">这几天本人接了个档案管理查询系统的小项目,踩过的坑。</p>
<p style="margin-left: 30px;">其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以。其中客户要求pdf需要放到其他的盘符,不能和应用程序在一起,这个解决起来非常方便。系统上线了后,因为客户的pdf是分目录放的,如果上百个虚拟目录是手动创建的话,就有点繁琐。因此需要代码实现。记录如下:</p>

     /// <summary>
      /// 创建虚拟目录
      /// </summary>
      /// <param name="hostName">主机名称或者网站访问IP地址 127.0.0.1</param>
      /// <param name="vDirName">需要创建虚拟目录的名称</param>
      /// <param name="mappingPath">映射地址</param>
      /// <param name="websiteID">网站应用程序ID</param>
      public static void CreateVDir(string websiteID, string vDirName, string mappingPath, string hostName = "127.0.0.1")
      {
            /*
             在创建的时间会报错误:System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) <br />        网上查是因为权限的问题
             解决方法为:在IIS中的默认应用程序池-->高级设置...-->标识改成Local System可以解决该问题            
             */

            // iis 是否存在需要创建的虚拟目录,true:存在 false:不存在
            var hasVdirName = false;
            try
            {
                // IIS://127.0.0.1/W3SVC/10/ROOT
                string path = string.Format("IIS://{0}/W3SVC/{1}/ROOT", hostName, websiteID);
                DirectoryEntry rootfolder = new DirectoryEntry(path);

                // 循环遍历,判断需要创建的虚拟目录在 iis网站上面是否存在
                foreach (System.DirectoryServices.DirectoryEntry v in rootfolder.Children)
                {
                  if (v.Name == vDirName)
                  {
                        hasVdirName = true;
                        break;
                  }
                }

                // 如果存在,则不需要创建
                if (hasVdirName) return;

                // 加入集合
                DirectoryEntry newVirDir = rootfolder.Children.Add(vDirName, rootfolder.SchemaClassName);

                // 指定虚拟目录映射的实际目录
                newVirDir.Properties["Path"] = mappingPath;

                // 提交改变
                newVirDir.CommitChanges();

                // 提交改变
                rootfolder.CommitChanges();
                newVirDir.Close();
                rootfolder.Close();
                rootfolder.Dispose();
                newVirDir.Dispose();
            }
            catch (Exception ex)
            {
               // 错误日志处理
            }
      }<br>来源:<a href="https://www.cnblogs.com/changsen-wang/p/11267025.html" target="_blank">https://www.cnblogs.com/changsen-wang/p/11267025.html</a><br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: asp.net 创建虚拟目录 iis创建虚拟目录