[英]Adding a local user to a local group in C#
I can add a user perfectly well, but then I can't add it to a local group. 我可以很好地添加用户,但是我无法将其添加到本地组。 I get this error:- 我收到这个错误: -
A member could not be added to or removed from the local group because the member does not exist. 无法将成员添加到本地组或从本地组中删除该成员,因为该成员不存在。
Here is the code I'm using. 这是我正在使用的代码。 What I am doing wrong? 我做错了什么? It's just the local machine, I definitely have rights to do it, and the group definifely exists. 它只是本地机器,我绝对有权这样做,而且该组织确实存在。
try
{
using (DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://" + serverName))
{
DirectoryEntries entries = hostMachineDirectory.Children;
foreach (DirectoryEntry entry in entries)
{
if (entry.Name.Equals(userName, StringComparison.CurrentCultureIgnoreCase))
{
// Update password
entry.Invoke("SetPassword", password);
entry.CommitChanges();
return true;
}
}
DirectoryEntry obUser = entries.Add(userName, "User");
obUser.Properties["FullName"].Add("Used to allow users to login to Horizon. User created programmatically.");
obUser.Invoke("SetPassword", password);
obUser.Invoke("Put", new object[] {
"UserFlags",
0x10000
});
obUser.CommitChanges();
foreach (string group in groups)
{
DirectoryEntry grp = hostMachineDirectory.Children.Find(group, "group");
if (grp != null) { grp.Invoke("Add", new object[] { obUser.Path.ToString() }); }
}
return true;
}
}
catch (Exception ex)
{
returnMessage = ex.InnerException.Message;
return false;
}
I wrote some code ages ago which takes a different approach to yours, but as far as I can tell works (insofar as nobody ever reported problems to me!). 我在很久以前写过一些代码,它们采用了与你不同的方法,但就我所说的而言(只要没有人向我报告过问题!)。 Any use to you? 对你有用吗?
/// <summary>
/// Adds the supplied user into the (local) group
/// </summary>
/// <param name="userName">the full username (including domain)</param>
/// <param name="groupName">the name of the group</param>
/// <returns>true on success;
/// false if the group does not exist, or if the user is already in the group, or if the user cannont be added to the group</returns>
public static bool AddUserToLocalGroup(string userName, string groupName)
{
DirectoryEntry userGroup = null;
try
{
string groupPath = String.Format(CultureInfo.CurrentUICulture, "WinNT://{0}/{1},group", Environment.MachineName, groupName);
userGroup = new DirectoryEntry(groupPath);
if ((null == userGroup) || (true == String.IsNullOrEmpty(userGroup.SchemaClassName)) || (0 != String.Compare(userGroup.SchemaClassName, "group", true, CultureInfo.CurrentUICulture)))
return false;
String userPath = String.Format(CultureInfo.CurrentUICulture, "WinNT://{0},user", userName);
userGroup.Invoke("Add", new object[] { userPath });
userGroup.CommitChanges();
return true;
}
catch (Exception)
{
return false;
}
finally
{
if (null != userGroup) userGroup.Dispose();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.