2009-09-25 9 views
5

tengo una herramienta que utilizo para crear mediante programación cuentas de usuarios locales de la siguiente manera:LoadUserProfile no crear el perfil de usuario local cuando no existe [C#]

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

La cuenta se crea bien, pero en en este momento el perfil de usuario no existe (no HKEY CURRENT USER, no Documents & Settings, etc ...), estaba investigando esto y encontré el siguiente artículo de MSDN que dice que llamar a LoadUserProfile (...) creará realmente el perfil si no existe:
How To Programmatically Cause the Creation of a User's Profile

por lo que añade el código de la siguiente manera:

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

Ahora, tanto bLogon y BLOAD son ciertas, no se producen excepciones, todo "parece" que funciona bien ... El contenido de profileInfo no se actualizan (lo haría ha asumido campo como .lpProfilePath debe tener buenos valores) y GetUserProfileDirectory() no puede encontrar la ruta (obviamente, no existe) - También verifico manualmente y no hay nada bajo "documentos & configuraciones" para la nueva cuenta.

¿Alguien tiene alguna pista de lo que estoy haciendo mal?

Cualquier ayuda sería muy apreciada. Gracias,

+0

¿Estás seguro de que ejecutas el programa en administración administrativa? –

Respuesta

0

Supongo que todo esto se hace bajo administración. En realidad, se trata de un servicio que se ejecuta como LocalSystem realizando la tarea: ¿no tiene derechos de administrador completos? Y si carecía de privilegios supongo que obtendría un código de error de algún tipo.

También intenté ejecutar esto como ADMINISTRATOR en sí mismo (inicié sesión como usuario interactivo) pensando que podría tener algo que ver con el Servicio, etc ... Pero los mismos resultados: no hay errores, pero el perfil no se ha creado.

0

Tengo el mismo problema. Me desempeño como administrador, luego me suplante como un administrador no administrador recién creado y no puedo LoadUserProfile, debido a permisos insuficientes. Si llama al Marshal.GetLastWin32Error() después de llamar a LoadUserProfile, obtendrá un error 1314: el cliente no tiene un privilegio requerido.

Cuestiones relacionadas