C# 以编程方式更改AD中的密码时拒绝访问

C# 以编程方式更改AD中的密码时拒绝访问,c#,dll,active-directory,C#,Dll,Active Directory,我们已经设置了一个小库(DLL),用来更新AD中的密码。在我们的测试应用程序中测试这个应用程序时,它工作得非常好。但是,一旦我们开始在另一个应用程序中使用该库,我们就会在尝试更改密码时出现拒绝访问错误 当我们调用任何其他函数时,比如进行简单查找以查看用户是否存在的函数,一切正常 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, TargetDomainServer, TargetDomainContainer,

我们已经设置了一个小库(DLL),用来更新AD中的密码。在我们的测试应用程序中测试这个应用程序时,它工作得非常好。但是,一旦我们开始在另一个应用程序中使用该库,我们就会在尝试更改密码时出现拒绝访问错误

当我们调用任何其他函数时,比如进行简单查找以查看用户是否存在的函数,一切正常

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, TargetDomainServer, TargetDomainContainer, TargetDomainUser, TargetDomainPassword);
    UserPrincipalExt user = UserPrincipalExt.FindByIdentity(ctx, userLogonName);
    user.SetPassword(userPassword);

您知道我做错了什么吗?

您的测试应用程序可能是以管理员身份运行的。要么是因为它是从IDE运行的,要么是因为它有一个带有
requestedExecutionLevel
的清单

在WindowsVista和Windows7上,以普通用户身份登录时运行应用程序并不意味着进程不是以管理员身份运行的。有标记为
requestedExecutionLevel
的可执行文件的自动提升。通过右键单击并选择该选项,尝试以管理员身份运行测试应用程序


也有没有任何故意可执行标记的自动高程。Windows有已知安装程序的内部列表。它实际上通过版本信息和二进制签名来识别其中的一些,并尝试以管理员身份运行它们,以便安装真正成功。IIRC,另一种识别方法是文件名。名为
setup.exe
的可执行文件也被提升(只要
requestedExecutionLevel
不覆盖它)。

您的测试应用程序可能以管理员身份运行。因为它是从您的IDE运行的,或者因为它有一个清单,清单中有
requestedExecutionLevel
。我在所有情况下都是在同一个帐户下运行此解决方案。在Windows Vista和7上,这并不意味着进程不是以管理员身份运行的。有标记为
requestedExecutionLevel
的可执行文件的自动提升。尝试以管理员身份运行您的测试应用程序,方法是右键单击该应用程序并选择该应用程序。如果您添加该应用程序作为答案,我可以接受它。