【问题标题】:IIS API - Create virtual directories?IIS API - 创建虚拟目录?
【发布时间】:2010-09-20 22:19:00
【问题描述】:

只是寻找相关文档。示例不是必需的,但将不胜感激。

我们有一种情况,我们必须手动创建 100 个虚拟目录,而目前看来,自动化这将是提高流程效率的好方法。

也许明年我们可以重新设计服务器环境以允许更理智的事情,例如 URL 重写(不幸的是,这在 Web 应用程序的当前周期中似乎不可行)。继承垃圾代码不是很好吗?

~威廉·莱利-兰德

【问题讨论】:

    标签: .net asp.net iis api virtual-directory


    【解决方案1】:

    WIX 安装程序工具创建了一种管理方式 - 您可以将它们定义为安装构建说明的一部分。配置所有项目需要一些工作,但在此之后维护应该是轻而易举的......这是关于创建虚拟目录条目的教程的摘录......

    6.3 网页目录

    WiX 工具集具有其他库,允许安装程序执行其他任务,例如在 IIS 中创建 Web 目录。要使用这些扩展,您所要做的就是链接到适当的 WiX 库。链接器会自动将必要的帮助程序 DLL 包含到安装包中。

    首先,我们必须使用属于它的文件创建网站:






    组件>
    目录>
    目录>

    下一步是创建虚拟目录:

          



    组件>
    目录>

    最后,创建一个条目来引用该网站:

      

    网站>

    【讨论】:

      【解决方案2】:

      显然您也可以通过 PowerShell 脚本执行此操作:

      $objIIS = new-object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1/Root")
      $children = $objIIS.psbase.children
      $vDir = $children.add("NewFolder",$objIIS.psbase.SchemaClassName)
      $vDir.psbase.CommitChanges()
      $vDir.Path = "C:\Documents and Settings\blah\Desktop\new"
      $vDir.defaultdoc = "Default.htm"
      $vDir.psbase.CommitChanges()
      

      这里是文档:MSDN - Using IIS Programmatic Administration

      【讨论】:

        【解决方案3】:

        vbscript 也更容易做到这一点..

        ' This code creates a virtual directory in the default Web Site
        ' ---------------------------------------------------------------
        ' From the book "Windows Server Cookbook" by Robbie Allen
        ' ISBN: 0-596-00633-0
        ' ---------------------------------------------------------------
        
        ' ------ SCRIPT CONFIGURATION ------
        strComputer = "rallen-w2k3"
        strVdirName = "<VdirName>"  'e.g. employees
        strVdirPath = "<Path>"      'e.g. D:\resumes
        ' ------ END CONFIGURATION ---------
        set objIIS = GetObject("IIS://" & strComputer & "/W3SVC/1")
        set objWebSite = objIIS.GetObject("IISWebVirtualDir","Root")
        set objVdir = objWebSite.Create("IISWebVirtualDir",strVdirName)
        objVdir.AccessRead = True
        objVdir.Path = strVdirPath
        objVdir.SetInfo
        WScript.Echo "Successfully created virtual directory: " & objVdir.Name
        

        【讨论】:

          【解决方案4】:

          未经测试(来自旧代码库,由我的前承包商编写)

          using System;
          using System.Collections.Generic;
          using System.Text;
          using System.DirectoryServices;
          using System.IO;
          
          namespace Common.DirectoryServices
          {
              public class IISManager
              {
          
                  private string _webSiteID;
          
                  public string WebSiteID
                  {
                      get { return _webSiteID; }
                      set { _webSiteID = value; }
                  }
          
                  private string _strServerName;
                  public string ServerName
                  {
                      get
                      {
                          return _strServerName;
                      }
                      set
                      {
                          _strServerName = value;
                      }
                  }
          
                  private string _strVDirName;
                  public string VDirName
                  {
                      get
                      {
                          return _strVDirName;
                      }
                      set
                      {
                          _strVDirName = value;
                      }
                  }
          
                  private string _strPhysicalPath;
                  public string PhysicalPath
                  {
                      get
                      {
                          return _strPhysicalPath;
                      }
                      set
                      {
                          _strPhysicalPath = value;
                      }
                  }
          
                  private VDirectoryType _directoryType;
                  public VDirectoryType DirectoryType
                  {
                      get
                      {
                          return _directoryType;
                      }
                      set
                      {
                          _directoryType = value;
                      }
                  }
          
                  public enum VDirectoryType
                  {
                      FTP_DIR, WEB_IIS_DIR
                  };
          
                  public string CreateVDir()
                  {
                      System.DirectoryServices.DirectoryEntry oDE;
                      System.DirectoryServices.DirectoryEntries oDC;
                      System.DirectoryServices.DirectoryEntry oVirDir;
                      //try
                     // {
                          //check whether to create FTP or Web IIS Virtual Directory
                          if (this.DirectoryType == VDirectoryType.WEB_IIS_DIR)
                          {
                              oDE = new DirectoryEntry("IIS://" +
                                    this._strServerName + "/W3SVC/" + _webSiteID + "/Root");
                          }
                          else
                          {
                              oDE = new DirectoryEntry("IIS://" +
                                    this._strServerName + "/MSFTPSVC/1/Root");
                          }
          
                          //Get Default Web Site
                          oDC = oDE.Children;
          
                          //Add row
                          oVirDir = oDC.Add(this._strVDirName,
                                    oDE.SchemaClassName.ToString());
          
                          //Commit changes for Schema class File
                          oVirDir.CommitChanges();
          
                          //Create physical path if it does not exists
                          if (!Directory.Exists(this._strPhysicalPath))
                          {
                              Directory.CreateDirectory(this._strPhysicalPath);
                          }
          
                          //Set virtual directory to physical path
                          oVirDir.Properties["Path"].Value = this._strPhysicalPath;
          
                          //Set read access
                          oVirDir.Properties["AccessRead"][0] = true;
          
                          //Create Application for IIS Application (as for ASP.NET)
                          if (this.DirectoryType == VDirectoryType.WEB_IIS_DIR)
                          {
                              oVirDir.Invoke("AppCreate", true);
                              oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName;
                          }
          
                          //Save all the changes
                          oVirDir.CommitChanges();
          
                          return null;
          
                     // }
                      //catch (Exception exc)
                      //{
                       //   return exc.Message.ToString();
                      //}
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2016-10-06
            • 2012-02-02
            • 1970-01-01
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-22
            相关资源
            最近更新 更多