我需要准时发送invoque命令(net share
,netsh
...),要求用户帐户启动的软件具有管理员权限。
在Unix版本中,我会在我的用户模式软件旁边安装一个小小的,谨慎编写的带有suid位的脚本,它会调用所需的命令。
Microsoft Windows下的等效最佳做法是什么?我特别感兴趣的是Vista友好但兼容XP的解决方案。
答案 0 :(得分:1)
一种方法可能是使用具有管理权限的服务。然后从您的应用程序中,告诉服务调用这些命令。我假设您不希望要求用户知道管理凭据。
答案 1 :(得分:1)
正如BobbyShaftoe所说,在Windows中解决此问题的规范方法是通过服务,因为默认情况下服务在LocalSystem帐户下执行。任何其他方法都需要以管理员用户身份登录,这需要凭据。
Vista需要的其他信息是,客户端应用程序需要通过某种形式的IPC与服务进行通信,这种形式可以跨越会话边界,因为在Vista上,控制台和服务位于不同的会话中。在这种情况下使用的常规IPC方法是命名管道。
相同的解决方案在XP中运行良好。
答案 2 :(得分:0)
您可以使用WinAPI函数LogonUser和CreateProcessAsUser以编程方式启动具有不同访问权限的新进程。
对于您的场景,我会编写一个包含所需net
命令的批处理脚本,如果需要,可以创建一个新的cmd.exe进程,该进程将脚本名称作为参数。
此解决方案要求您以某种方式将LogonUser中使用的凭据存储在应用程序中,因此可能存在安全风险。