2010-09-16 21 views
9

tengo este código para crear un usuario de Windows localescrear cuenta de usuario local

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 intentado esto en mi máquina funciona bien. pero luego puse esto en el servidor de Windows. e intentado crear un usuario allí.

En primer lugar me dieron el error "Acceso general denegado error" así que hice el usuario administrador

pero ahora me sale el error "La ruta de red no se encontró"

¿Cómo puedo solucionar este de error .. gracias

Respuesta

8

que tenían un problema muy similar cambiar la primera línea de

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

ver si se soluciona el problema. Y compruebe tres veces si el programa se está ejecutando con privilegios de administrador.

El otro problema podría ser que el servidor tiene requisitos de complejidad de contraseña y password que se está transfiriendo a la función no cumple con esos requisitos. ¿El problema desaparece si lo pasa [email protected]!fda como la contraseña?

Estoy 90% seguro de que es uno de esos dos problemas.


Para sus grupos de usuarios no guardar No estoy seguro de por qué. Aquí hay un snippit de uno de mis proyectos que está haciendo lo mismo que tú. No puedo ver la diferencia.

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

Si un problema donde la contraseña de un PasswordExecption no sería arrojado una IOException –

+0

"No se encontró la ruta de red" también puede ser un mensaje lanzado por el COM –

+0

por lo que este funciona .... pero esto es no agregando los usuarios en el grupo de usuarios ... ¿Alguna ayuda? – user175084

0

Compruebe si no tiene habilitado el UAC o bien tiene que escribir el código para elevar los privilegios de la aplicación. Sin embargo, esto reinicia su aplicación.

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

Cuestiones relacionadas