Я хочу запустить службу без вывода сообщений с помощью команды net.exe из файла с повышенными привилегиями. Но я только хочу, чтобы запрос UAC запрашивался для net.exe, и после этого я не хочу, чтобы появлялось окно консоли. Я знаю, что есть способ скрыть окно консоли с помощью многих программ, таких как nircmd:

nircmd elevatecmd execmd net start [service]

Но запрос UAC будет запрошен для программы nircmd.

Является ли это возможным?

2 ответа2

0

Я только хочу, чтобы запрос 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, вы можете отключить окно консоли для командного файла (что, честно говоря, является вашей истинной целью, если я не слишком неправильно читаю):

  1. Создайте файл .bat например, start_service.bat например:

    C:\path\to\nircmd.exe elevatecmd execmd net start example_service
    
  2. Создайте новый ярлык где-нибудь для запуска этого .bat файла. Сделайте цель похожей на следующую:

    C:\path\to\nircmd.exe execmd C:\path\to\start_service.bat
    

В этом примере, когда используется этот ярлык (не файл .bat напрямую), будет отображаться только приглашение UAC (окно консоли не будет отображаться).

0

Наконец-то я нашел способ запустить и остановить службу без вывода сообщений, не показывая окно консоли, и 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .