2

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

这是执行 .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 文档,但我找不到任何关于停止/启动具有提升权限的服务的信息.

任何的想法 ?

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

4

2 回答 2

1

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

要获得相同的脚本,您可以禁用 UAC。(这是Windows 7 的说明 )。Windows 8 可能有类似的说明。

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

于 2013-10-04T05:11:35.407 回答
1

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

我的解决方案

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

2)从新创建的“Elevation”文件夹中双击InstallAllPowerToys.cmd文件(这实际上为您安装了附加选项,以便您在CMD中使用“elevate”一词直接以管理员身份运行任何.bat文件(不会被窃听赢了)

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

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

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

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

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

6)双击backup.bat文件(让你的计划任务做到这一点,交叉手指,希望有好的结果:)

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

于 2013-10-04T23:15:59.370 回答