0

Web アプリケーション用の Wix ベースのセットアップを作成しています。IIS がアクセスできるように、インストールするフォルダーにアクセス許可を設定したいと考えています。

IIS 6 と 7 はそれぞれ と を使用IIS_WPGIIS_USRS、IIS 5 は を使用しますIUSR_COMPUTER NAME。ただし、ユーザーがマシン名を変更した場合、現在のコンピューター名を使用してアクセス許可を設定すると失敗します。

IIS 5 で使用されているユーザー アカウントを、単に想定するのではなく、プログラムで判断する方法はありますIUSR_COMPUTERNAMEか?

4

1 に答える 1

0

私はこのようにしています (ベスト プラクティス ソリューションを提供するふりをしないでください) - これは、後で使用できるプロパティを設定する即時の CA です。

  [CustomAction]
  public static ActionResult SetIUSRAccountNameAction(Session session)
  {
     ActionResult actionResult = ActionResult.Failure;
     DirectoryEntry iisAdmin = new DirectoryEntry("IIS://localhost/W3SVC");
     if (iisAdmin != null)
     {
        string iusrName = (string)iisAdmin.Properties["AnonymousUserName"][0];
        if (!string.IsNullOrEmpty(iusrName))
        {
           session["IUSR_USERNAME"] = iusrName;

           string iusrDomain = GetAccountDomain(iusrName, session);
           if (!string.IsNullOrEmpty(iusrDomain))
           {
              session["IUSR_DOMAIN"] = iusrDomain;
           }

           actionResult = ActionResult.Success;
        }
     }

     return actionResult;
  }

ここで、GetAccountDomain メソッドは次のように定義されています。

  static string GetAccountDomain(string accountName, Session session)
  {
     SelectQuery query = new SelectQuery("Win32_UserAccount", string.Format("Name='{0}'", accountName), new string[] { "Domain" });
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
     try
     {
        foreach (ManagementObject account in searcher.Get())
        {
           return (string)account["Domain"];
        }
     }
     catch (Exception ex)
     {
        session.Log("Failed to get a domain for the user {0}:  {1}", accountName, ex.Message);
     }

     return null;
  }

お役に立てれば。

于 2010-02-16T18:08:49.027 に答える