Windows:使用CMD(或Java)从非特权执行特权命令

问题描述:

我将以管理员身份运行并监听端口的服务。我的GUI程序将与管理员服务讨论需要管理员权限的项目。Windows:使用CMD(或Java)从非特权执行特权命令

如果服务还没有运行,我需要启动它。我如何让我的GUI程序以管理员身份运行命令?我假设用户会被问到是否要继续。

我希望有一些我可以键入一个CMD窗口,因为这应该很适合我的Java程序。我在想像run-as-admin javaw my-service.jar,其中run-as-admin是询问是否继续的命令。

+0

一点也没有这听起来像是你正在寻找的解决方案,但你也可以改变特定服务的安全设置,以便非管理员可以启动它。 –

+0

是的,不是我要找的:) –

您不能以管理员身份执行批处理文件。您需要创建该文件的快捷方式,然后在快捷方式“以管理员身份执行”中设置该标志,如果这真的是您想要执行的操作。

要从桌面执行此操作,请选择快捷方式,右键单击并选择属性 - >快捷方式选项卡 - >高级按钮。然后选中以管理员身份执行复选框。

要做到这一点编程,见How to set "Run as administrator" flag on shortcut created by MSI installer

+0

快捷键看起来不错。我会仔细看看的。我不使用MSI安装程序,但是我想知道如何用手工制作的'.lnk'文件来做到这一点。 –

我们使用包装库这样的: http://sourceforge.net/projects/wrapper/

official website似乎从动态DNS的问题,此刻的痛苦,所以这里是wayback archive version

从命令行(以及扩展名为Java),您可以安装,卸载,启动和停止Java应用程序作为服务。

这里有个问题。非管理进程无法启动服务。最简单的做法是安排服务自动启动。我强烈建议你采取这种方式。

您在做什么会涉及创建一个帮助器应用程序,其中包括UAC manifestrequestedExecutionLevel设置为requireAdministrator。这个帮手应用程序可以启动服务。问题在于它要求登录的用户位于管理员组中,您不能保证会这样。

总而言之,自动启动服务是首选。

+0

我同意这是首选。这是一个备份,所以如果服务被杀或失败,有一个追索 –

+0

有时候人们使用监护服务来实现这一点。 –

+0

好主意,虽然我仍然想回答实际问题,如果有的话。 –

的Windows包含可用于启动与不同的用户帐户的任何可执行工具“运行方式”。

在命令行,你会再使用:只有

runas /user:Administrator "javaw -jar my-service.jar" 

的缺点是,你需要在密码输入,你可以不作为参数提供密码,以runas命令

+0

管理员不是我的Vista机器上的单独用户帐户。它不会在大多数情况下。这是一个没有任何用户帐户密码的示例机器,两个用户帐户都是“管理员”。我运行命令,输入没有密码,它说'5:拒绝访问' –