создать учетную запись локального пользователя - PullRequest
10 голосов
/ 16 сентября 2010

У меня есть этот код для создания локального пользователя 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;
        }

    }

Я попробовал это на моей машине, она работает нормально.но потом я положил это на сервере Windows.и попытался создать там пользователя.

Сначала я получил ошибку "Ошибка общего доступа запрещена", поэтому я сделал пользователя администратором

, но теперь я получаю ошибку "Сетевой путьне найдено "

как я могу решить эту ошибку .. спасибо

Ответы [ 2 ]

10 голосов
/ 16 сентября 2010

У меня была очень похожая проблема, измените первую строку на

PrincipalContext context = new PrincipalContext(ContextType.Machine, "127.0.0.1");

, посмотрите, решит ли это вашу проблему.И трижды проверьте, что программа работает с правами администратора.

Другая проблема, которая может возникнуть, заключается в том, что к серверу предъявляются требования к сложности пароля, а password, который передается функции, не отвечает этим требованиям.Проблема исчезнет, ​​если вы передадите ее ASfas123@!fda в качестве пароля?

Я на 90% уверен, что это одна из этих двух проблем.


Для ваших групп пользователей не сохраняетсяЯ не уверен почему.Вот фрагмент одного из моих проектов, который делает то же самое, что и вы.Я не вижу разницы.

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();
        }
    }
}
0 голосов
/ 09 ноября 2014

проверьте, не включен ли UAC. В противном случае вам нужно написать код для повышения привилегий вашего приложения.Это, однако, перезапускает ваше приложение.

http://support.microsoft.com/kb/981778

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...