2012-09-06 100 views
3

我工作在C#中的基於網絡的部署工具,它部署在遠程IIS 7檢查是否使用C#

應用我已經達到一個點,在那裏我可以一個IIS應用程序存在下一個文件夾部署一個應用程序。現在,我需要查看部署的應用程序在嘗試對其設置權限之前是否有特定的目錄(因爲該工具將部署可能有或沒有該文件夾的不同應用程序)。

有,我花了兩個方法:

  • 我已經簽了,我可以在ServerManager命名空間下使用類。我可以使用在一定的應用程序池部署的應用程序獲得一個句柄:

    var iis = ServerManager.OpenRemote("serverName")

    var iisApplication = iis.Sites[site].Applications["appName"];。現在

    我可以用得到的應用程序下的虛擬目錄:

    var virtualDirectory = iisApplication.VirtualDirectories;

    但後來我沒能看到一大堆這是虛擬目錄下的文件夾中。例如,我的應用程序被部署爲測試,iisApplication.VirtualDirectories.First()給我/test。我希望能夠/test/_ApplicationLogs這是我想設置權限的目錄。

  • 我的下一個方法是使用DirectoryEntry。在這裏,我無法弄清楚用於我的應用程序的元數據庫路徑。是否有用於IIS 7的標準配置數據庫路徑?

    名爲test應用本地部署,將在數據庫路徑是什麼?我能否讓所有的孩子都可以使用DirectoryEntry.Exists

回答

1

現在,我有一個解決方法。我可以使用WhatIf(設置真)財產DeploymentSyncOptions下,做一個同步,然後檢查是否得到了添加的對象。如果有,目錄不存在。代碼:

var syncOptions = new DeploymentSyncOptions(); 
syncOptions.WhatIf = true; 

using (deploymentObject) 
{ 
    var result = deploymentObject.SyncTo(
    DeploymentWellKnownProvider.SetAcl, 
    "Default Web Site/path_to_folder", 
    destinationBaseOptions, 
    syncOptions); 

    if (result.ObjectsAdded != 0) 
    { 
    syncOptions.WhatIf = false; 
    deploymentObject.SyncTo(DeploymentWellKnownProvider.SetAcl, 
          "Default Web Site/path_to_folder", 
          destinationBaseOptions, 
          syncOptions); 
    } 
}