DirectoryEntry.Invoke() 在“ChangePassword”调用中引发错误
Posted
技术标签:
【中文标题】DirectoryEntry.Invoke() 在“ChangePassword”调用中引发错误【英文标题】:DirectoryEntry.Invoke() throws error on "ChangePassword" call 【发布时间】:2010-07-30 12:27:27 【问题描述】:DirectoryEntryObject.Invoke("ChangePassword", new object[] oldPassword, newPassword );
抛出以下错误:
"System.Reflection.TargetInvocationException: 异常已被 调用的目标。 ---> System.Runtime.InteropServices.COMException (0x80020005):类型不匹配。 (来自 HRESULT 的异常:0x80020005 (DISP_E_TYPEMISMATCH)) --- 内部异常堆栈跟踪结束 --- 在 System.DirectoryServices.DirectoryEntry.Invoke(字符串 方法名,对象[] 参数)
这与 AD 中的任何设置有关还是我遗漏了什么?
【问题讨论】:
使用任何参考参数的“ChangePassword”功能? @cevik,不确定我是否理解了这个问题。但是,它的调用方式如下:- userEntry.Invoke("ChangePassword", new object[] "MyOldPassword", "MyNewPassword" ); 你真正在谈论的底层类是什么? 您是以管理员身份运行它还是以具有足够权限来更改帐户密码的帐户运行它? @Lasse,检查msdn.microsoft.com/en-us/library/Aa746340 和msdn.microsoft.com/en-us/library/aa746341。 【参考方案1】:有一个名为 Managing User Passwords 的 MSDN 页面,其中包含一些如何从 C# 调用 ChangePassword
的示例。具体示例显示如下语法:
usr.Invoke("ChangePassword", OldSecurelyStoredPassword, NewSecurelyStoredPassword);
我怀疑这是因为您正在调用它并传入一个对象数组,而不是显式传递两个字符串(您在评论中链接到的文档表明它希望传递两个字符串,一个作为输入参数和一个作为输出参数。试试这个:
var oldPassword = "TheOldPassword";
var newPassword = "TheNewPassword";
DirectoryEntryObject.Invoke("ChangePassword", oldPassword, newPassword);
【讨论】:
还有另一个 MSDN 页面msdn.microsoft.com/en-us/library/…。而这个 Invoke() 方法采用 object[]。这也被公司中的少数其他应用程序使用。我不确定为什么这不起作用。 @Ashish,这一切都很好,但是您是否尝试过我自己和 Lasse 的建议? 而且,您是说您在其他应用程序中有调用 ChangePassword 方法,传入一个对象数组并且是否工作? “你是说你在其他应用程序中有调用 ChangePassword 方法的代码,传入一个对象数组并且确实有效吗?”答案是“是”。 那么“你尝试过我和 Lasse 的建议了吗?” ? @Rob,我有同样的问题,使用两个单独的字符串参数而不是 object[] 没有帮助。以上是关于DirectoryEntry.Invoke() 在“ChangePassword”调用中引发错误的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记