Если сервис существует условие

Как Вы проверили бы, существует ли сервис WIN32 и, если так, сделайте некоторую операцию?

10
задан Ross Ridge 13 December 2016 в 05:08
поделиться

3 ответа

Что ж, я (почти) уверен, что без использование суперглобальных ключей $ _ SERVER , обеспечивающих альтернативный способ определения PATH_INFO , просто невозможно, поскольку позволяет сначала перечислить все ключи $ _SERVER ], что мы можем , возможно, использовать:

  • 'PHP_SELF'
  • 'QUERY_STRING'
  • 'SCRIPT_FILENAME'
  • 'PATH_TRANSLATED'
  • 'SCRIPT_NAME'
  • 'REQUEST_URI'
  • 'PATH_INFO'
  • 'ORIG_PATH_INFO'

Очевидно, нам нужно игнорировать последние два. Теперь мы должны ( Я не знаю этого, я просто предполагаю, потому что вы так сказали ) отфильтровать все ключи, которые существуют в предоставленной вами ссылке (, которая, кстати, является автономным банкоматом ), что оставляет нам следующие ключи:

  • 'PHP_SELF'
  • 'SCRIPT_FILENAME'
  • 'REQUEST_URI'

По поводу вашего комментария к Ответ Антониса :

Теперь вы просто жонглируете переменными. SCRIPT_FILENAME является частью CGI спец. Он не будет доступен, если PATH_INFO недоступен. Что касается REQUEST_URI , это mod_rewrite apache конкретный. - LiraNuna

Я использую LightTPD / 1.4.20-1 (Win32) с PHP 5.3.0 как CGI, cgi.fix_pathinfo = 1 и $ _ SERVER ['REQUEST_URI '] очень доступен для меня , я также помню, как использовал ту же самую переменную в те дни, когда никто не использовал mod_rewrite , поэтому мое честное скромное предположение заключается в том, что вы простой ошибся в этом пункте . Что касается ключа SCRIPT_FILENAME , я не могу проверить этот банкомат. Тем не менее, если мы очень сильно закроем глаза и поверим, что вы правы, у нас останется только одна переменная:

  • 'PHP_SELF'

I ' Something like the following would check if a service was running, and if so stop it. You can then start it without worrying about if it was already running or not:

net start | find "SomeService"
if ERRORLEVEL 1 net stop "SomeService"
net start "SomeService"

If you're using findstr to do a search, as some of the other answers have suggested, then you would check for ERRORLEVEL equal to 0 (zero)... if it is then you have found the string you're looking for:

net start | findstr "SomeService"
if ERRORLEVEL 0 net stop "SomeService"
net start "SomeService"

Essentially most DOS commands will set ERRORLEVEL, allowing you to check if something like a find has succeeded.

12
ответ дан 3 December 2019 в 13:40
поделиться

Как насчет использования WMIC :

Сначала перечислите все процессы, затем введите имя вашего процесса с помощью команды grep. Если он не существует, результат не будет напечатан.

wmic service |findstr "ProcessName"

Пример:

C:\>wmic service |findstr "Search"
FALSE        TRUE        Windows Search
1
ответ дан 3 December 2019 в 13:40
поделиться

Вы можете Не делайте этого в DOS, поскольку DOS не является Windows и даже не имеет понятия «служба».

В пакетном файле Windows вы можете использовать команду sc для поиска служб:

sc query | findstr SERVICE_NAME

Это перечислит все службы и выдаст их соответствующие имена.

Вы можете найти конкретную службу с помощью

sc query | findstr /C:"SERVICE_NAME: myservice"

Помните, что этот поиск чувствителен к регистру. Вы можете добавить переключатель / I в findstr , чтобы этого избежать.

19
ответ дан 3 December 2019 в 13:40
поделиться