【问题标题】:Is there a way to make an ANT task run as Administrator in Windows Vista?有没有办法让 ANT 任务在 Windows Vista 中以管理员身份运行?
【发布时间】:2009-04-23 19:04:26
【问题描述】:

作为安装程序的一部分,我需要从 ANT 运行批处理文件。如果我以管理员身份运行 cmd.exe 并运行批处理文件,一切都很好,因为它具有适当的管理权限。当从 ant 执行批处理文件时,它会失败,就像我在没有管理权限的情况下运行批处理文件时一样。我的问题是,如何从我的 ANT 脚本以管理模式运行这个批处理文件?

<exec executable="cmd.exe" output="dir.txt" dir="c:/bin/">
<arg line="/c service.bat install"/>
</exec>

【问题讨论】:

    标签: java ant windows-vista


    【解决方案1】:

    至少 XP 有一个runas 命令,您可以尝试使用它,例如:

    runas /u:%COMPUTERNAME%\Administrator "cmd /c service.bat install"
    

    调用时会在控制台询问密码。

    UPDATE:半年后,我已经升级到Windows 7。这里runas不能用于提权,但是Aaron Margosis有解决办法:

    // elevate.js -- runs target command line elevated
    if (WScript.Arguments.Length >= 1) {
        Application = WScript.Arguments(0);
        Arguments = "";
        for (Index = 1; Index < WScript.Arguments.Length; Index += 1) {
            if (Index > 1) {
                Arguments += " ";
            }
            Arguments += WScript.Arguments(Index);
        }
        new ActiveXObject("Shell.Application").ShellExecute(Application, Arguments, "", "runas");
    } else {
        WScript.Echo("Usage:");
        WScript.Echo("elevate Application Arguments");
    }
    

    如果需要,它也许可以嵌入到安装程序中。不过,对于最终用户,Script Elevation Power Toys 更方便,正如另一个答案所建议的那样。

    【讨论】:

    • 糟糕,问题是关于 Vista 的。好吧,我的答案仅基于 XP,我不确定它是否适用于 Vista。
    • 刚刚在 Vista 上尝试过。没用...感谢您的建议。大家还有什么想法吗?
    • @Edward 试试 Sysinternals 命令行工具 PsExec。 technet.microsoft.com/en-us/sysinternals/bb897553.aspx
    【解决方案2】:

    你可以试试Script Elevation PowerToy。它添加了一个提升命令,可用于提升命令行上的权限。

    【讨论】:

    • 不幸的是,作为安装程序的一部分,我不能保证这个电动玩具安装在机器上。对于任何想要在他们的机器上解决这个问题以使生活更轻松的人来说,这是一个很好的建议。谢谢。
    • 啊,对。我没有考虑到这一点。实际上,Windows 倾向于将具有某些名称的程序视为始终需要管理员权限(例如 setup.exe)......我想知道 setup.bat 是否如此。
    【解决方案3】:

    我偶然发现了一个类似的问题。解决方案是使用PsExec 作为可执行文件,并使用它来调用批处理文件。 PsExec 是 Windows 的 runas 命令的强大替代品。

    【讨论】:

      【解决方案4】:

      关闭 UAC 似乎是允许这个 ant 任务执行的唯一选项。

      我尝试创建批处理文件的快捷方式并运行它,因为快捷方式可以设置为“以管理员身份运行”。我收到提示时也没有运气,但我的批处理文件仍然失败。

      [http://www.mydigitallife.info/2007/02/17/how-to-open-elevated-command-prompt-with-administrator-privileges-in-windows-vista/][1]

      【讨论】:

        【解决方案5】:

        通过使用提升命令提示符我们可以做到这一点。

        在 Ant 任务中,我们可以使用 exec 任务来运行任何可执行文件。就像我们也可以使用命令提示符和 exec tas 一样

        <property name=”admincmd” value=”./elevate.cmd” />
        <property name=”server.location” location=”c:/Apache/tomcat/bin” />
        
        <exec executable=”${admincmd}” failonerror=”false”>
        <arg value=”cmd” />
        <arg value=”/k” />
        <arg value=”${server.location}/service” />
        <arg value=”install” />
        </exec>
        

        上面代码中的sn -p elevate.cmd源码可以从这里下载

        要正确运行此代码,我们需要将两个文件 elevate.vbs、elevate.cmd 放在同一目录中,并且应该在属性 admincmd 中定义的适当位置可用。

        here是原帖的参考链接

        【讨论】:

          猜你喜欢
          • 2010-12-22
          • 2023-03-07
          • 2011-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-14
          • 2011-01-15
          相关资源
          最近更新 更多