2010-09-16 3 views
9

j'ai ce code pour créer une fenêtre locale utilisateurCréer un compte utilisateur 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; 
     } 

    } 

J'ai essayé sur ma machine, il fonctionne très bien. mais alors j'ai mis ceci sur le serveur de Windows. et essayé de créer un utilisateur là-bas.

J'ai d'abord l'erreur « accès général refusé erreur » donc je l'ai fait à l'utilisateur un administrateur

mais maintenant je l'erreur « Le chemin réseau n'a pas été trouvé »

comment puis-je résoudre ce erreur .. merci

Répondre

8

moi avons eu un problème très similaire changer la première ligne à

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

voir si cela résout votre problème. Et vérifiez que le programme fonctionne avec les privilèges d'administrateur.

L'autre problème pourrait être le serveur a des exigences de complexité de mot de passe et password qui est passé à la fonction ne répond pas à ces exigences. Le problème disparaît-il si vous le passez comme [email protected]!fda comme mot de passe?

Je suis sûr à 90% que c'est l'un de ces deux problèmes.


Pour vos groupes d'utilisateurs ne pas enregistrer je ne sais pas pourquoi. Voici un extrait d'un de mes projets qui fait la même chose que vous. Je ne peux pas voir la différence.

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 elle où un problème de mot de passe d'un PasswordExecption serait jeté pas IOException –

+0

« Le chemin réseau n'a pas été trouvé » peut aussi être un message lancé par COM –

+0

si cela fonctionne .... mais c'est ne pas ajouter les utilisateurs dans le groupe des utilisateurs .... toute aide ?? – user175084

0

Vérifiez si vous n'avez pas activé UAC ou si vous devez écrire le code pour élever vos privilèges d'application. Cela redémarre cependant votre application.

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

Questions connexes