使用C#检查IIS应用程序下是否存在文件夹

3

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

现在,我已经能够成功部署应用程序了。但是,在尝试设置权限之前,我需要检查已部署的应用程序是否有特定目录(因为该工具将部署不同的应用程序,这些应用程序可能有或可能没有该文件夹)。

我采取了两种方法:

  • 我查找了可以在ServerManager命名空间下使用的类。我可以使用以下代码获取在特定应用程序池下部署的应用程序的句柄:

    var iis = ServerManager.OpenRemote("serverName")

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

    现在,我可以使用以下代码获取应用程序下的虚拟目录:

    var virtualDirectory = iisApplication.VirtualDirectories;

    但是,我无法看到位于该虚拟目录下的很多文件夹。例如,我的应用程序部署为test,iisApplication.VirtualDirectories.First()给出的结果是/test。我想要访问的是/test/_ApplicationLogs,这是我想要设置权限的目录。

  • 我的下一个尝试是使用DirectoryEntry。但是,我无法找到用于我的应用程序的元数据路径。在IIS 7中是否有标准的元数据路径?

    对于本地部署的名为test的应用程序,元数据路径是什么?我能否获取所有子级,以便我可以使用DirectoryEntry.Exists

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接