2009-09-25 15 views
5

Mam narzędzie, które używam do programowego tworzenia lokalnych kont użytkowników, co następuje:LoadUserProfile nie tworząc lokalny profil użytkownika, gdy nie istnieje [C#]

DirectoryEntry NewUser = dirEntryLocalMachine.Children.Add("UserName", "user"); 
NewUser.Invoke("SetPassword", new object[] { "Passsord" }); 
NewUser.Invoke("Put", new object[] { "Description", "Description" }); 
NewUser.CommitChanges(); 

Konto jest tworzone w porządku, ale w tym momencie profil użytkownika nie istnieje (brak HKEY CURRENT USER, no Documents & Ustawienia, itd ...), robiłem pewne badania tego i znalazłem następujący artykuł MSDN, który mówi, że wywołanie LoadUserProfile (...) faktycznie stworzy profil jeśli nie istnieje:
How To Programmatically Cause the Creation of a User's Profile

Więc dodałem kod w następujący sposób:

IntPtr hToken = IntPtr.Zero; 
bool bLogon = LogonUser(
     sName, 
     sDomain, 
     sPassword, 
     LOGON32_LOGON_NETWORK, 
     LOGON32_PROVIDER_DEFAULT, 
     out hToken 
     ); 

PROFILEINFO profileInfo = new PROFILEINFO();  
profileInfo.dwSize = Marshal.SizeOf(profileInfo); 
profileInfo.dwFlags = 1; 
profileInfo.lpUserName = sName; 
bool bLoad = LoadUserProfile(hToken, ref profileInfo); 

Teraz zarówno bLogon i bLoad są prawdziwe, nie występują żadne wyjątki, wszystko „wydaje się”, aby działać poprawnie ... Zawartość profileInfo nie są aktualizowane (I would założyłem, że pole jak .lpProfilePath powinno mieć dobre wartości) i GetUserProfileDirectory() nie może znaleźć ścieżki (oczywiście - nie istnieje) - Sprawdzam również ręcznie i nie ma nic w "ustawieniach dokumentów" dla nowego konta "ustawienia &".

Ktoś ma jakieś wskazówki co do tego, co robię źle?

Każda pomoc będzie mile widziana. Dzięki,

+0

Czy na pewno uruchamiasz program w administracji administracyjnej? –

Odpowiedz

0

Zakładam, że to wszystko odbywa się pod adminem - w rzeczywistości jest to usługa działająca jako LocalSystem wykonujący zadanie - czy nie ma pełnych uprawnień administratora? A jeśli brakowało mi aptek, zakładam, że dostanę jakiś kod błędu.

Próbowałem również uruchomić to jako ADMINISTRATOR sam (zalogowany jako interakcyjny użytkownik) myśląc, że może mieć coś wspólnego z Usługą, itp ... Ale te same wyniki - bez błędów, ale profil nie jest tworzony.

0

Mam ten sam problem. Pracuję jako administrator, a następnie podszywam się jako nowo utworzony użytkownik niebędący administratorem i nie mogę załadować LoadUserProfile z powodu niewystarczających uprawnień. Jeśli wywołasz Marshal.GetLastWin32Error() po wywołaniu do LoadUserProfile, otrzymasz błąd 1314: Wymagany przywilej nie jest przechowywany przez klienta.

Powiązane problemy