2010-09-16 24 views
9

ho questo codice per creare un utente locale di Windowscreare account utente locale

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; 
     } 

    } 

Ho provato questo sulla mia macchina funziona benissimo. ma poi lo metto su Windows Server. e ho provato a creare un utente laggiù.

Prima ho avuto l'errore "accesso generale negato" così ho fatto l'utente un amministratore

ma ora ottengo l'errore "il percorso di rete non è stato trovato"

come posso risolvere questo errore .. grazie

risposta

8

ho avuto un problema molto simile cambiare la prima linea a

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

vedere se questo risolve il problema. E controlla che il programma funzioni con i privilegi di amministratore.

L'altro problema potrebbe essere il server ha requisiti di complessità della password e password che viene passato alla funzione non soddisfa tali requisiti. Il problema scompare se lo passi come password? [email protected]!fda?

Sono sicuro al 90% che si tratti di uno di questi due problemi.


Per i gruppi di utenti che non salvano Non sono sicuro del perché. Ecco uno snippit di uno dei miei progetti che sta facendo la stessa cosa che sei. Non vedo la 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(); 
     } 
    } 
} 
+0

Se si dove un problema password di un PasswordExecption sarebbe stato gettato non un IOException –

+0

"il percorso di rete non è stato trovato" può anche essere un messaggio lanciato da COM –

+0

così questo funziona .... ma questo è non aggiungere gli utenti nel gruppo di utenti .... alcun aiuto ?? – user175084

0

controllare se non è abilitato UAC in alternativa, è necessario scrivere il codice per elevare i privilegi dell'applicazione. Ciò tuttavia riavvia la tua applicazione.

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

Problemi correlati