尝试设置本地计算机帐户密码时出现未知错误(0x80005000)

时间:2012-03-09 14:37:32

标签: c# passwords .net-2.0 account

我正在编写一个csharp Windows窗体应用程序,它试图检查是否存在本地帐户,如果找到则设置密码。几个关键点:

  • 我为本地帐户执行此操作 - 不是Active Directory帐户。这些计算机不是Windows AD域的成员。

  • 我必须使用setpassword而不是更改密码,因为更改密码要求您知道以前的密码,在某些情况下我不知道。 Setpassword应该允许您选择新密码而不必知道旧密码

  • 该应用程序将由大约50名用户运行,使用各种操作系统从Windows XP一直到Windows Server 2008 R2。因为我无法预测.net的操作系统和版本是什么,所以我将目标框架设置为.net 2.0。

  • 我希望我的用户目前以管理员身份运行,所以我不认为权限是个问题。我可以很好地创建用途我只能在现有帐户上设置密码。

这是我的代码:

    public void VerifiyAccount()
    {
        String username = "specialaccount";
        String password = "SuperSecretPassw0rd!";

        if (CheckIfAccountExists(username))
        {
            MessageBox.Show("User Account all ready exists.");
            SetUserPassword(password);

        }
        else
        {
            MessageBox.Show("User Account does not exist");
            CreateUserAccount(username, password);
        }
    }

    public void SetUserPassword(string newPassword)
    {
        try
        {
            DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName + ", specialaccount");
            hostMachineDirectory.Invoke("SetPassword", newPassword);
            hostMachineDirectory.CommitChanges();
            hostMachineDirectory.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

这是我收到的错误:


未知错误(0x80005000)

确定

我无法弄清楚为什么我会收到上述错误,尽管谷歌搜索和搜索堆栈溢出我无法找到任何解释。我发现的大多数示例都围绕连接到Active Directory而不是本地帐户。或者正在使用更新的.net 4.0功能。我必须相信,如果我可以创建一个帐户,我应该能够在帐户上设置密码。关于我可能做错的任何想法或建议?

由于 布拉德

1 个答案:

答案 0 :(得分:2)

使用ActiveDirectory库时,我遇到了类似的混淆错误。我发现非常有帮助的是使用Microsoft Network Monitor来跟踪发送到LDAP或从LDAP发送的消息。通常,发回的错误消息有更多细节。

编辑:我建议您使用以下内容来帮助调试您的通信问题:

  • 放置一个断点并将您的应用运行到CommitChanges
  • 的位置
  • 启动Microsoft网络监视器(开始捕获)
  • 执行CommitChanges
  • 停止Microsoft网络监视器中的当前捕获

此时,您可以滚动浏览消息以查看呼叫发生的位置。

EDIT2 :这是对DirectoryEntry.Path的引用。它显示用于连接到用户的WinNT格式:

  

WinNT://<域名> /<计算机名称> /<用户名>