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

标签 c# winpe

我正在编写一个 64 位 C# Windows 窗体应用程序,它将在 Windows PE 10 64 位下运行,以从 Active Directory 中提取显示名称。我必须使用 64 位,因为我运行它的 PC 只会启动 UEFI,所以我无法启动到 32 位恢复环境。每次我的代码到达某个位置时,我都会收到错误消息:Unknown Error [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 = 我想要显示名称的人的用户名
givenName = 我正在搜索的用户名的显示名称

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

关于为什么会发生这种情况有什么想法吗?

最佳答案

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

prefer 32-bit

在 VS 的构建选项卡上。

PS:本来只是评论,但目前我的声誉还不够

关于c# - UserPrincipal.FindByIdentity 在 64 位 WinPE 下的 C# 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58981598/

相关文章:

c# - 在 MVC 上执行编辑时如何保留某些字段的原始值?

c# - 带有 SelectedIndex 和 Value 的列表框错误?

c# - 带有嵌入式 IE11 Web 浏览器控件 (WPF) 的 ol3,鼠标单击事件不起作用

c# - 处理 LINQ 查询中的 NULL 参数

c# - 如果在 Linq 查询中抛出异常,则分配一个列值

.net - 从 CD 启动 .NET 应用程序?

windows - 您可以在 WinPE 环境中将哪些编程语言/平台用于 GUI?

batch-file - 批处理文件查找 USB 驱动器并更改驱动器号