IIS API - Create virtual directories?

前端 未结 4 2093
离开以前
离开以前 2020-12-09 00:55

Just looking for the relevant documentation. An example is not necessary, but would be appreciated.

We have a situation where we are having to create 100s of virt

相关标签:
4条回答
  • 2020-12-09 01:09

    NOT TESTED (from an old code base and written by a former contractor of mine)

    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();
                //}
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-09 01:15

    Evidently you can also do this via PowerShell scripting:

    $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()
    

    Here is the documentation: MSDN - Using IIS Programmatic Administration

    0 讨论(0)
  • 2020-12-09 01:25

    The WIX installer tool creates a way to manage this - you would define them as a part of the installation build instructions. It make some work to get all of the project configured but after that maintenance should be a breeze... Here is an excerpt from the Tutorial on creating the Virtual Directory entries...

    6.3 Web Directory

    The WiX toolset has additional libraries that allow the installer to perform additional tasks like creating a web directory in IIS. To use these extensions, all you have to do is to link against the appropriate WiX library. The linker will include the necessary helper DLLs into the installation package automatically.

    First, we have to create the web site with the files belonging to it:

    <Directory Id='TARGETDIR' Name='SourceDir'>
      <Directory Id='ProgramFilesFolder' Name='PFiles'>
        <Directory Id='InstallDir' Name='Acme'>
          <Component Id='default.phpComponent' Guid='YOURGUID-5314-4689-83CA-9DB5C04D5742'>
            <File Id='default.htmFile' Name='default.htm' LongName='default.htm' KeyPath='yes' DiskId='1' Source='default.htm' />
          </Component>
        </Directory>
      </Directory>

    The next step is to create the virtual directory:

          <Component Id='TestWebVirtualDirComponent' Guid='YOURGUID-6304-410E-A808-E3585379EADB'>
            <WebVirtualDir Id='TestWebVirtualDir' Alias='Test' Directory='InstallDir' WebSite='DefaultWebSite'>
              <WebApplication Id='TestWebApplication' Name='Test' />
            </WebVirtualDir>
          </Component>
        </Directory>

    Finally, create an entry to reference the web site:

      <WebSite Id='DefaultWebSite' Description='Default Web Site'>
       <WebAddress Id='AllUnassigned' Port='80' />
      </WebSite>

    0 讨论(0)
  • 2020-12-09 01:30

    It is easier to do it with vbscript too..

    ' 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
    
    0 讨论(0)
提交回复
热议问题