从控制台应用程序更改用户的密码
本文关键字:用户 密码 控制台 应用程序 | 更新日期: 2023-09-27 17:50:58
我在写一个小小的c#代码。. NET 4)应用程序,将运行作为一个替代用户的"Shell",当登录到Windows Server 2012。除其他事项外,我想为用户提供更改自己的本地帐户密码的机会。
使用以下代码…
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?
更改用户密码是一项高权限操作,因为您不希望任何恶意代码在您不知情的情况下删除您的现有凭据。您可以使用
从命令提示符执行程序runas /user:<a-priviliged-user> <your-program>.exe
。它当然会提示您输入特权用户的密码。
这是一个有点浮华,但看看这个页面(虽然它是从Vista时代,它仍然是相关的)。
这个想法是创建一个带嵌入式凭据的计划任务,以运行具有足够凭据的应用程序,但实际上不安排任务运行。然后你可以按需运行它(例如在登录时):
'windows'system32'schtasks.exe /run /tn "task name"
正如我所说的:一个大杂牌,但它可能足以满足您的需求-程序将以管理员权限运行,而不会提示UAC。
编辑:我刚刚在Server 2012上尝试过,由于某种原因,我无法获得交互式运行的测试控制台应用程序(即用户可以看到程序运行)。我可能只是我,但它可能是行为已经改变在Server 2012和这个技巧可能不适合你的需要,如果你需要与用户交互
将清单添加到程序集以通过UAC(用户帐户控制)
在VS2010
中,您可以将清单文件添加到项目中。在"解决方案资源管理器"中打开"Right click your project
"文件,选择"Add
",然后选择"New item
"。在那里你可以找到Application Manifest File
。
修改它,使您得到以下内容之一:
- 正常
- 最高可用(取决于用户权限) <
- 管理权利/gh>
还有两个VS2010自带的工具,你可以使用:
- MageUI.exe(清单生成和编辑工具,图形客户端)
- Mage.exe (Manifest生成和编辑工具,命令行)