Есть ли способ указать имя службы в файле app.config? - PullRequest
7 голосов
/ 09 июля 2009

Я хочу указать имя своей службы в app.config без необходимости повторной компиляции и повторной установки / удаления моей службы. Но просто извлекая имя службы из app.config, служба, кажется, игнорирует его. Есть ли какие-то особые хитрости, как этого добиться? Заранее спасибо.

Я имею в виду классический сервис Windows. Я не думаю, что здесь нужен какой-либо код. Я просто хочу получить имя службы из app.config динамически.

Ответы [ 5 ]

4 голосов
/ 13 июля 2009

После поиска в Интернете и чтения статей мне стало ясно, что имя службы нельзя указывать в app.config таким динамичным способом, вместо этого можно использовать команду sc для выполнения аналогичного решения. Вы можете указать другие переменные конфигурации в app.config и использовать sc, чтобы переименовать его

sc.exe create "servicename" binPath = "myservicepath.exe"

3 голосов
/ 15 февраля 2012

http://www.codeproject.com/Articles/21320/Multiple-Instance-NET-Windows-Service

<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;
        }
    }
3 голосов
/ 25 июля 2010

Я не уверен, какой сценарий ты имеешь в виду. Вы бы хотели, чтобы название вашей службы Windows изменилось. Справедливо. Когда это изменится?

Представьте, что вы нашли решение и создали такую ​​службу Windows. Я предполагаю, что в вашем сценарии вы бы установили его хотя бы в первый раз. Тогда вы не хотите удалить / установить его. Но, вероятно, вы хотели бы начать / остановить и делать другие вещи с этим. Приведет ли одно из этих действий к изменению названия службы?

Если это так, я думаю, вы могли бы запустить процесс, который удаляет и устанавливает его с другим именем для вас прозрачно, основываясь на некоторой логике именования.

Не понимаю, как еще ты мог это сделать.

Или просто придумайте действительно общее имя, чтобы охватить все возможности (которые могут быть невероятно простыми или невероятно сложными).

2 голосов
/ 25 июля 2010

Боюсь, что то, что вы пытаетесь сделать, невозможно. Похоже, что это на самом деле идет вразрез с природой цели службы Windows и ее текущим поведением.

После установки службы Windows имя нельзя изменить без повторной установки. На самом деле служба называется элементом Установщик службы . Который к настоящему времени, я полагаю, вы знаете, что это такое и где он находится.

Однако существуют способы управления установленной службой с помощью Инструментария управления Windows (WMI). Возможно, это в сочетании с рекомендацией Изабелы станет правильным путем к вашему решению.

Я бы порекомендовал вам прочитать следующее руководство, вы можете найти альтернативный способ достижения того, что вы пытаетесь сделать.

http://www.serverwatch.com/tutorials/article.php/1576131/Windows-Services-Management-With-WMI-Part-1.htm

2 голосов
/ 09 июля 2009

Если вы имеете в виду Windows Service, ответ - нет. Служба должна быть установлена ​​в реестре, и имя является одним из ключей реестра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...