asp教程.net 程式IIS自動部署問題
建立虛擬目錄的經過以下步驟:
1)擷取該虛擬目錄的上級目錄的DirectoryEntry對象rootEntry;
2)通過rootEntry的DirectoryEntry::Childrens.Add來添加該虛擬目錄;
//建立虛擬目錄
DirectoryEntryentry=rootEntry.Children.Add(this.m_strAlias,"IIsWebVirtualDir");
3)更新該虛擬目錄的屬性,如更新身分識別驗證模式,存取權限和所對應的物理目錄等。需要注意的是,使用DirectoryEntry來建立虛擬目錄,只能在該虛擬目錄建立了以後,才能設定物理目錄等屬性。
建立虛擬目錄的代碼如下:
///<summary>
///建立iis虛擬目錄
///</summary>
///<excepti>虛擬目錄操作異常</exception>
publicoverridevoidCreateDirectory()
{
//已不覆蓋的方式建立虛擬目錄,當虛擬目錄存在時拋出異常
this.CreateDirectory(false);
}
///<summary>
///建立iis虛擬目錄
///</summary>
///<paramname="bReplace">是否覆蓋掉原有的虛擬目錄</param>
///<excepti>虛擬目錄操作異常</exception>
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)。
///<summary>
///刪除iis虛擬目錄
///</summary>
///<excepti>虛擬目錄操作異常</exception>
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);
}
}