2013-10-03 67 views
1

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

这是CMD输出时执行.BAT(ANT)的文件:

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> 

的.......这里更多的代码

我ALRE ady启用了所有的磁盘/文件夹权限,以确保它没有受到影响(我知道已经有权限从Vista和更改。我还研究了Apache Ant documentation,但我找不到任何有关使用提升权限停止/启动服务的信息。

有什么想法?

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

回答

1

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

我从刚创建的“海拔”的解决方案

1)下载Elevation PowerToys 2.0(这只是其中几个文件创建一个文件夹“海拔”的可执行文件)

2)双击文件夹点击InstallAllPowerToys.cmd文件(这实际上安装了额外的选项,以便在CMD中使用“升高”一词来运行任何文件。bat文件直接作为管理员(没有被win中断)

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

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

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

5)创建另一个.BAT文件与实际Apache Ant的呼叫bild.xml文件(包含所有细节 - 哪些服务应该停止o ř开始,并应在哪里应该是我的文件压缩和备份等...)。该文件可以被称为antbackup.bat

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

6)双击BACKUP.BAT文件(有你的计划任务做到这一点,你的手指和希望的好成绩:)

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

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?

+0

谢谢你的回答。第一个建议 - UAC - 我已经设置了最低限度(不通知),第二个 - 我已经尝试过的另一篇文章的链接,我无法完成工作。但我认为你的方向正确事实上,Win8似乎不允许启动这些服务。必须有另一个窗口捕捉到某处。它还能是什么? – Milan