Как бы вы проверить, существует ли услуга, и если да, то выполните какую-нибудь операцию?
В sc
Команда позволяет запрашивать службу Windows, полную информацию об этом можно найти Вот.
Таким образом, вы можете запросить конкретную услугу, если она существует, вы получите следующую информацию:
sc query lanmanserver
приводит к
SERVICE_NAME: lanmanserver
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Запрос несуществующей службы приводит к:
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:
The specified service does not exist as an installed service.
Таким образом, вы можете написать сценарий для проверки ответа, а затем выполнить любое действие, которое вы хотите на основе этого.
Если вы не зацикливаетесь на использовании пакетных сценариев, вы также можете написать что-нибудь более приятное на Powershell, например
function serviceCheck ($service, $machine) {
$result = [System.ServiceProcess.ServiceController]::GetServices($machine) | where{ (($_.name -eq $service) -or ($_.displayname -eq $service))
}
if (result -eq $null)
{
Do something if service does not exist
}
else
{
Do something if service does exist
}
}
После небольшого поиска в Google, вот небольшой фрагмент vb для проверки существования службы и выполнения метода запуска.
Dim colServices As Object
Dim objService As Object
Set colServices = GetObject("winmgmts:").ExecQuery _
("Select Name from Win32_Service where Name = '" & PutServiceNameHere& "'")
For Each objService In colServices
If Len(objService.Name) Then
objService.StartService()
End If
Next
Set colServices = Nothing
Надеюсь это поможет.
Если вам нужна чистая партия, вы можете использовать sc query <service_name>
чтобы проверить вашу службу. Если служба не существует, возникает ошибка. Вы можете проверить код ошибки 1060
с участием if errorlevel 1060
. Я использую нечто подобное в сценарии установки, чтобы проверить наличие другой службы, являющейся зависимостью.
REM throw output away with > nul
sc query MyServer > nul
IF ERRORLEVEL 1060 (
echo "Service is not installed"
) else (
rem do something else
)