从经典ASP在IIS中创建虚拟目录

从经典ASP在IIS中创建虚拟目录,iis,asp-classic,virtual-directory,Iis,Asp Classic,Virtual Directory,我在一个经典的asp网站上工作,该网站提供软件即服务。此站点的潜在客户与我们联系,我们手动设置站点。我们希望尽可能地自动化这个过程。目前,我有一个表格,由我的老板填写,以删除数据库中的数据。该过程会向我发送一封电子邮件,我必须手动为该站点创建虚拟目录 我想使用经典的ASP来设置。我没有从地理信息系统中找到很好的结果。我找到了一些关于创建批处理文件或执行appcmd的内容。有人在这方面取得了成功吗 现在我们的URL看起来像“”。稍后,我想将其更改为类似“”的内容。在此方面的任何帮助都将不胜感激。以

我在一个经典的asp网站上工作,该网站提供软件即服务。此站点的潜在客户与我们联系,我们手动设置站点。我们希望尽可能地自动化这个过程。目前,我有一个表格,由我的老板填写,以删除数据库中的数据。该过程会向我发送一封电子邮件,我必须手动为该站点创建虚拟目录

我想使用经典的ASP来设置。我没有从地理信息系统中找到很好的结果。我找到了一些关于创建批处理文件或执行appcmd的内容。有人在这方面取得了成功吗


现在我们的URL看起来像“”。稍后,我想将其更改为类似“”的内容。在此方面的任何帮助都将不胜感激。

以下是可能的步骤:

  • 收集创建/配置新站点/应用程序所需的所有数据(如应用程序/站点名称)
  • 使用System.DirectoryServices API创建/配置新站点。 通过链接了解有关如何在IIS6中创建/配置站点/应用程序的更多信息
  • 若你们正在使用IIS7,那个么本文将帮助你们创建/配置新的站点/应用程序

  • 概述

    关于以编程方式修改IIS的配置,我只能想到两种方法,从经典的ASP。第一种是使用COM类(如ADSI或WMI)来操作配置。第二种方法是利用Microsoft引入的新ASP.Net类。(为了完整性,您也可以使用,但这些类只是围绕ADSI的托管包装。)


    通过ADSI的方法1-COM

    我将首先讨论基于COM的解决方案,因为这种方法涉及的开销最少。我将重点讨论ADSI,而不是WMI,因为这是我过去使用的。可以使用ADSI

    例如,要创建新站点,可以使用:

    要创建新的虚拟目录,可以使用:

    Dim IIsWebVDirRootObj, IIsWebVDirObj
    Set IIsWebVDirRootObj = GetObject("IIS://localhost/W3SVC/1/Root") 
    Set IIsWebVDirObj = IIsWebVDirRootObj.Create("IIsWebVirtualDir", "NewVDir") 
    IIsWebVDirObj.Put "Path", "C:\NewContent"  
    IIsWebVDirObj.Put "AccessRead", True 
    IIsWebVDirObj.Put "AccessScript", True 
    IIsWebVDirObj.SetInfo
    
    我95%确信,为了使用ADSI或WMI,您需要启用IIS6兼容性,因为这些COM对象试图操纵元数据库,而较新版本的IIS不再使用元数据库。要启用IIS6兼容性,请执行以下操作


    通过Microsoft.Web.Administration访问2-.Net

    如果我执意要使用.Net,我会选择Microsoft.Web.Administration而不是System.DirectoryServices。无论使用哪个.Net类,都必须对其进行包装,才能从经典asp使用它,因为没有调用.Net的本机方法。为了做到这一点,您需要包装您在CCW-a中编写的任何代码。完全可以这样做,即在.Net中编写所有代码,并实例化一个COM组件,该组件只是所有.Net代码的容器。我不会详细介绍如何在CCW中包装.net代码,但您的CCW.net代码将非常简单:

    ServerManager serverManager = new ServerManager();
    Site mySite = serverManager.Sites.Add("NewSite", "C:\\Sites\\yournewsite", 80);
    mySite.ServerAutoStart = true;
    serverManager.CommitChanges();
    
    有关如何使用CCW的更多信息,请参阅


    最后。。。权限。

    现在,更大的问题是:您正在以IUSR、IUSR_MachineName或某些绝对没有权限破坏IIS配置的受限帐户的身份运行。无论如何,你必须获得更多的许可。你也许可以,但另一种方法是。在你的情况下,你需要以比IUSR更为特权的身份运行,因为它是绝对可怕的


    或者,只需关闭匿名身份验证,并启用基本身份验证。然后,向将向服务器进行身份验证的用户授予足够的权限,代码应该可以正常运行。

    您针对的是哪个版本的IIS?如果>IIS6,会安装IIS6兼容层吗?很抱歉,我在原始帖子中没有提到这一点。服务器正在运行Windows server 2008 r2。我相信这是第8条。它肯定高于IIS6。我认为不需要兼容层。没问题。我有两种方法。其中一个需要打开IIS6兼容性,但要比第二个简单得多。该网站使用的是经典的ASP。这是行不通的。我需要从我的web应用程序进行调用。我们可以使用经典asp.Net程序集。我们不能吗?谢谢你!方法1看起来很棒。今晚我会设法安排的。权限显然是一个问题。如果我为这一段代码打开这个洞,它会为这个站点上的所有东西打开它。我可能需要创建第二个应用程序,比如web服务或其他东西来处理这个问题。如果是这样的话,我可以用.net来做。
    ServerManager serverManager = new ServerManager();
    Site mySite = serverManager.Sites.Add("NewSite", "C:\\Sites\\yournewsite", 80);
    mySite.ServerAutoStart = true;
    serverManager.CommitChanges();