以管理员身份运行命令提示符

13

我正在开发一个小型的关机调度程序,在其中我必须将计算机置于"待机"模式。我使用的命令是:

Runtime.getRuntime().exec("cmd /c Powrprof.dll,SetSuspendState ");

我需要管理员权限来执行此命令,但我不知道如何获取。在搜索以前的答案时,我发现可以使用elevate.exe

Runtime.getRuntime().exec("c:/elevate Rundll32.exe Powrprof.dll,SetSuspendState ");

Elevate.exe正在执行任务,但是占用了太多时间,导致软件变慢。是否有其他更快的方法?我正在使用Netbeans IDE。


以管理员权限运行命令行 - Jayamohan
Windows的“关机”命令可能更适合您,因为它不需要管理员权限。要休眠:shutdown /h - mikeslattery
@mikeslattery,待机和休眠之间有区别,我想要待机。 - Rohan Kandwal
4个回答

11

@TechExchange 运行 runas /user:Administrator cmd.exe /c Powrprof.dll,SetSuspendState 命令需要输入管理员密码,而我没有该密码。 - Rohan Kandwal
@TechExchange 我的管理员账户没有密码,但是它要求输入密码。 - Rohan Kandwal
1
在没有管理员密码的情况下以管理员身份运行 - TheWhiteRabbit
有时候,用户必须像在runas帮助文档中看到的那样指定为domain\user。使用这种方法或以管理员身份运行对我没有起作用,在公司环境中,一个账户可能具有管理员权限,但如果它没有,就不可能获得管理员密码。在前一种情况下,命令仍然无法运行。以提升的访问级别运行似乎是解决方案。 - Deepak

10
你有几个选项:
A. 创建一个具有管理员权限的快捷方式。
该快捷方式将运行 cmd /c Rundll32.exe Powrprof.dll,SetSuspendState 你的Java代码将运行该快捷方式:
Runtime rt = Runtime.getRuntime();
rt.exec("cmd /c start \"\" \"myshortcut.lnk\"")

右键单击快捷方式图标 > 属性 > 高级 > 以管理员身份运行

B. 以管理员身份运行Java进程

同样,创建一个快捷方式并设置为以管理员身份运行。任何生成的进程也将具有管理员权限。您的Java代码将运行:

rt.exec("cmd /c Powrprof.dll,SetSuspendState")

C. 使用JNA直接调用SetSuspendState例程。Java进程将需要管理员权限(如B),但您不必生成进程。如果您喜欢这个方法,我可以提供源代码。
D. 使用wizmo实用程序: wizmo quiet standby

rt.exec("cmd /c start \"\" \"myshortcut.lnk\"") 但我必须将快捷方式设置为 cmd /c Rundll32.exe Powrprof.dll,SetSuspendState,但执行该命令需要很长时间。是否有任何方法可以提高执行速度? - Rohan Kandwal
好的,还有一件事,如果我想在 setsuspendstate 中使用 sleep 选项,那么我必须关闭 休眠。这将再次需要一个新的管理员快捷方式,因此需要两个弹出窗口进行确认。是否有一种方法可以在一个快捷方式或命令中完成此任务? - Rohan Kandwal
Wizmo工作得非常完美,它甚至还有更高级的选项。谢谢。 - Rohan Kandwal
有没有办法在使用快捷方式/lnk时获取命令的输出(在我的情况下是w32tm /query /configuration)?不幸的是似乎没有。 - owen gerig

6

添加参数 /savecred

runas /profile /user:Administrator /savecred

输入密码一次。将来的操作系统不会再要求您输入密码。


0

我正在使用Windows 10。不知道为什么,但runas不起作用,也没有报告任何错误。

我在superuser.com上找到了这个答案:

    powershell -Command "Start-Process 'cmd.exe /c Powrprof.dll,SetSuspendState ' -Verb runAs"
  • 如果您有权限提升,则无需密码。
  • 客户端机器上不需要快捷方式
  • 不依赖于runas
  • 需要powershell

根据在serverfault.com上找到的答案,自Windows 8和Windows Server 2008 R2以来,默认情况下在Windows上安装了Powershell。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接