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

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

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

我已经可以部署应用程序了。现在,我需要先查看部署的应用程序是否具有某个目录,然后再尝试对其设置权限(因为该工具会部署不同的应用程序,这些应用程序可能有也可能没有该文件夹)。

我采用了两种方法:

  • 我已经检查了可以在 ServerManager 命名空间下使用的类。我可以使用以下方法获取部署在某个应用程序池下的应用程序的句柄:

    var iis = ServerManager.OpenRemote("serverName")

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

    现在我可以使用以下方法获取应用程序下的虚拟目录:

    var virtualDirectory = iisApplication.VirtualDirectories;

    但是我无法看到该虚拟目录下的所有文件夹。例如,我的应用程序部署为测试,iisApplication.VirtualDirectories.First() 给我 /test。我希望能够 /test/_ApplicationLogs 这是我要设置权限的目录。

  • 我的下一个方法是使用 DirectoryEntry。在这里,我无法找出用于我的应用程序的元数据库路径。是否有用于 IIS 7 的标准配置数据库路径?

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

最佳答案

目前,我有一个解决方法。我可以使用 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);
   }
}

关于c# - 使用C#检查IIS应用程序下是否存在文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302018/

相关文章:

c# - 如何在C#中找到文件的扩展名?

c# - 如何在运行时更改 NLog 目标的连接字符串?

c# - 检查主键是否存在

asp.net - tfspreview (visualstudio) 可以发布到私有(private) IIS Web 应用程序服务器吗?

c# - 更改架构后更新我的 ASP.NET 应用程序/数据库的最佳方法是什么?

c# - 在添加到listBox之前删除文件扩展名C#

javascript - 将 ryanfait.com 自定义表单元素与 .net autopostback 结合使用

asp.net-mvc - 我真的需要 2 个 SSL 认证才能将裸域重定向到 www 吗?

javascript - 在asp.net的每个页面上注入(inject)javascript

c# - 上传文件时服务器要求输入用户名和密码