2012-09-06 38 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); 
    } 
}