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

我将有一个以pipe理员身份运行并监听端口的服务。 我的GUI程序将与pipe理员服务通话以获取需要pipe理员权限的项目。

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

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

Solutions Collecting From Web of "Windows:使用CMD(或Java)从非特权运行特权命令"

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

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

要以编程方式执行此操作,请参阅如何在由MSI安装程序创建的快捷方式上设置“以管理员身份运行”标志

Windows包含“runas”工具,可用于使用不同的用户帐户启动任何可执行文件。

在命令行上,你可以使用:

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

唯一的缺点是,您需要输入密码,您不能将密码作为参数提供给runas命令

我们使用Wrapper库: http : //sourceforge.net/projects/wrapper/

官方网站似乎目前正在遭受动态DNS问题,所以这里是wayback存档版本 。

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

你在这里有一个问题。 非管理进程不能启动服务。 最简单的做法是安排服务自动启动。 我强烈建议你走这条路。

你正在考虑做什么将涉及创建一个助手应用程序,包括UAC清单与requestedExecutionLevel设置为requireAdministrator 。 这个帮手应用程序可以启动服务。 问题在于,它要求登录的用户在管理员组中,您不能保证是这种情况。

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