過去数年間、この小さな機能を問題なく使用してユーザー資格情報を検証してきました。 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:システムは指定されたファイルを見つけることができません。
マシンの更新以外は何も変更されていません。過去数日間、ネットで問題の原因を探していました。
原因は何か、可能であれば解決策を特定した経験はありますか?
前回のビルドにマシンをロールバックし始める前の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)を追加した後、それらの値を編集します。ユーザー名と会社名をそれぞれ使用できます。
Uncheckプロジェクトのプロパティウィンドウの下にある32ビット優先チェックボックス[ビルド]タブ。デフォルトでチェックされています-スクリーンショットを参照してください。これは私のためにそれを修正しました!チェックボックスを再度オンにすると、説明した例外が再表示されます。私はこれが可能であれば64ビットモードで実行することを強制し、したがってWOW6432Nodeレジストリパスではなく64ビットレジストリパスを使用するため、必要な正しいキーを見つけると推測しています。
build platform target to "AnyCPU"を変更してみてください。プラットフォームターゲットがx86の場合、この問題があります。
なぜ、まだわからないのに、10個のバグに勝つように見えるのか!!!