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