Apache Ant - 启动/停止获胜服务 - 访问被拒绝



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

这是执行 (Ant( 文件时.bat 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

负责启动/停止服务的实际构建.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 文档,但我找不到有关使用提升的权限停止/启动服务的任何内容。

知道吗?

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

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

要使脚本相同,您可以禁用 UAC。(这是Windows 7的说明).Windows 8 可能会有类似的指令。

这个问题中的一些详细讨论可能对您有用:如何自动提升我的批处理文件,以便在需要时从 UAC 管理员权限请求?

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

我的解决方案

1(下载Elevation PowerToys 2.0(这只是一个可执行文件,它创建了一个包含多个文件的文件夹"Elevation"(

2(从新创建的"Elevation"文件夹中双击InstallAllPowerToys.cmd文件(这实际上为您安装了其他选项,以便在CMD中使用"提升"一词直接以管理员身份运行任何.bat文件(而不会被win窃听(

3( 转到您的控制面板 ->用户帐户 ->更改用户帐户控制设置 ->..将滑块一直降低到"从不通知"级别。(这可确保抑制"以管理员身份运行"弹出框(

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

elevate cmd /k "w:mywebsiteantbackup.bat"

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

ant -buildfile w:mywebsitebuild.xml antbackup
pause

6(双击备份.bat文件(让你的计划任务做,交叉手指,希望得到好的结果:)

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

相关内容

  • 没有找到相关文章

最新更新