Démarrage de services dans un fichier batch sur Windows 7

J'ai un fichier batch assez simple qui ne fait qu'une chose: " net start myservice ". Ce fichier batch est raccourci dans un groupe de programme par le programme d'installation afin que les utilisateurs puissent simplement cliquer sur l'icône et démarrer (ou arrêter). Tout fonctionne bien dans XP pour les utilisateurs ayant des droits d'administrateur. Mais les choses deviennent poilues sur Win7 car le lot doit être exécuté "en tant qu'administrateur" explicitement et souvent les utilisateurs ne le savent pas. Donc, ma question est de savoir comment rendre cela amical? Dire aux utilisateurs de cliquer avec le bouton droit de la souris et d'exécuter en tant qu'administrateur sur Win7 et simplement cliquer sur XP, c'est une sorte de torsion étrange. J'ai besoin d'une chose simple simple et intelligente.

Je pourrais probablement utiliser "runas / user: administrator" dans le lot lui-même, mais ce compte "administrateur" pourrait ne pas être disponible sur certaines machines. Je recherche une solution universelle pour installer des choses comme celle-ci sur n'importe quelle boîte Windows.

Des idées? Comment ferais-tu ceci?

Téléchargez l' élévation PowerToys pour Windows depuis Microsoft. Vous pouvez ensuite inclure des scripts dans votre processus d'installation afin que vous puissiez exécuter à partir du fichier batch elevate net start servicename et il leur donnera une invite d'élévation UAC. Tant que l'utilisateur a des privilèges administratifs sur l'ordinateur ou peut obtenir un administrateur pour effectuer l'élévation pour eux, il exécutera la commande avec des privilèges élevés et devrait fonctionner très bien. Pas besoin de spécifier un nom d'utilisateur ou n'importe quoi. Il existe une section entière dans cet article sur la création d'un script qui peut détecter s'il fonctionne avec un niveau d'accès suffisant, sinon l'élévation.

Modifiez les autorisations du service myservice pour permettre à ses utilisateurs ordinaires de démarrer.


Un moyen simple de le faire est d'utiliser Process Explorer : démarrez le service, double-cliquez sur son processus dans ProcExp, ouvrez l'onglet Services et utilisez le bouton Autorisations .

(Process Explorer)

(ProcExp: Propriétés - Services)


À la dure:

 C:\>sc sdshow Schedule D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY) 

Le texte affiché est une chaîne de descripteur de sécurité . Chaque élément (...) est une chaîne ACE .

Par exemple, en ajoutant cela au SD, les utilisateurs pourraient contrôler le service:

 (A;;GX;;;BU) 

BU est la chaîne SID pour le groupe Utilisateurs intégrés. Pour la plupart des objectifs, l'octroi de GX ( GENERIC_EXECUTE ) devrait être suffisant .

Remarque: Les "droits" dans la chaîne ACE ne semblent pas correspondre de manière évidente aux autorisations réelles données. Par exemple, "Start service" est RP ( READ_PROPERTY ) et "Stop service" est WP ( WRITE_PROPERTY ).

Vérifiez PsTools , il contient une application appelée psservice.exe , pour démarrer un service, elle utilise la ligne de commande suivante:

 psservice.exe [\\Computer [-u Username [-p Password]]] start <svc> 

Si cela sera exécuté par des utilisateurs restreints, vous voudrez peut-être envelopper le fichier batch dans un exe pour empêcher les utilisateurs de voir le mot de passe administrateur.