gpt4 book ai didi

c# - 如何以编程方式在 Windows 7 或 Windows Server 2008 上创建 Windows 用户帐户?

转载 作者:太空狗 更新时间:2023-10-29 20:18:13 24 4
gpt4 key购买 nike

我一直在尝试在 Windows 7 机器上创建新的本地用户帐户。我使用了 System.DirectoryServices.DirectoryEntry 类(如 here 中所示),但它似乎不起作用。

文章中的代码如下:

static void Main(string[] args)
{
try
{
DirectoryEntry AD = new DirectoryEntry("WinNT://" +
Environment.MachineName + ",computer");
DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");
NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
NewUser.CommitChanges();
DirectoryEntry grp;

grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}
Console.WriteLine("Account Created Successfully");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();

}
}

执行这一行时

DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");

我得到一个

System.Runtime.InteropServices.COMException 与“{“未知错误 (0x80005000)”

作为异常信息,-2147463168作为错误代码。

我猜这可能是因为这篇文章针对的是 Windows XP 及以下机器,而我针对的是 Windows 7 和 Windows Server 2008。

感谢任何帮助!

更新:
由于某些神秘原因,我不再看到 System.Runtime.InteropServices.COMException,但是,在此处提交更改时 newuser.CommitChanges(),我收到“UnAuthorizedAccessException”。我尝试以管理员身份运行应用程序,但仍然无法正常工作。

更新 2:
好的,在更改为 UserPrincipal 类后,我得到了以下代码:

public UserPrincipal CreateNewUser(string sUserName, string sPassword)
{
// first check that the user doesn't exist
if (GetUser(sUserName) == null)
{
PrincipalContext oPrincipalContext = GetPrincipalContext();

UserPrincipal oUserPrincipal = new UserPrincipal(oPrincipalContext);
oUserPrincipal.Name = sUserName;
oUserPrincipal.SetPassword(sPassword);
//User Log on Name
//oUserPrincipal.UserPrincipalName = sUserName;
oUserPrincipal.Save();

return oUserPrincipal;
}

// if it already exists, return the old user
return GetUser(sUserName);
}
}


当我将它作为控制台应用程序运行时,这段代码运行良好 - 当然以管理员身份运行 - 但是当我将它部署为 Windows 服务时,安全帐户设置为“LocalSystem”,我得到一个 InvlaidOperationException说“底层商店不支持此属性”

想法?

最佳答案

好的,如果您检查我的上次更新,则以下代码片段有效:

public UserPrincipal CreateNewUser(string sUserName, string sPassword)
{
// first check that the user doesn't exist
if (GetUser(sUserName) == null)
{
PrincipalContext oPrincipalContext = GetPrincipalContext();

UserPrincipal oUserPrincipal = new UserPrincipal(oPrincipalContext);
oUserPrincipal.Name = sUserName;
oUserPrincipal.SetPassword(sPassword);
//User Log on Name
//oUserPrincipal.UserPrincipalName = sUserName;
oUserPrincipal.Save();

return oUserPrincipal;
}

// if it already exists, return the old user
return GetUser(sUserName);
}
}

作为控制台应用程序工作,但在部署为 Windows 服务时由于安全异常而无法执行。一种解决方案是信任该程序集(Windows 服务程序集),以便 .net 安全性允许它运行。大功告成,现在一切都很酷!

关于c# - 如何以编程方式在 Windows 7 或 Windows Server 2008 上创建 Windows 用户帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com