6
votes

NSIS Check State of Windows Service

J'écris Script NSIS et je dois vérifier l'état du service (en cours d'exécution / arrêtée / en pause / non) et de faire des actions alors. Mais je ne peux pas utiliser de libs utilisateur tels que NSSCM.

J'ai trouvé un script

SC Query ServiceNamehere | Trouver "Exécution"

Mais je ne peux pas trouver comment vérifier le résultat de retour dans le script NSIS.

aide s'il vous plaît.


2 commentaires

Pouvez-vous n'utiliser aucun plug-ins ou tout simplement NSSCM? Parce que l'utilisation des plug-ins avec SNS facilite beaucoup la vie.


Je peux T Utiliser des plug-ins parce que je dois donner à ce script à d'autres personnes, ce refuge t du tout


3 Réponses :



4
votes

Il existe plusieurs plug-ins et des fonctions d'assistant qui traitent des services NT: Service NSIS lib , NSIS Simple Service Plugin et NSSCM . Le wiki a une vue d'ensemble de Toutes vos options .

Utiliser SC.EXE est problématique car la sortie peut être localisée, Net.exe est probablement meilleur (et il sort également sur

!include LogicLib.nsh
StrCpy $1 "Event Log" ;Put your service name here
ExpandEnvStrings $0 "%comspec%"
nsExec::ExecToStack '"$0" /k "net start | FIND /C /I "$1""'
Pop $0
Pop $1
StrCpy $1 $1 1
${If} "$0$1" == "01"
    MessageBox mb_ok "Running"
${Else}
    MessageBox mb_ok "Not Running"
${EndIf}


0 commentaires

0
votes

Je vérifie si un service est en cours d'exécution à l'aide de son nom d'affichage (pas du nom de service), car il a tendance à être plus précis (par exemple, le nom du service est jetée tandis que le nom d'affichage utilise mon nom de produit - j'évite le risque de compté un service de jetée installé par un autre produit).

Donc basé sur la solution de Kyle que j'utilise: xxx


0 commentaires