Запуск службы Windows с помощью net.exe без отображения окна консоли
Я хочу запустить службу без вывода сообщений с помощью команды net.exe из файла с повышенными привилегиями. Но я только хочу, чтобы запрос UAC запрашивался для net.exe, и после этого я не хочу, чтобы появлялось окно консоли. Я знаю, что есть способ скрыть окно консоли с помощью множества программ, таких как nircmd:
nircmd elevatecmd execmd net start [service]
Но запрос UAC будет запрошен для программы nircmd.
Является ли это возможным?
2 ответа
Наконец-то я нашел способ запуска и остановки службы в режиме без вывода сообщений, не показывая окно консоли, и UAC отображается для программы, подписанной Microsoft (wscript.exe), с VBScript, который использует WMI для запуска и остановки службы.
Запустите сервис: создайте файл StartService.vbs с этим кодом и измените первую строку с сервисом, который вы хотите запустить.
strServiceName = "YourServiceName"
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" & strServiceName & "'")
For Each objService in colListOfServices
objService.StartService()
Next
чтобы запустить сервис:
wscript pathto\StartService.vbs
Остановка службы: создайте файл StopService.vbs с кодом:
strServiceName = "YourServiceName"
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" & strServiceName & "'")
For Each objService in colListOfServices
objService.StopService()
Next
чтобы остановить службу:
wscript pathto\StopService.vbs
Я только хочу, чтобы запрос UAC запрашивался для net.exe [.] Возможно ли это?
Насколько мне известно, ответ, скорее всего, "Нет".
UAC отображается для nircmd
чтобы он мог бежать net start
с соответствующими повышенными привилегиями (которые требуются Windows). Это повышение должно произойти доnet start
это запустить. По моему опыту, это в целом верно для многих сторонних программ или скриптов, которые выполняют аналогичную функцию.
Elevate является исключением (то есть он будет отображатьNet Command
в UAC), но опять же, он не подавляет окно консоли, как nircmd
делает.
После этого я не хочу, чтобы появилось окно консоли.
Хотя окно консоли может появиться с другими решениями (например, elevate.exe
, .vbs
скрипт), новое окно консоли не появляется после запуска nircmd elevatecmd execmd net start example_service
,
Подавление Консольного Окна
Хотя это, вероятно, не возможно отобразить net.exe
в UAC вы можете отключить окно консоли для командного файла (который, честно говоря, звучит как ваша истинная цель, если я не слишком плохо читаю вещи):
Создать
.bat
например, файлstart_service.bat
с чем-то вроде следующего:C:\path\to\nircmd.exe elevatecmd execmd net start example_service
Создайте новый ярлык где-нибудь для запуска этого
.bat
файл. Сделайте цель похожей на следующую:C:\path\to\nircmd.exe execmd C:\path\to\start_service.bat
Для этого примера, когда используется этот ярлык (не .bat
файл), будет отображаться только приглашение UAC (окно консоли не будет отображаться).