LoadUserProfile在不存在时不创建本地用户配置文件[C#]

时间:2009-09-25 20:49:11

标签: c#

我有一个工具,我用它以编程方式创建本地用户帐户,如下所示:

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()无法找到路径(显然 - 它不存在) - 我也手动检查,并且“新帐户的文档和设置。

任何人都有任何关于我做错的线索吗?

非常感谢任何帮助。 谢谢,

2 个答案:

答案 0 :(得分:0)

我认为这一切都是在admin下完成的 - 实际上它是一个运行LocalSystem执行任务的服务 - 它不具备完整的管理权限吗?如果我缺乏priveleges,我认为我会得到一些错误代码。

我还尝试将其作为ADMINISTRATOR本身(以交互式用户身份登录)运行,认为它可能与服务等有关......但是相同的结果 - 没有错误但是没有创建配置文件。

答案 1 :(得分:0)

我有同样的问题。我作为管理员运行,然后模拟为新创建的非管理员而不能LoadUserProfile,因为权限不足。如果在调用LoadUserProfile后调用Marshal.GetLastWin32Error(),则会收到错误1314:客户端未保留所需的权限。