【问题标题】:Windows: Running privileged command from non-privileged using CMD (or Java)Windows:使用 CMD(或 Java)从非特权运行特权命令
【发布时间】:2011-11-11 10:28:21
【问题描述】:

我将拥有一个以管理员身份运行并侦听端口的服务。对于需要管理员权限的项目,我的 GUI 程序将与管理员服务对话。

如果该服务尚未运行,我将需要启动它。如何让我的 GUI 程序以管理员身份运行命令?我假设会询问用户是否要继续。

我希望我可以在 CMD 窗口中输入一些内容,因为它应该非常适合我的 Java 程序。我在想run-as-admin javaw my-service.jar 之类的东西,其中run-as-admin 是询问是否继续的命令。

【问题讨论】:

  • 听起来这不是您正在寻找的解决方案,但您也可以更改特定服务的安全设置,以便非管理员可以启动它。
  • 是的,不是我要找的:)

标签: java windows cmd privileges administrator


【解决方案1】:

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

然后在命令行上使用:

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

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

【讨论】:

  • 管理员不是我的 Vista 机器上的单独用户帐户。在大多数情况下不会。这是一个示例机器,两个用户帐户都没有密码,两个用户帐户都是“管理员”。我运行命令,不输入密码,它说5: access denied
【解决方案2】:

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

您正在考虑创建一个帮助应用程序,其中包含UAC manifest 并将requestedExecutionLevel 设置为requireAdministrator。然后,此帮助应用程序可以启动该服务。这样做的问题是它要求登录的用户在管理员组中,你不能保证会是这种情况。

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

【讨论】:

  • 我同意它是首选。这是一个备份,所以如果服务被杀死或失败,有一个追索权
  • 有时人们使用监护服务来实现这一点。
  • 好主意,但如果有实际问题,我仍然希望得到答案。
  • 我的第二段解释了你需要做什么才能让进程以提升的权限运行。
  • 抱歉疏忽。现在我只是祈祷,希望我不必创建自己的.exe
【解决方案3】:

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

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

要以编程方式执行此操作,请参阅How to set "Run as administrator" flag on shortcut created by MSI installer

【讨论】:

  • 快捷方式看起来是个好主意。我会仔细看看的。但是,我不使用 MSI 安装程序,我想知道如何使用手动制作的 .lnk 文件来执行此操作。
【解决方案4】:

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

official website 目前似乎遇到了动态 dns 问题,所以这里是wayback archive version

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多