Iniciando um serviço do windows com net.exe sem mostrar a janela do console

0

Eu quero iniciar um serviço silenciosamente com o comando net.exe a partir de um arquivo bat não elevado. Mas eu só quero que o prompt do UAC seja solicitado para o net.exe e depois disso eu não quero que a janela do console apareça. Eu sei que há uma maneira de ocultar a janela do console com muitos programas como o nircmd:

nircmd elevatecmd execmd net start [service]

Mas o prompt do UAC será solicitado para o programa nircmd.

É possível?

    
por liamZ 29.06.2018 / 12:16

2 respostas

0

I only want the UAC prompt to be asked for the net.exe[.] Is it possible?

Até onde sei, a resposta é provavelmente "Não".

O UAC está sendo exibido para nircmd , portanto, ele pode executar net start com os privilégios elevados apropriados (exigidos pelo Windows). Essa elevação deve ocorrer antes que net start seja executado. Na minha experiência, isso geralmente é verdade para muitos programas de terceiros ou scripts que executam uma função semelhante.

Elevar é uma exceção (ou seja, exibirá Net Command no UAC), mas, novamente, não suprime a janela do console como nircmd faz.

After that I don't want the console window to appear.

Embora uma janela do console possa aparecer com outras soluções (por exemplo, elevate.exe , um script .vbs ), uma nova janela do console não será exibida após a execução de nircmd elevatecmd execmd net start example_service .

Suprimir a janela da consola

Embora seja provável que não seja possível exibir net.exe no UAC, você pode suprimir a janela do console do arquivo em lote (o que honestamente parece ser seu verdadeiro objetivo, se não estou interpretando mal as coisas):

  1. Crie um arquivo .bat , por exemplo start_service.bat com algo como o seguinte:

    C:\path\to\nircmd.exe elevatecmd execmd net start example_service
    
  2. Crie um novo atalho em algum lugar para executar esse arquivo .bat . Torne o alvo semelhante ao seguinte:

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

Para este exemplo, quando este atalho é usado (não o arquivo .bat diretamente), somente o prompt do UAC será exibido (nenhuma janela do console aparecerá).

    
por 01.07.2018 / 06:11
0

Eu finalmente encontrei uma maneira de iniciar e parar um serviço silenciosamente sem mostrar a janela do console e o UAC exibido para um programa assinado pela Microsoft (wscript.exe), com o VBScript que usa o WMI para iniciar e parar um serviço.

Iniciar um serviço: Crie um arquivo StartService.vbs com este código e altere a primeira linha com o serviço que você deseja iniciar.

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

para iniciar o serviço:

wscript pathto\StartService.vbs

Pare um serviço: Crie um arquivo StopService.vbs com o código:

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

para parar o serviço:

wscript pathto\StopService.vbs
    
por 25.09.2018 / 09:24