asp.net 程序IIS自动部署问题

作者:袖梨 2022-06-25

asp教程.net 程序IIS自动部署问题
创建虚拟目录的经过以下步骤:

  1)获取该虚拟目录的上级目录的DirectoryEntry对象rootEntry;

  2)通过rootEntry的DirectoryEntry::Childrens.Add来添加该虚拟目录;

  //创建虚拟目录

  DirectoryEntryentry=rootEntry.Children.Add(this.m_strAlias,"IIsWebVirtualDir");

  3)更新该虚拟目录的属性,如更新身份验证模式,访问权限和所对应的物理目录等。需要注意的是,使用DirectoryEntry来创建虚拟目录,只能在该虚拟目录建立了以后,才能设置物理目录等属性。

  创建虚拟目录的代码如下:

///


    ///创建iis虚拟目录
    ///

    ///虚拟目录操作异常
   publicoverridevoidCreateDirectory()
   {
     //已不覆盖的方式创建虚拟目录,当虚拟目录存在时抛出异常
      this.CreateDirectory(false);
    }

    ///


    ///创建iis虚拟目录
    ///

    ///是否覆盖掉原有的虚拟目录
    ///虚拟目录操作异常
    publicoverridevoidCreateDirectory(boolbReplace)
    {
      //判断目录是否存在
      if(this.Exist())
      {
        if(bReplace)
        {
          //若允许覆盖则先删除原有的虚拟目录
          this.DeleteDirectory();
        }
        else
        {
          //若不允许覆盖直接抛出目录已存在的异常
          DirectoryException.Throw("directoryalreadyexist");
        }
      }

      try
      {
        //获取上级目录的DirectoryEntry对象
        DirectoryEntryrootEntry=SystemDirectory.GetParentEntry(this);
        //创建虚拟目录
   DirectoryEntryentry=rootEntry.Children.Add(this.m_strAlias,"IIsWebVirtualDir");
        entry.Invoke("AppCreate",true);
        entry.CommitChanges();
        rootEntry.CommitChanges();

        //更新虚拟目录属性
        SystemDirectory.UpdateEntry(entry,this.Property);
     }
      catch(System.Exceptionex)
      {
        DirectoryException.Throw(ex.Message);
      }
    }


DirectoryEntry的commitChanges方法用于提交DirectoryEntry的操作。line41中的提交了以后,该虚拟目录才能建立,然后在进行更新虚拟目录的属性的操作。若没有commitChanges就进行更新操作,会抛出找不到虚拟目录的异常,有兴趣的朋友可以试试。

  2、删除虚拟目录:

  删除虚拟目录比较简单,只需调用虚拟目录的父节点的DirectoryEntry对象的Delete操作就可以了,需要注意的是Delete对象需要两个参数:子节点的Alias和子节点的类型(虚拟目录节点的类型为IIsWebVirtualDir)。

///


    ///删除iis虚拟目录
    ///

    ///虚拟目录操作异常
    publicoverridevoidDeleteDirectory()
    {
      //判断目录是否存在
      if(!this.Exist())
      {
        //若待删除的虚拟目录不存在,则抛出异常
       DirectoryException.Throw("directorydoesnotexist");
      }

      try
      {
        //获取上级目录的DirectoryEntry对象
        DirectoryEntryrootEntry=SystemDirectory.GetParentEntry(this);
        //删除参数
        object[]objParams=newobject[2];;
        objParams[0]="IIsWebVirtualDir";
        objParams[1]=this.m_strAlias;
        //删除虚拟目录
        rootEntry.Invoke("Delete",objParams);
        rootEntry.CommitChanges();
      }
      catch(System.Exceptionex)
      {
        DirectoryException.Throw(ex.Message);
      }
      
    }

 

相关文章

精彩推荐