0

Web サービス アプリケーションの Web セットアップを作成し、正常にデプロイできました。ただし、Web セットアップでは常に inetpub\wwwroot ディレクトリ (たまたま C ドライブにあります) の下に仮想ディレクトリが作成されます。

とにかく、クライアントがdドライブにwwwrootを持っているので、Webセットアップで別の場所に仮想ディレクトリを作成できるようにすることはできますか。たとえば、dドライブです。Web セットアップのインストール アドレスの手順を削除しようとしましたが、依然として inetpub\wwwroot にデフォルト設定されています。

4

1 に答える 1

2

仮想ディレクトリの作成方法を理解できるように、私が書いたコードを次に示します。私が書いたとおりのコードを含めただけなので、そこにはいくつかの信頼の飛躍があります. ただし、インバウンド パラメーターが明らかであることを願っています (ただし、このメソッドでは、Web サイトの ID がわかっている必要があることに注意してください)。2 番目の方法 (最初の方法によって呼び出される) も確認してください。これら 2 つの方法を組み合わせると、既存のサイトの既存の仮想ディレクトリにアクセスし、"Path" プロパティを含むさまざまなプロパティを設定できます。

これが途中で役立つことを願っています...

    /// <summary>
    /// Creates a virtual directory on the specified web site
    /// </summary>
    /// <param name="serverName">name of server</param>
    /// <param name="siteId">Site Id</param>
    /// <param name="directoryName">Virtual Directory Name</param>
    /// <param name="physicalPath">physical path of directory</param>
    /// <param name="bAnonymousLogon">Integrated Windows authentication or Anonymous Logon</param>
    /// <param name="defaultDoc">The default document for the site.</param>
    /// <returns>The Virtual Directory</returns>
    public DirectoryEntry CreateVirtualDirectory(string serverName, int siteId, string directoryName, string physicalPath, bool bAnonymousLogon, string defaultDoc)
    {
        try
        {
            // Does the directory exist already?
            DirectoryEntry vDir = GetVirtualDirectory(serverName, siteId, directoryName);

            if (vDir != null)
            {
                // Yes, it does, no need to create
                _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirAlreadyExists, directoryName, siteId));
            }
            else
            {
                // No, we have some creating to do
                DirectoryEntry root = new DirectoryEntry("IIS://" + serverName + "/W3SVC/" + siteId.ToString(CultureInfo.CurrentUICulture) + "/Root");
                vDir = root.Children.Add(directoryName, IisVirtualDirectory);
                vDir.CommitChanges();
                _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreated, directoryName, siteId));
            }

            // Created or not, we want to set the virtual directory's properties
            // We take a risk here by using literals rather than variables (need to make sure the
            // log value is the same as the actual entry)
            // But its not really much of a risk - the main reason for logging is to record progress
            // through the "set" operation

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreatePath, physicalPath));
            vDir.Properties["Path"][0] = physicalPath;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAccessRead, true.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AccessRead"][0] = true;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAccessExecute, true.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AccessExecute"][0] = true;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAccessWrite, false.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AccessWrite"][0] = false;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAccessScript, false.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AccessScript"][0] = false;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAuthNtlm, (!bAnonymousLogon).ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AuthNTLM"][0] = !bAnonymousLogon;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAuthAnon, bAnonymousLogon.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["AuthAnonymous"][0] = bAnonymousLogon;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateDefaultDoc, true.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["EnableDefaultDoc"][0] = true;

            if (!string.IsNullOrEmpty(defaultDoc))
            {
                _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateDefaultDoc,
                                          defaultDoc.ToString(CultureInfo.CurrentUICulture)));
                vDir.Properties["DefaultDoc"][0] = defaultDoc + ",default.htm,default.aspx,default.asp";
            }

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateDirBrowse, false.ToString(CultureInfo.CurrentUICulture)));
            vDir.Properties["EnableDirBrowsing"][0] = false;

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAppFriendlyName, directoryName));
            vDir.Properties["AppFriendlyName"][0] = directoryName;    // The name of the application

            if (_InstalledIISVersion >= IisVersion.Iis6)
            {
                _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateAppPool, directoryName));
                vDir.Properties["AppPoolId"][0] = directoryName;
            }

            // Commit the changes to the directory
            vDir.CommitChanges();

            // Create out-of-process application
            vDir.Invoke("AppCreate", false);

            _Logger.Log(VirDirCreateSetUp);

            return vDir;
        }
        catch (Exception ex)
        {
            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirCreateException, directoryName, siteId));
            _Logger.Log(ex);
            throw ;
        }
    }

また...

    /// <summary>
    /// Determines whether the directory entry exists on the specified site
    /// </summary>
    /// <param name="serverName">name of server</param>
    /// <param name="siteId">site id</param>
    /// <param name="directoryName">virtual directory name</param>
    /// <returns>the Virtual Directory, if it exists, otherwise null</returns>
    private DirectoryEntry GetVirtualDirectory(string serverName, int siteId, string directoryName)
    {
        try
        {
            DirectoryEntry root = new DirectoryEntry("IIS://" + serverName + "/W3SVC/" + siteId.ToString(CultureInfo.CurrentUICulture) + "/Root");

            foreach (DirectoryEntry entry in root.Children)
            {
                if (0 == String.Compare(directoryName, entry.Name, true, CultureInfo.CurrentUICulture))
                {
                    _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirFound, directoryName, serverName));
                    return entry;
                }
            }

            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirNotFound, directoryName, serverName));
            return null;
        }
        catch (Exception ex)
        {
            _Logger.Log(String.Format(CultureInfo.CurrentUICulture, VirDirException, directoryName, siteId, serverName));
            _Logger.Log(ex);
            throw;
        }
    }

ハンガリー語の表記が一番上にあることに気付きました - Cringe!

于 2012-05-23T11:33:34.030 に答える