2010-11-23 37 views
0

J'ai un programme qui fonctionne comme une application de bureau, mais peut également être installé en tant que service Windows. L'installation est effectuée en utilisant un bouton "installer en tant que service" sur l'interface graphique. Le gestionnaire d'événements pour ce bouton ressemble à ceci:Installer service et ajouter une entrée de Registre sous Vista +

ProcessStartInfo psi = new ProcessStartInfo("sc", "description " + 
    this.ServiceName + " \"" + 
     ((AssemblyDescriptionAttribute)attributes[0]).Description + "\"") 
psi.CreateNoWindow = true; 
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
psi.Verb = "runas"; 
Process.Start(psi).WaitForExit();  

Ce que je voudrais faire maintenant est d'ajouter des entrées de registre supplémentaires en dire:

HKLM\SOFTWARE\MyCompany\Services 

qui a besoin aussi des privilèges élevés. Mais si j'utilise la même procédure que celle décrite ci-dessus avec la commande "REG ADD", la boîte de dialogue UAC apparaîtra plus d'une fois - et je ne le veux pas.

Ainsi quelle est la meilleure façon d'installer un service Windows et ajoutez une entrée de Registre sous HKLM avec seulement avoir l'invite UAC une fois?

Répondre

0

J'ai fini par m'appeler administrateur privilèges et un paramètre spécial myprogram.exe -i et ensuite branchez dans une méthode spéciale qui utilise la classe ServiceInstaller pour installer le programme en tant que service (au lieu d'appeler sc).

1

Créer un petit exe ou un fichier batch qui fait les deux choses (la sc et la mise à jour reg). Lancez que au lieu de sc.

+0

Merci pour votre réponse. Cela semble être la solution évidente, mais je veux éviter cela, car le code est dans une bibliothèque partagée. Cela compliquerait le déploiement si je devais compter sur un composant supplémentaire tel qu'un fichier batch ou un exe. – Jeldrik

1

En ce qui concerne l'installation d'un service.
Vous pouvez topshelf. C'est facile à utiliser et très puissant.