1

У меня есть небольшая проблема, автоматизирующая запуск и остановку сервисов. Когда я открываю services.msc и смотрю список услуг, у всех их есть имена. Однако, когда я запускаю этот код:Два разных имени для служб Windows (VB6)

Dim objService As Object 
Dim objSet As Object 
IsServiceRunning = False 
Set objSet = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service") 
For Each objService In objSet 
    If (UCase(strServiceName) = UCase(objService.Name)) And (UCase(objService.State) = UCase("Running")) Then 
     IsServiceRunning = True 
    End If 
Next 

Значение objService.Name не совпадает с именем в списке. Например, «Компьютерный браузер» - это просто «браузер», «распределенная файловая система» - «dfs», а «Net Logon» - «netlogon». Есть ли способ вытащить полное, более длинное имя для этих сервисов из этого объекта objService? Я могу обойти это, но для ясности в коде я бы предпочел использовать одно и то же значение для определения того, работает ли служба, вызывая вызов командной строки или NET STOP и ведение журнала.

+0

Это похоже на проблему WMI, а не на что-либо специфическое для языка программирования или служб. Имейте в виду, что WMI основан на множестве хакерских «угадывания и golly», spelunking через реестр и т. Д., И не всегда объединяет все, что вы хотите. Возможно, вы, возможно, сделаете все, что вам нужно, через вызовы API, даже не выходя из обходов NET START и NET STOP. – Bob77

+0

Для справки вы можете увидеть оба имени в окне свойств службы. «Имя службы» - это внутреннее имя, используемое Windows и SCM, а «Отображаемое имя» - это удобное для пользователя имя. – Deanna

ответ

3

Просто используйте objService.Caption для доступа к «длинному имени» службы.

Я открыл имя свойства, как это:

For Each objService In objSet 
    For Each vElem In objService.Properties_ 
     Debug.Print vElem.Name; "="; 
     Debug.Print vElem.Value 
    Next 
    Exit For 
    ... 
Next 

Просто положить objService в окне просмотра, чтобы узнать Properties_ собственность. Положите vElem в окне просмотра тоже, чтобы найти Name и имущество по умолчанию Value (кроме IsArray и т. Д.) SWbemProperty объект.

+0

Красивая, спасибо. –

+0

И спасибо за подсказку о том, как найти свойства тоже. Это может быть очень удобно. –

 Смежные вопросы

  • Нет связанных вопросов^_^