windows 创建本地用户帐户
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3729406/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
create local user account
提问by user175084
i have this code to create a local windows user
我有这个代码来创建一个本地 Windows 用户
public static bool CreateLocalWindowsAccount(string username, string password, string displayName, string description, bool canChangePwd, bool pwdExpires)
{
try
{
PrincipalContext context = new PrincipalContext(ContextType.Machine);
UserPrincipal user = new UserPrincipal(context);
user.SetPassword(password);
user.DisplayName = displayName;
user.Name = username;
user.Description = description;
user.UserCannotChangePassword = canChangePwd;
user.PasswordNeverExpires = pwdExpires;
user.Save();
//now add user to "Users" group so it displays in Control Panel
GroupPrincipal group = GroupPrincipal.FindByIdentity(context, "Users");
group.Members.Add(user);
group.Save();
return true;
}
catch (Exception ex)
{
LogMessageToFile("error msg" + ex.Message);
return false;
}
}
i tried this on my machine it works fine. but then i put this on windows server. and tried to create a user over there.
我在我的机器上试过这个它工作正常。但后来我把它放在 Windows 服务器上。并试图在那里创建一个用户。
First i got the error "General access denied error" so i made the user an administrator
首先我收到错误“一般访问被拒绝错误”所以我让用户成为管理员
but now i get the error "The network path was not found"
但现在我收到错误“找不到网络路径”
how can i solve this error.. thanks
我该如何解决这个错误..谢谢
采纳答案by Scott Chamberlain
I had a very similar issue change the first line to
我有一个非常相似的问题,将第一行更改为
PrincipalContext context = new PrincipalContext(ContextType.Machine, "127.0.0.1");
see if that fixes your issue. And triple check that the program is running with administrator privileges.
看看是否能解决您的问题。并三重检查该程序是否以管理员权限运行。
The other issue it could be is the server has password complexity requirements and password
that is being passed in to the function does not meet those requirements. Does the problem go away if you pass it ASfas123@!fda
as the password?
另一个问题可能是服务器有密码复杂性要求password
,而传递给函数的密码不符合这些要求。如果您将其ASfas123@!fda
作为密码传递,问题会消失吗?
I am 90% sure it is one of those two issues.
我 90% 确定这是这两个问题之一。
For your user groups not saving I am not sure why. Here is a snippit from one of my projects that is doing the same thing you are. I cant see the diffrence.
对于没有保存的用户组,我不知道为什么。这是我的一个项目中的一个片段,它正在做与您相同的事情。我看不出差异。
using (GroupPrincipal r = GroupPrincipal.FindByIdentity(context, "Remote Desktop Users"))
using (GroupPrincipal u = GroupPrincipal.FindByIdentity(context, "Users"))
{
//snip
UserPrincipal user = null;
try
{
if (userInfo.NewPassword == null)
throw new ArgumentNullException("userInfo.NewPassword", "userInfo.NewPassword was null");
if (userInfo.NewPassword == "")
throw new ArgumentOutOfRangeException("userInfo.NewPassword", "userInfo.NewPassword was empty");
//If the user already is in the list of existing users use that one.
if (pr.ContainsKey(username))
{
user = (UserPrincipal)pr[username];
user.Enabled = true;
user.SetPassword(userInfo.NewPassword);
}
else
{
//create new windows user.
user = new UserPrincipal(context, username, userInfo.NewPassword, true);
user.UserCannotChangePassword = true;
user.PasswordNeverExpires = true;
user.Save();
r.Members.Add(user);
r.Save();
u.Members.Add(user);
u.Save();
}
IADsTSUserEx iad = (IADsTSUserEx)((DirectoryEntry)user.GetUnderlyingObject()).NativeObject;
iad.TerminalServicesInitialProgram = GenerateProgramString(infinityInfo);
iad.TerminalServicesWorkDirectory = Service.Properties.Settings.Default.StartInPath;
iad.ConnectClientDrivesAtLogon = 0;
user.Save();
}
catch(Exception e)
{
//snip
}
finally
{
if (user != null)
{
user.Dispose();
}
}
}
回答by Michal Romanczuk
check if you do not have UAC enabled alternatively you have to write the code to elevate your application privileges. This however restarts your application.
检查您是否没有启用 UAC,或者您必须编写代码来提升您的应用程序权限。但是,这会重新启动您的应用程序。