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

UserPrincipal.FindByIdentity在64位WinPE下的C#中失败,c#,winpe,C#,Winpe,我正在编写一个64位C#Windows窗体应用程序,它将在Windows PE 10 64位下运行,以从Active Directory中提取显示名称。我必须使用64位,因为我运行此功能的电脑只会启动UEFI,因此我无法启动到32位恢复环境。每次代码到达某个位置时,我都会收到错误消息:未知错误[0x80005000]。如果我编译它并在32位WindowsPE10中运行,它运行得很好,除了编译32位代码外,对代码没有任何修改 我使用的是VS2019,代码使用的是.NET v4.7 以下是我正在使用

我正在编写一个64位C#Windows窗体应用程序,它将在Windows PE 10 64位下运行,以从Active Directory中提取显示名称。我必须使用64位,因为我运行此功能的电脑只会启动UEFI,因此我无法启动到32位恢复环境。每次代码到达某个位置时,我都会收到错误消息:未知错误[0x80005000]。如果我编译它并在32位WindowsPE10中运行,它运行得很好,除了编译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;
        }
    }
以下是我的变量的含义:

dotterd.domain.com=我的域名
main.interactiveUser=从其他表单登录域的用户名
main.interactivePwd=所述用户名的密码
combo1.Text=组合框中包含我要搜索的用户名的文本
wantedUser=我想要显示姓名的人的用户名
givenName=我正在搜索的用户名的显示名称

我尝试过使用和不使用OU=用户,结果都是一样的。如果我在Windows中正常运行,它也可以正常工作。我发现了一些关于可能用所有者信息编辑注册表的帖子,这没有什么区别


你知道为什么会发生这种情况吗?

过去在64位WinPE中访问注册表时遇到过类似的问题。根据我的理解,这正是PrincipalContext所做的。 在我的情况下,我必须取消选中

喜欢32位

在VS中的“生成”选项卡上


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

我这么做了,但问题依然存在。如果我让它是“任意cpu”,并保留“首选32位”复选框,那么程序在WinPE中根本不会启动。如果我直接编译x64,或者取消选中“Preference 32-bit”,就会出现我在原始帖子中提到的错误。我知道你必须为WinPE 64使用一套完全不同的软件包。您是否有可能在PE构建脚本中意外地留下了32位包的路径,或者可能遗漏了一个包?我尝试重新创建我的64位PE环境,只加载了64位.NET framework、脚本和WMI OCs。还是会出错。再次重建,并添加了除我知道我不需要的OCs和许多我知道我不需要的OCs之外的所有内容。所有操作仍然失败,并出现相同的错误。当我重新创建PE环境时,我只对OCs和原始内容使用amd64。