2013-10-03 69 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