【问题标题】:Checking whether a folder exists under an IIS application using C#使用 C# 检查 IIS 应用程序下是否存在文件夹
【发布时间】:2012-09-06 14:09:08
【问题描述】:

我正在使用 C# 开发基于 Web 的部署工具,它可以在 IIS 7 上远程部署应用程序。

我已经达到了可以部署应用程序的地步。现在我需要在尝试对其设置权限之前查看已部署的应用程序是否具有某个目录(因为该工具将部署可能具有或不具有该文件夹的不同应用程序)。

我采用了两种方法:

  • 我已经检查了可以在 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吗?

【问题讨论】:

    标签: c# asp.net iis directoryservices virtual-directory


    【解决方案1】:

    目前,我有一个解决方法。我可以使用DeploymentSyncOptions 下的WhatIf(设置为true)属性,进行同步,然后检查是否添加了对象。如果是,则该目录不存在。代码:

    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);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多