3

IIS 7 にアプリケーションをリモートで展開する C# の Web ベースの展開ツールに取り組んでいます。

アプリケーションをデプロイできるところまで来ました。ここで、デプロイされたアプリケーションに特定のディレクトリがあるかどうかを確認してから、アクセス許可を設定する必要があります (ツールは、そのフォルダーを持っている場合と持っていない場合があるさまざまなアプリケーションをデプロイするため)。

私が取った2つのアプローチがあります:

  • 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の下の (set it true) プロパティを使用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 に答える