我正在编写一个小型 C# (.NET 4) 应用程序,它将在登录到 Windows Server 2012 时作为用户“Shell”的替代品运行。除此之外,我想为用户提供更改他们自己的本地帐户的密码。
使用以下代码..
DirectoryEntry directory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry userEntry = directory.Children.Find(username);
userEntry.Invoke("SetPassword", new object[] { newPassword });
userEntry.CommitChanges();
...如果代码是从提升的命令提示符启动的,则可以正常工作。但是,由于 Shell 替换作为“普通”应用程序运行,我得到一个
访问被拒绝
代码运行时出现异常,即使用户设置为本地管理员。
是否有任何代码或机制可以用来以编程方式设置用户自己的本地帐户密码而无需提升?或者(我知道这可能更像是一个 ServerFault 问题:)以任何方式将“替换外壳”作为提升的进程运行而无需禁用 UAC?