web-dev-qa-db-ja.com

Windows 10の更新後に壊れたSystem.DirectoryServices.AccountManagement.PrincipalContext

過去数年間、この小さな機能を問題なく使用してユーザー資格情報を検証してきました。 createPrincipalContextメソッドは、ContextType.Machineとマシン名を含むPrincipalContextを返します。

public static bool ValidateCredentials(string username, string password, string domain = null) {
    try {
        using (var principalContext = createPrincipalContext(username, domain)) {
            username = GetLoginInfo(username).Username;
            // validate the credentials
            if (principalContext.ValidateCredentials(username, password)) {
                //once valid check if account is enabled
                using (UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, username)) {
                    return user.Enabled.GetValueOrDefault(false);
                }
            }
        }
    } catch (PrincipalOperationException e) {
        traceError(e);
    } catch (Exception e) {
        traceError(e);
    }
    return false;
}

私の開発マシンは、最近この最新のWindows 10に自動的に更新され、それ以来、principalContext.ValidateCredentialsは次の例外をスローしています。

System.IO.FileNotFoundException:システムは指定されたファイルを見つけることができません。

マシンの更新以外は何も変更されていません。過去数日間、ネットで問題の原因を探していました。

原因は何か、可能であれば解決策を特定した経験はありますか?

33
Nkosi

前回のビルドにマシンをロールバックし始める前の1つの最後のGoogleで、これを見つけました https://connect.Microsoft.com/IE/feedback/details/1904887/windows-10-insider-preview-build- 10565

この問題は、HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersionのレジストリエントリが欠落しているために発生します。具体的には、RegisteredOwnerおよびRegisteredOrganization

[〜#〜] edit [〜#〜]:Windows Rを押し、regedit.exeと入力してレジストリエディターを実行します。上記の場所を参照します

レジストリエディターでCurrentVersionを右クリックし、[新規]> [文字列値]を選択します。各エントリ(RegisteredOwnerおよびRegisteredOrganization)を追加した後、それらの値を編集します。ユーザー名と会社名をそれぞれ使用できます。

49
Doogal

Uncheckプロジェクトのプロパティウィンドウの下にある32ビット優先チェックボックス[ビルド]タブ。デフォルトでチェックされています-スクリーンショットを参照してください。これは私のためにそれを修正しました!チェックボックスを再度オンにすると、説明した例外が再表示されます。私はこれが可能であれば64ビットモードで実行することを強制し、したがってWOW6432Nodeレジストリパスではなく64ビットレジストリパスを使用するため、必要な正しいキーを見つけると推測しています。

「32ビットを優先」スクリーンショットをオフにする

14
Kris

build platform target to "AnyCPU"を変更してみてください。プラットフォームターゲットがx86の場合、この問題があります。

なぜ、まだわからないのに、10個のバグに勝つように見えるのか!!!

2
Joseph