3

我正在使用 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吗?

4

1 回答 1

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);
   }
}
于 2012-09-07T06:38:10.073 回答