Запуск службы Windows с помощью net.exe без отображения окна консоли

561
liamZ

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

nircmd elevatecmd execmd net start [service] 

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

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

0
Каждый раз, когда вы повышаете команду, UAC будет отображаться. UAC отображается для `nircmd`, поэтому он может запускать` net start` с надлежащими повышенными привилегиями (которые требуются в Windows). Anaksunaman 5 лет назад 0
если вы прочитаете мой вопрос, вы увидите, что я хочу, чтобы UAC запрашивал программу net.exe, а не другую программу, например nircmd, и после этого я хочу, чтобы окно консоли было скрыто. liamZ 5 лет назад 0

2 ответа на вопрос

0
Anaksunaman

Я только хочу, чтобы запрос 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 (окно консоли не будет отображаться).

если вы запускаете консоль «net start service» без прав администратора, для команды net.exe будет отображаться UAC. Может быть, путь запуска net.exe от пользователя SYSTEM в запланированной задаче? Что мне не нравится в nircmd, так это то, что он не подписан. liamZ 5 лет назад 0
извините, я пытался сказать, что если вы поднимаете net.exe с неснятой консоли (используя nircmd.exe, elevate.exe, vbscript ...), для net.exe будет отображаться UAC. liamZ 5 лет назад 0
Если вы запустите `net start service` с консоли без прав доступа, UAC вообще не будет отображаться, он просто вернет сообщение« Access Denied ». Если вы поднимаете `net.exe` с консоли без прав доступа с помощью` nircmd.exe`, запрос UAC будет отображаться для `nircmd`. Что касается `.vbs`, то скрипты, с которыми я знаком, также не запрашивают` net.exe`. Используя `elevate.exe`, вы правы в том, что он отображает` Net Command` (для `net.exe`), но, к сожалению, он не подавляет окно консоли. Anaksunaman 5 лет назад 0
Я не мог много комментировать решение планировщика задач. Очевидно, вы могли бы дать ему шанс. Тем не менее, хотя я понимаю нерешительность относительно того, что `nircmd` не подписан, в моем опыте это совершенно безопасная часть программного обеспечения. Anaksunaman 5 лет назад 0
С помощью 'nircmd elevate net start service' UAC будет предложено ввести команду net.exe. Насколько я знаю, nircmd безопасен, но не все это знают, и будет лучше, если в 2018 году будет подписанная программа. В любом случае, спасибо за вашу помощь. liamZ 5 лет назад 0
Подписание, безусловно, хорошая идея. И пожалуйста. знак равно Anaksunaman 5 лет назад 0
0
liamZ

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