Je veux spécifier mon nom de service dans l'app.config sans avoir besoin de recomplement et d'installer / désinstaller mon service à plusieurs reprises. Mais il suffit de récupérer le nom de service d'app.config, le service semble l'ignorer. Y a-t-il des astuces spéciales comment l'obtenir? Merci d'avance. P>
Je veux dire le service Windows classique. Je ne pense pas que tout code est nécessaire ici. Je veux juste récupérer le nom du service d'app.config de manière dynamique. P>
5 Réponses :
En supposant que vous signiez le service Windows Windows, la réponse est non. Le service doit être installé dans le registre et le nom est l'une des clés de registre. P>
Après avoir cherché un moment sur Internet et lecture d'articles, il est devenu plus clair pour moi qu'un nom de service ne peut pas être spécifié dans l'app.config de manière aussi dynamique, la commande SC peut être utilisée pour effectuer une solution similaire. Vous pouvez spécifier d'autres variables de configuration dans l'app.config et utiliser SC pour le renommer P>
SC.EXE Créer "ServiceName" binpath = "myservicepath.exe" p>
J'ai bien peur que ce que vous essayez de faire ce n'est pas possible. Cela semble en fait aller à l'encontre de la nature d'un objectif de service Windows et d'un comportement actuel. P>
Une fois qu'un service Windows est installé, le nom ne peut pas être modifié sans la réinstaller à nouveau. Ce qui nomme réellement le service est un élément appelé Service Installer strong>. Qui, à présent, je suppose que vous savez ce que c'est et où c'est situé. P>
Cependant, il existe des moyens de manipuler un service installé en utilisant Instrumentation de gestion Windows (WMI). Peut-être que cette combinaison avec la recommandation d'Izabela devient la bonne voie vers votre solution. p>
Je vous recommanderais de lire le tutoriel suivant, vous pourriez trouver une autre manière d'atteindre ce que vous essayez de faire. P>
Je ne suis pas sûr de quel scénario vous avez à l'esprit. Vous souhaitez que le nom de votre service Windows change. Assez juste. Quand cela changerait-il? P>
Imaginez que vous ayez trouvé la solution et créé un tel service Windows. Je présume dans votre scénario, vous l'installeriez au moins la première fois. Ensuite, vous ne voulez pas désinstaller / l'installer. Mais je voudrais probablement commencer / arrêter et faire d'autres choses avec elle. L'une de ces actions fera-t-elle changer le nom du service? P>
Si tel est le cas, j'imagine que vous pouvez lancer un processus qui le désinstalle et l'installe avec un nom différent pour vous de manière transparente, basé sur une sorte de logique de dénomination. P>
Je ne vois pas comment vous pourriez le faire sinon. P>
ou vient de proposer un nom vraiment générique pour couvrir toutes les possibilités (ce qui pourrait être incroyablement simple ou incroyablement difficile). p>
http://www.codeproject.com/articles / 21320 / plusieurs instance-Net-Windows-Service
p>
p>
p>
<add key="ServiceName" value="I"/> [RunInstaller(true)] public class ServiceInstaller1 : Installer { internal static string ServiceNameDefault = "My Service"; internal static string ServiceName = GetConfigurationValue("ServiceName"); /// <summary> /// Public Constructor for WindowsServiceInstaller. /// - Put all of your Initialization code here. /// </summary> public ServiceInstaller1() { var serviceProcessInstaller = new ServiceProcessInstaller(); var serviceInstaller = new ServiceInstaller(); //# Service Account Information serviceProcessInstaller.Account = ServiceAccount.LocalSystem; //serviceProcessInstaller.Username = null; //serviceProcessInstaller.Password = null; //# Service Information serviceInstaller.DisplayName = ServiceName; serviceInstaller.StartType = ServiceStartMode.Manual; //# This must be identical to the WindowsService.ServiceBase name //# set in the constructor of WindowsService.cs serviceInstaller.ServiceName = ServiceName; Installers.Add(serviceProcessInstaller); Installers.Add(serviceInstaller); } private static string GetConfigurationValue(string key) { Assembly service = Assembly.GetAssembly(typeof(Service)); Configuration config = ConfigurationManager.OpenExeConfiguration(service.Location); if (config.AppSettings.Settings[key] != null) return ServiceNameDefault + " " + config.AppSettings.Settings[key].Value; else return ServiceNameDefault; } }
Fonctionne un régal. Avait un problème avec deux installateurs (oublié de supprimer le programme d'installation dans la conception) mais une fois résolu toutes les fonctionnement. Je devais définir cela dans la configuration, car je dois compiler des instances différentes de ce programme d'installation pour chaque client que nous avons. Tant de remerciements pour cela, m'a sauvé un peu de temps!
Vous devez nous montrer du code pour que nous puissions aider
Voulez-vous dire le service Windows Service, WCF ou le service de sites Web classiques?