我有一个工具,我用它以编程方式创建本地用户帐户,如下所示:
DirectoryEntry NewUser = dirEntryLocalMachine.Children.Add("UserName", "user");
NewUser.Invoke("SetPassword", new object[] { "Passsord" });
NewUser.Invoke("Put", new object[] { "Description", "Description" });
NewUser.CommitChanges();
帐户创建正常但此时用户配置文件不存在(没有HKEY CURRENT USER,没有文档和设置等等),我正在对此进行一些研究并找到以下MSDN文章说调用LoadUserProfile(...)实际上会创建配置文件,如果它不存在:
How To Programmatically Cause the Creation of a User's Profile
所以我添加了如下代码:
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);
现在,bLogon和bLoad都是正确的,没有异常发生,一切“似乎”工作正常...... profileInfo的内容没有更新(我会假设像.lpProfilePath这样的字段应该有好的值)并且GetUserProfileDirectory()无法找到路径(显然 - 它不存在) - 我也手动检查,并且“新帐户的文档和设置。
任何人都有任何关于我做错的线索吗?
非常感谢任何帮助。 谢谢,
答案 0 :(得分:0)
我认为这一切都是在admin下完成的 - 实际上它是一个运行LocalSystem执行任务的服务 - 它不具备完整的管理权限吗?如果我缺乏priveleges,我认为我会得到一些错误代码。
我还尝试将其作为ADMINISTRATOR本身(以交互式用户身份登录)运行,认为它可能与服务等有关......但是相同的结果 - 没有错误但是没有创建配置文件。
答案 1 :(得分:0)
我有同样的问题。我作为管理员运行,然后模拟为新创建的非管理员而不能LoadUserProfile,因为权限不足。如果在调用LoadUserProfile后调用Marshal.GetLastWin32Error()
,则会收到错误1314:客户端未保留所需的权限。