У меня есть небольшая проблема, автоматизирующая запуск и остановку сервисов. Когда я открываю 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
и ведение журнала.
Это похоже на проблему WMI, а не на что-либо специфическое для языка программирования или служб. Имейте в виду, что WMI основан на множестве хакерских «угадывания и golly», spelunking через реестр и т. Д., И не всегда объединяет все, что вы хотите. Возможно, вы, возможно, сделаете все, что вам нужно, через вызовы API, даже не выходя из обходов NET START и NET STOP. – Bob77
Для справки вы можете увидеть оба имени в окне свойств службы. «Имя службы» - это внутреннее имя, используемое Windows и SCM, а «Отображаемое имя» - это удобное для пользователя имя. – Deanna