Apache Ant-启动/停止win服务-访问被拒绝
我有一个ApacheAnt文件(build.xml),它被设置为创建生产服务器的自动备份。它设置为停止Apache服务器和MSSQLS2000—备份所有内容并再次启动这两个服务(及其依赖项)。它在旧的WIN 2008服务器下工作正常,但在WIN8下工作不正常。当执行.bat文件来运行Ant进程时,它会打开CMD(正如它应该打开的那样),但停止/启动操作都不会正确执行。我收到“访问被拒绝”的回复 这是执行.bat(Ant)文件时的CMD输出:Apache Ant-启动/停止win服务-访问被拒绝,ant,uac,Ant,Uac,我有一个ApacheAnt文件(build.xml),它被设置为创建生产服务器的自动备份。它设置为停止Apache服务器和MSSQLS2000—备份所有内容并再次启动这两个服务(及其依赖项)。它在旧的WIN 2008服务器下工作正常,但在WIN8下工作不正常。当执行.bat文件来运行Ant进程时,它会打开CMD(正如它应该打开的那样),但停止/启动操作都不会正确执行。我收到“访问被拒绝”的回复 这是执行.bat(Ant)文件时的CMD输出: assemble: stop.server.apac
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>
但我找不到任何关于使用提升权限停止/启动服务的信息
有什么想法吗
注意:Apache2.2和MSSQL是从驱动器W:\运行的,而Win操作系统是从C:\运行的。我的Ant路径设置正确,但我认为这可能导致特权访问问题。此错误与Ant无关(直接)。Windows8(实际上也是WindowsVista和Windows7)有UAC。即使用户使用管理帐户登录,也无法启动服务。您将让我们以管理员身份运行。通常,这是可用的右键单击菜单
要使脚本具有相同的功能,可以禁用UAC。(这是电话号码
).Windows 8可能会提供类似的说明
关于这个问题的一些详细讨论,可能对您有用:所以。。。24小时后,我找到了解决方案。
显然,此行为(访问被拒绝以停止/启动任何win服务,并且随后发生了系统错误5示例)是所有较新win操作系统的固有行为。正如我所发现的,在执行.bat文件时,似乎没有直接从CMD提升用户权限的直接方法,因此随后的每个命令(即停止或启动服务)都将由于缺乏用户权限而失败
我的解决方案
1) 下载(这只是一个可执行文件,它创建了一个包含多个文件的文件夹“立面”)
2) 在新创建的“提升”文件夹中,双击installpowertoys.cmd文件(这实际上为您安装了额外的选项,让您可以在cmd中使用“提升”一词,以管理员身份直接运行任何.bat文件(不会被win窃听)
3) 转到控制面板->用户帐户->更改用户帐户控制设置->。将滑块一直向下移动到“从不通知”级别。(这可确保“以管理员身份运行”弹出框被抑制)
4) 创建一个包装器.bat文件,该文件将以提升的权限执行,即这是一个bat文件,我称之为backup.bat,其内容如下(注意,本例中我的网站文件夹位于W:\drive上):
5) 创建另一个.bat文件,实际使用ApacheAnt调用bild.xml文件(包括所有详细信息-哪些服务应该停止或启动,我的文件应该压缩和备份在哪里,等等)。此文件可称为antbackup.bat:
ant -buildfile w:\mywebsite\build.xml antbackup
pause
6) 双击backup.bat文件(当然,让您的计划任务完成,交叉手指,希望有好的结果:)
这对我很有效。它也可以帮助其他人。谢谢你的回答。第一个建议-UAC-我已经设置为最小值(不通知),第二个建议-我昨天已经尝试了另一个帖子的链接,但我无法让它工作。但我认为你的做法是正确的,Win8似乎不允许启动这些服务。一定有另一个窗户的地方。还可能是什么?
ant -buildfile w:\mywebsite\build.xml antbackup
pause