it-swarm.asia

Bir Windows hizmetini bir komut dosyasından nasıl yeniden başlatırım?

Ben benzeyen bir toplu iş komut dosyası var:

sc stop myservice
sc start myservice

sc, hizmet durduruluncaya kadar beklemediği için hata veriyor. Bir hizmeti komut dosyasıyla nasıl yeniden başlatırım?

38
Joshua

Poster, hizmeti yeniden başlatmaya çalışmadan önce durdurulduğundan emin olmak istiyor. Bunun gibi bir şey yaparak "sc sorgusu" çıktısında bir döngü kullanabilirsiniz:

:stop
sc stop myservice

rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul

sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start

:start
net start | find /i "My Service">nul && goto :start
sc start myservice
47
crb

Bir şey eksik olabilir, ama bunu her zaman kullanıyorum:

net durdurma "myservice"
net başlangıç ​​"myservice"

veya daha kısa:

net stop "myservice" && net başlangıç ​​"myservice"

26
Skawt

Powershell ile ölü basit:

PS >Restart-Service MySrvcHere

Daha da iyisi, görünen adları kullanarak:

PS >Restart-Service -displayname "My Service Name Here"

Get-Help Restart-Service daha fazlası için

24
Factor Mystic

Yalnızca hizmeti yeniden başlatmak içinse,

Net stop myservice
Net start myservice

Ancak, sc seçeneklerine erişmek istiyorsanız, başlat/bekle komutunu kullanabilirsiniz

start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"

bu teknik, herhangi bir komuta uygulanabilen daha genel bir çözümdür.

6
Peter Stuer

quiet hizmetinin yeniden başlatılmasını sağlamak için, onayların durdurulmasını ister (örneğin, Sunucu hizmeti olarak), stop komutunun sonuna / y ekleyebilirsiniz.

net stop Server /y
net start Server

Otomatik komut dosyası yürütme için yararlı olacaktır.

5
Fedir RYKHTIK

Başarısız bir hizmeti yeniden başlatmak istiyorsanız bir komut dosyası çalıştırmanız gerekmez. Services MMC bir hizmete snapin sağ tıklayın, özellikleri seçin, kurtarma sekmesine tıklayın .. Burada servis durursa hangi eylemlerin yapılmasını istediğinizi ayarlayabilirsiniz. hizmeti durdurmaya çalışıyorsanız, bir şeyler yapın, ardından komut dosyasını başlatın, toplu iş dosyasını net stop "myserviceshortname" ile önceden girin ve net start "myserviceshortname"

Vbscipt'te bir hizmeti ve bağımlılarını durdurmak için biraz daha kod var:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
   & "{Win32_Service.Name='myservice'} Where " _
        & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
    objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery _
        ("Select * from Win32_Service where Name='myservice'")
For each objService in colServiceList
    errReturn = objService.StopService()
Next

İşte bir hizmete ve bağlı olduğu her şeye başlıyor (bu tanıdık olmalı)

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
    ("Select * from Win32_Service where Name='Myservice'")
For each objService in colServiceList
    errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
   & "{Win32_Service.Name='myservice'} Where " _
        & "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
    objService.StartService()
Next
3
Jim B

Aşağıdaki komutları kullanabilirsiniz:

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
1
Ganesh