Apache Ant - 启动/停止赢取服务 - 访问被拒绝

时间:2013-10-03 21:25:15

标签: ant uac

我有Apache Ant文件(build.xml),它被设置为创建我的生产服务器的自动备份。它被设置为停止Apache服务器& MSSQL2000 - 备份所有内容并再次启动这两个服务(及其依赖项)。它在旧的WIN 2008服务器下工作正常但在WIN8下没有。当执行.bat文件以运行Ant进程时,它会打开CMD(应该如此)但是没有一个stop / start操作正确执行。我得到“访问被拒绝。”响应。

这是执行.bat(Ant)文件时的CMD输出:

assemble:

stop.server.apache:
     [exec] System error 5 has occurred.
     [exec]
     [exec] Access is denied.
     [exec]
     [exec] Result: 2

stop.server.ms-sql:
     [exec] No valid response was provided.
     [exec] The following services are dependent on the MSSQLSERVER service.
     [exec] Stopping the MSSQLSERVER service will also stop these services.
     [exec]
     [exec]    SQLSERVERAGENT
     [exec]
     [exec] Do you want to continue this operation? (Y/N) [N]:
     [exec] Result: -1
     [exec] System error 5 has occurred.
     [exec]
     [exec] Access is denied.
     [exec]
     [exec] Result: 2

负责启动/停止服务的实际build.xml部分如下:

.......代码的开头

<macrodef name="service">
    <attribute name="service"/>
    <attribute name="action"/>
    <sequential>
        <exec executable="cmd.exe">
            <arg line="/c net @{action} '@{service}'"/>
        </exec>
     </sequential>
</macrodef>

<target name="start.server.ms-sql">
    <service action="start" service="MSSQLSERVER"/>
    <service action="start" service="SQLSERVERAGENT"/>
</target>

<target name="stop.server.ms-sql">
    <service action="stop" service="SQLSERVERAGENT"/>
    <service action="stop" service="MSSQLSERVER"/>      
</target>

<target name="start.server.apache">
    <service action="start" service="Apache2.2"/>
</target>

<target name="stop.server.apache">
    <service action="stop" service="Apache2.2"/>
</target>

.......这里有更多代码

我已经启用了所有磁盘/文件夹权限,以确保它没有受到影响(我知道已经有来自Vista及更高版本的权限更改。我也研究了Apache Ant documentation但我找不到任何关于停止/以提升的权限启动服务。

有什么想法吗?

注意:Apache2.2和MSSQL从驱动器W:\运行,Win OS从C:运行。我的Ant路径设置正确,但我认为这可能会导致权限访问问题。

2 个答案:

答案 0 :(得分:1)

此错误与ant(直接)无关。 Windows8(实际上是Windows Vista和7)也有UAC。即使用户使用管理帐户登录,也无法启动服务。您将拥有我们run-as的管理员。通常,这可用作右键单击菜单。

要使脚本相同,您可以禁用UAC。 (这是instructions for windows 7 )。 Windows 8可能是类似的指令。

此问题中的一些详细讨论可能对您有用:How can I auto-elevate my batch file, so that it requests from UAC administrator rights if required?

答案 1 :(得分:1)

所以... 24小时后我找到了解决方案。 显然,这种行为(访问被拒绝停止/启动任何获胜服务以及随之发生的系统错误5 示例here)对于所有较新的WIN OS都是原生的。正如我发现的那样,在执行 .bat 文件时似乎没有直接从CMD提升用户权限的直接方法,因此随后的每个命令(即:停止或启动服务)都将因为缺乏用户权限。

我的解决方案

1)下载Elevation PowerToys 2.0(这只是一个可执行文件,可以创建一个包含多个文件的文件夹“Elevation”)

2)从新创建的“Elevation”文件夹中双击 InstallAllPowerToys.cmd 文件(这实际上为您安装了其他选项,以便您在CMD中使用“elevate”一词来运行任何选项。 bat文件直接作为管理员(没有被win告知)

3)转到控制面板 - &gt;用户帐户 - &gt;更改用户帐户控制设置 - &gt; ..将滑块一直缩小到“从不通知”级别。 (这可以确保抑制“以管理员身份运行”弹出框)

4)创建一个包装 .bat 文件,该文件将以提升的权限执行,即这是一个bat文件,我称之为 backup.bat ,其内容如下(注意我的网站文件夹在这种情况下位于W:\驱动器上):

elevate cmd /k "w:\mywebsite\antbackup.bat"

5)使用对 bild.xml 文件的实际Apache Ant调用创建另一个 .bat 文件(包含所有详细信息 - 哪些服务应停止或启动,哪里应该是我的文件压缩和备份等...)。此文件可以称为 antbackup.bat

ant -buildfile w:\mywebsite\build.xml antbackup
pause

6)双击backup.bat文件(让您的预定任务完成,交叉指示并希望获得良好的结果:)

这对我有用。它也可以帮助其他人。