以下适用于Windows的多个服务器版本,以及Windows 7专业版和其他版本,但在Windows 10(至少两台机器)上,我收到错误:“系统找不到指定的文件。\ r \ n”。错误源是“Active Directory”
System.IO.FileNotFoundException:系统找不到指定的文件。
堆栈追踪:
at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADs.Get(String bstrName)
at System.DirectoryServices.AccountManagement.CredentialValidator.BindSam(String target, String userName, String password)
at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)
at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)
at IsValidWindowsUser(String userName, String password) in MembershipProvider.cs:line xxx
以下是触发错误所需的最少代码量。在这种情况下,我使用的是ValidateCredentials(),但其他操作(如PrincipalSearches)也会因完全相同的错误而失败。
我已使用LogonUser()验证凭据是否有效; https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx
bool IsValidWindowsUser(string userName, string password)
{
using (var p = new PrincipalContext(ContextType.Machine))
return p.ValidateCredentials(userName, password);
}
重要位置:我发现这个WAS适用于两个Windows 10系统,但从那时起,两个系统的硬盘都被固态驱动器取代。操作系统移动是使用磁盘映像软件完成的,操作系统上的其他所有操作都完好无损。我知道磁盘/分区签名已更改。这会破坏/损坏凭证商店吗? Windows 7专业版计算机也更换了驱动器,但它仍然按预期工作。
可能相关的另一个老问题是:Validate a users credentials on the local machine
这个问题似乎也与PrincipalContext(ContextType.Machine)讨论了一个FileNotFoundException异常,但前提是没有网络连接。在我的情况下,始终存在网络连接。我会使用LogonUser,但我还需要测试组成员身份。
答案 0 :(得分:3)
答案是在StackOverFlow上找到的.... System.DirectoryServices.AccountManagement.PrincipalContext broken after Windows 10 update
感谢Doogal
相关位......
问题是由于缺少注册表项引起的 HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \微软\的Windows NT \ CurrentVersion,特别是:RegisteredOwner和 RegisteredOrganization
填充这些键,它应该工作。我甚至不需要重新启动我的应用程序。
在有人问之前,是的,我经常多次搜查......
答案 1 :(得分:1)
取消选中项目属性窗口中“首选32位”复选框,默认情况下会选中它 - 请参阅屏幕截图。这为我修好了!再次选中该复选框将导致您描述的例外重新出现。