我有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文件(让你的计划任务做,交叉手指,希望得到好的结果:)
这对我有用。它也可以帮助其他人。