2010-09-16 3 views
9

ich habe diesen Code einen lokalen Windows-Benutzerlokales Benutzerkonto erstellen

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

    } 

ich das es gut funktioniert auf meiner Maschine versucht, zu erstellen. aber dann setze ich das auf windows server. und habe versucht, dort einen Benutzer zu erstellen.

Zuerst bekam ich den Fehler „Allgemeiner Zugriff verweigert Fehler“ so machte ich den Benutzer ein Administrator

aber jetzt habe ich den Fehler „Der Netzwerkpfad wurde nicht gefunden“

wie kann ich dieses Problem lösen Fehler .. dank

Antwort

8

hatte ich ein sehr ähnliches Problem in der ersten Zeile ändern, um

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

sehen, ob das das Problem behebt. Und überprüfen Sie dreimal, ob das Programm mit Administratorrechten läuft.

Das andere Problem könnte sein, dass der Server Anforderungen an die Kennwortkomplexität hat und password, der in die Funktion übergeben wird, diese Anforderungen nicht erfüllt. Geht das Problem weg, wenn Sie es als Passwort [email protected]!fda übergeben?

Ich bin 90% sicher, dass es eines dieser zwei Probleme ist.


Für Ihre Benutzergruppen nicht speichern, ich bin mir nicht sicher warum. Hier ist ein Ausschnitt aus einem meiner Projekte, der dasselbe macht wie du. Ich kann den Unterschied nicht sehen.

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

Wenn es wo ein Passwort Problem ein PasswordExecption keine IOException –

+0

„Der Netzwerkpfad wurde nicht gefunden“ auch eine Botschaft –

+0

geworfen würde durch COM geworfen werden kann, so das funktioniert .... aber das ist nicht die Benutzer in der Benutzergruppe hinzufügen .... irgendeine Hilfe? – user175084

0

überprüfen Sie, ob Sie nicht UAC aktiviert haben, alternativ müssen Sie den Code schreiben, um Ihre Anwendungsrechte zu erhöhen. Dies startet jedoch Ihre Anwendung neu.

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