C# – 无法使用Windows 10上的PrincipalContext(ContextType.Machine):系统找不到指定的文件

以下几个Windows版本的服务器版本,Windows 7专业版和其他版本,但在Windows 10(至less两台机器),我得到的错误:“系统找不到指定的文件\ r \ n”。 错误来源是“活动目录

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()validation了凭据的有效性。 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专业版的电脑也更换了它的驱动器,但它仍然按照预期工作。

另一个可能相关的老问题是: validation本地机器上的用户凭证

这个问题似乎也谈到了一个与PrincipalContext(ContextType.Machine)的FileNotFoundExceptionexception,但只有当没有networking连接。 在我的情况下总是有一个networking连接。 我会使用LogonUser,但我也需要testing组成员资格。

Solutions Collecting From Web of "C# – 无法使用Windows 10上的PrincipalContext(ContextType.Machine):系统找不到指定的文件"

并且在StackOverFlow上找到了答案… Windows 10更新后System.DirectoryServices.AccountManagement.PrincipalContext被破坏

感谢Doogal

相关位…

该问题是由于缺少HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows NT \ CurrentVersion中的注册表项导致的,具体为:RegisteredOwner和RegisteredOrganization

填充这些键,它应该工作。 我甚至不必重新启动我的应用程序。

在任何人问起之前,是的,我搜索了很多次,还有很多方法。

在Build选项卡下的项目属性窗口中取消选中首选32位”复选框,默认情况下将其选中 – 请参阅截图。 这为我修好了! 再次选中复选框会导致您描述的异常重新出现。

取消选中“首选32位”屏幕截图