如何在C#asp.net中的窗口服务器2003上创建系统用户?

时间:2011-08-09 06:51:47

标签: c# asp.net active-directory windows-server-2003

您好我想在window server 2003活动目录中创建一个系统用户,我使用以下C#代码,

 DirectoryEntry AD = new DirectoryEntry("WinNT://"+Environment.MachineName+",computer");

            DirectoryEntry NewUser = AD.Children.Add(username, "user");

            NewUser.Invoke("SetPassword", new object[] { password });

            NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET"});

            NewUser.CommitChanges();

            DirectoryEntry grp;

            grp = AD.Children.Find("Guests", "group");

            if (grp != null)
            {
                grp.Invoke("Add", new object[] { NewUser.Path.ToString() });
            }

当我在visualy studio web引擎上本地运行此应用程序时,此代码会生成用户,但是当我在窗口服务器2003上的iis上部署此应用程序时,这将提供异常

例外:

General Access Denied Error

请帮助我,我做错了在窗口服务器中创建用户需要哪些权限以及我们如何给出这个持久性。感谢。

1 个答案:

答案 0 :(得分:0)

查看System.DirectoryServices.AccountManagement命名空间。利用它的类,你可以这样做:

using (var context = new PrincipalContext(ContextType.Machine, "MachineName", "AdminUserName", "AdminPassword"))
{
    UserPrincipal user = new UserPrincipal(context, username, password, true);
    user.Description = "Test User from .NET";
    user.Save();

    var guestGroup = GroupPrincipal.FindByIdentity(context, "Guests");
    if (guestGroup != null)
    {
        guestGroup.Members.Add(user);
        guestGroup.Save();
    }
}

此外,您可以在应用程序上配置模拟并跳过PrincipalContext构造函数异常中的所有参数,如果此功能仅允许管理员使用,则跳过第一个参数。