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,
¿Estás seguro de que ejecutas el programa en administración administrativa? –