Démarrer un service Windows avec net.exe sans afficher la fenêtre de la console

0

Je souhaite démarrer un service en mode silencieux à l'aide de la commande net.exe à partir d'un fichier bat non élevé. Mais je veux seulement que l'invite UAC soit demandée pour le net.exe et après cela, je ne veux plus que la fenêtre de la console apparaisse. Je sais qu'il existe un moyen de masquer la fenêtre de la console avec beaucoup de programmes comme nircmd:

nircmd elevatecmd execmd net start [service]

Mais l'invite UAC sera demandée pour le programme nircmd.

C'est possible?

liamZ
la source
Chaque fois que vous élevez une commande, le contrôle de compte d'utilisateur s'affiche. Le UAC est affiché pour nircmd donc ça peut courir net start avec les privilèges élevés appropriés (requis par Windows).
Anaksunaman
si vous lisez ma question, vous verrez que ce que je veux, c'est que le programme net.exe soit demandé à l'UAC, pas à un autre programme comme nircmd, et que je souhaite ensuite que la fenêtre de la console soit masquée.
liamZ

Réponses:

0

Je souhaite uniquement que l’invite UAC demande le programme net.exe [.] Est-ce possible?

À ma connaissance, la réponse est probablement «non».

Le UAC est affiché pour nircmd donc ça peut courir net start avec les privilèges élevés appropriés (requis par Windows). Cette élévation doit avoir lieu avant net start est couru. D'après mon expérience, c'est généralement le cas de nombreux programmes ou scripts tiers remplissant une fonction similaire.

Élever est une exception (c'est-à-dire qu'il affichera Net Command dans le UAC), mais là encore, il ne supprime pas la fenêtre de la console comme nircmd Est-ce que.

Après cela, je ne veux plus que la fenêtre de la console apparaisse.

Bien qu'une fenêtre de console puisse apparaître avec d'autres solutions (par exemple, elevate.exe, une .vbs script), une nouvelle fenêtre de console ne s'affiche pas après l'exécution nircmd elevatecmd execmd net start example_service.

Supprimer la fenêtre de la console

Bien qu'il ne soit probablement pas possible d'afficher net.exe dans le contrôle de compte d'utilisateur, vous pouvez supprimer la fenêtre de la console pour le fichier de commandes (ce qui semble sincèrement être votre objectif véritable, si je ne me trompe pas trop mal):

  1. Créer un .bat fichier par exemple start_service.bat avec quelque chose comme ce qui suit:

    C:\path\to\nircmd.exe elevatecmd execmd net start example_service
    
  2. Créez un nouveau raccourci quelque part pour l'exécuter .bat fichier. Faites en sorte que la cible ressemble à ce qui suit:

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

Pour cet exemple, lorsque ce raccourci est utilisé (pas le .bat fichier directement), seule l'invite UAC sera affichée (aucune fenêtre de console ne s'affichera).

Anaksunaman
la source
si vous exécutez à partir d'un "service de démarrage net" sans console élevée, le contrôle de compte d'utilisateur s'affiche pour la commande net.exe. Peut-être que la solution consiste à exécuter net.exe à partir de l'utilisateur SYSTEM dans une tâche planifiée? Ce que je n'aime pas de nircmd, c'est qu'il n'est pas signé.
liamZ
désolé, ce que j’essayais de dire, c’est que si vous élevez net.exe à partir d’une console non montée (à l’aide de nircmd.exe, elevate.exe, vbscript ...), le UAC sera affiché pour le net.exe.
liamZ
Si tu cours net start service depuis une console non surélevée, aucun UAC ne sera affiché, il retournera simplement un Access Denied message. Si vous élevez net.exe depuis une console non surélevée utilisant nircmd.exe, l'invite UAC sera pour nircmd. En ce qui concerne .vbs, les scripts que je connais ne demandent pas net.exe non plus. En utilisant elevate.exe, vous avez raison, cela affichera Net Command (pour le net.exe ) mais ne supprime pas la fenêtre de la console, malheureusement.
Anaksunaman
Je ne pourrais pas commenter beaucoup sur la solution de planification de tâches. Évidemment, vous pouvez tenter le coup. Cela dit, même si je comprends les hésitations concernant nircmd étant non signé, c'est un logiciel parfaitement sûr dans mon expérience.
Anaksunaman
Avec 'nircmd elevate net start service', vous devez entrer la commande net.exe dans UAC. Pour autant que je sache, nircmd est sûr mais tout le monde ne le sait pas et il serait préférable qu'en 2018 ce soit un programme signé. Quoi qu'il en soit, merci pour votre aide.
liamZ
0

J'ai enfin trouvé un moyen de démarrer et d'arrêter un service en silence sans afficher la fenêtre de la console. UAC s'affiche pour un programme signé par Microsoft (wscript.exe), avec VBScript qui utilise WMI pour démarrer et arrêter un service.

Démarrer un service: Créez un fichier StartService.vbs avec ce code et modifiez la première ligne avec le service que vous souhaitez démarrer.

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

pour démarrer le service:

wscript pathto\StartService.vbs

Arrêtez un service: Créez un fichier StopService.vbs avec le code:

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

pour arrêter le service:

wscript pathto\StopService.vbs
liamZ
la source