0
啓動Windows音頻這是代碼:批處理程序以安全模式
@echo off
cls
echo.
echo Hello, %username%.
echo This program will enable the sound service.
echo.
:case_1
call:print "Attempting to start Windows Audio..."
call:check_audio "sc start AudioSrv" "case_2"
:case_2
call:print "Attempting to start Windows Audio again..."
call:check_audio "C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted" "case_3"
:case_3
echo.
echo Attempting to start dependencies...
echo.
call:print "Starting Multimedia Class Scheduler..."
call:check_active "MMCSS" "sc start MMCSS" "case_4" "Multimedia Class Scheduler"
call:print "Starting Remote Procedure Call (RPC)..."
call:check_active "RpcSs" "sc start RpcSs" "case_4" "Remote Procedure Call (RPC)"
call:print "Starting Windows Audio Endpoint Builder..."
call:check_active "AudioEndpointBuilder" "sc start AudioEndpointBuilder" "case_4" "Windows Audio Endpoint Builder"
call:print "Attempting to start Windows Audio again..."
call:check_audio "sc start AudioSrv" "case_4"
:case_4
echo.
echo Attempting to start dependencies again...
echo.
call:print "Starting Multimedia Class Scheduler..."
call:check_active "MMCSS" "C:\Windows\system32\svchost.exe -k netsvcs" "error" "Multimedia Class Scheduler"
call:print "Starting Remote Procedure Call (RPC)..."
call:check_active "RpcSs" "C:\Windows\system32\svchost.exe -k rpcss" "error" "Remote Procedure Call (RPC)"
call:print "Starting Windows Audio Endpoint Builder..."
call:check_active "AudioEndpointBuilder" "C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted" "error" "Windows Audio Endpoint Builder"
call:print "Attempting to start Windows Audio again..."
call:check_audio "C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted" "error"
:print
echo %1
echo.
:check_audio
:: Checking if Windows Audio is active. If it is unable to be activated, GOTO <label>.
:: If it has already been activated, GOTO exit.
for /f "tokens=3 delims=: " %%H in ('sc query "AudioSrv" ^| findstr " STATE"') do (
:: Tokenises line containing service's state, pulls out third token.
:: Tests resulting state against the string, "RUNNING".
if /i "%%H" NEQ "RUNNING" (
%1 || goto %2
) else (
goto exit
)
)
:check_active
:: Checking if service is active. If it is unable to be activated, GOTO <label>.
:: If it has already been activated, state that it is already running.
for /f "tokens=3 delims=: " %%H in ('sc query "%1" ^| findstr " STATE"') do (
if /i "%%H" NEQ "RUNNING" (
%2 || goto %3
) else (
echo %4 is already running.
)
)
:error
:: States what error the program failed with and exits.
echo Program failed with error #%errorlevel%.
exit /b %errorlevel%
:exit
call:print "The program was successful. Windows Audio is running."
pause
exit
一點點麪條十歲上下,但做這項工作...排序的。 當我在正常模式下運行它時,它會進入一個無限循環,不斷調用標籤「:exit」,直到我按下CTRL-C。爲什麼是這樣?
你考慮重新命名標籤到'exit'以外的東西,比如'quit'或''完成「,看看是否可以解決問題? (或者完全刪除最後的'exit'?)將一個有意義的批處理術語用作標籤有點愚蠢? –
@KenWhite它仍在產生一個無限循環: 你好,邁克爾。 該程序將啓用聲音服務。 「試圖啓動Windows音頻...」 系統找不到指定的驅動器。 「程序成功,Windows Audio正在運行。」 系統找不到指定的驅動器。 「程序成功,Windows Audio正在運行。」 系統找不到指定的驅動器。 「程序成功,Windows Audio正在運行。」 系統找不到指定的驅動器。 「程序成功,Windows Audio正在運行。」 – user3155247
刪除check_audio for循環中的註釋消除了「系統找不到」消息,但仍然是一個無限循環。 – user3155247