以编程方式创buildWindows用户c#.net(使用PricinpalUser / CreateProfile)

简而言之,我试图做的是创build一个新的用户,它有能力login。

我从各种来源摘取代码,并试图简化它。 但是,我遇到了一些绊脚石。

当我调用UserPrincipal.Save() – 它给我一个错误

“在caching中找不到目录属性”,exceptiontypes为“COMException交叉本地/pipe理边界”。

出于某种原因,当我直接运行我的程序(不通过VS2010),它工作正常。 所以我可以解决这个问题!

我的主要问题是,尽pipe一切似乎都没有问题,但是当我尝试login时,却出现了“加载桌面”的信息,不pipe是什么,只是说“注销”。 所以就好像该configuration文件没有正确设置。

API“CreateProfile”的返回值不是0,所以也许会造成问题。

还有什么我需要做的?

我的代码是…

 private void Run(string un, string pw) { UserPrincipal NewUP = CreateUser(un, pw); AddGroup(NewUP, "Users"); AddGroup(NewUP, "HomeUsers"); CreateProfile(NewUP); } private UserPrincipal CreateUser(string Username, string Password) { PrincipalContext pc = new PrincipalContext(ContextType.Machine, Environment.MachineName); UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, Username); if (up == null) { up = new UserPrincipal(pc, Username, Password, true); up.UserCannotChangePassword = false; up.PasswordNeverExpires = false; up.Save(); // this is where it crashes when I run through the debugger } return up; } private void AddGroup(UserPrincipal Up, string GroupName) { PrincipalContext pc = new PrincipalContext(ContextType.Machine, Environment.MachineName); GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, GroupName); if (!gp.Members.Contains(Up)) { gp.Members.Add(Up); gp.Save(); } gp.Dispose(); } private void CreateProfile(UserPrincipal Up) { int MaxPath = 240; StringBuilder pathBuf = new StringBuilder(MaxPath); uint pathLen = (uint)pathBuf.Capacity; int Res = CreateProfile(Up.Sid.ToString(), Up.SamAccountName, pathBuf, pathLen); } 

Solutions Collecting From Web of "以编程方式创buildWindows用户c#.net(使用PricinpalUser / CreateProfile)"