UserPrincipal.FindByIdentity在64位WinPE下的C#中失败

时间:2019-11-21 18:34:11

标签: c# winpe

我正在编写一个64位C#Windows窗体应用程序,该应用程序将在64位Windows PE 10下运行,以从Active Directory中提取显示名称。我必须使用64位,因为运行此程序的PC仅会引导UEFI,因此我无法引导至32位恢复环境。每当我的代码到达某个位置时,我都会收到错误消息:未知错误[0x80005000]。如果我对此进行编译并在32位Windows PE 10中运行,则它可以很好地运行,除了编译32位以外无需对代码进行任何修改。

我正在使用VS2019,代码正在使用.NET v4.7。

下面是我正在使用的代码:

    using (PrincipalContext ad = new PrincipalContext(ContextType.Domain, 
        "dotted.domain.com", "OU=Users,DC=dotted,DC=domain,dc=com", 
        ContextOptions.Negotiate, main.interactiveUser, main.interactivePwd))
    {
        try
        {
            //this is where it fails
            using (UserPrincipal wantedUser = UserPrincipal.FindByIdentity(ad, combo1.Text))
            {
                if (wantedUser != null)
                {
                    givenName = wantedUser.DisplayName;
                }
                else
                {
                    MessageBox.Show("User name not found in AD.  Please locate manually", 
                        "Error finding name", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    givenName = "DisplayNameNotFoundInAD";
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            break;
        }
    }

这是我的变量的含义:

dotted.domain.com =我的域的名称
main.interactiveUser =要使用另一种形式登录域的用户名
main.interactivePwd =所述用户名的密码
combo1.Text =组合框中的文本,该文本具有我要搜索的用户名
wantedUser =我想要显示名称的人的用户名
namedName =我正在搜索的用户名的显示名称

无论是否使用OU = Users,我都尝试过相同的结果。如果我在Windows中正常运行,它也可以正常工作。我发现了其他一些有关可能使用所有者信息编辑注册表的帖子,没什么区别。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

过去在访问64位WinPE中的注册表时也遇到类似的问题。据我了解,这正是PrincipalContext所做的。 就我而言,我必须取消选中

  

首选32位

在VS的“构建”选项卡上

PS:本来只能发表评论,但目前我的声誉不够