Работая с TopShelf, я сталкиваюсь с ошибкой вокруг сообщения «Служба Topshelf.HostConfigurators.WindowsServiceDescription еще не установлена». - PullRequest
1 голос
/ 08 сентября 2011

Кто-нибудь имел опыт работы с TopShelf при создании служб Windows?

Я продолжаю сталкиваться с этой ошибкой при попытке запустить службу,

"Служба Topshelf.HostConfigurators.WindowsServiceDescription не установлена.пока. "

Сборка, установщик, установка и все эти шаги завершены, и служба появляется в списке служб в Windows Server, но когда я нажимаю на службу и пытаюсь ее запустить, это исключениевыброшены.Полное сообщение об ошибке показано ниже.

INFO 10:23:08 Запуск в качестве приложения winservice. FATAL 10:23:08 Служба Topshelf.HostConfigurators.WindowsServiceDescription еще не установлена.Пожалуйста, запустите 'RIS.ModelGenerator.Scheduler, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нулевая установка'.ОШИБКА 10:23:08 Служба вышла ненормально с исключением Topshelf.Exceptions.ConfigurationException: служба Topshelf.HostConfigurators.WindowsServiceDescription еще не установлена.Пожалуйста, запустите 'RIS.ModelGenerator.Scheduler, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нулевая установка'.в Topshelf.Windows.WindowsServiceHost.Run () в d: \ BuildAgent-01 \ work \ 799c08e77fef999d \ src \ Topshelf \ OS \ Windows \ WindowsServiceHost.cs: строка 56 в Topshelf.HostFactory.Run (настройка Action`1) в d: \ BuildAgent-01 \ work \ 799c08e77fef999d \ src \ Topshelf \ Config \ HostFactory.cs: строка 45

Ответы [ 2 ]

6 голосов
/ 08 октября 2011

Скорее всего, проблема в том, что в имени службы есть пробелы. По какой-либо причине Topshelf 2.2.2.0 правильно выполняет поиск служб с пробелом в имени, даже если служба может быть установлена ​​с пробелом, то есть «Моя служба». Когда TopShelf ищет службу, чтобы проверить, установлена ​​ли она, он будет искать только «My».

Вот фрагмент, который вы можете использовать для просмотра служб, установленных на вашем устройстве:

using System;
using System.Linq;

public class Foo
{
    public static void Main()
    {
        foreach(var x in System.ServiceProcess.ServiceController.GetServices().OrderBy(x => x.ServiceName))
        {
            Console.WriteLine("Service Name: '{0}';, Display Name: '{1}'", x.ServiceName, x.DisplayName);
        }

        Console.ReadKey();
    }
}
0 голосов
/ 02 октября 2011

Похоже, у меня была версия, которая на самом деле не работает (кажется, что это последняя версия).Мне пришлось откатиться (через NuGet к счастью) до предыдущей версии, до v2.0, чтобы решить мою проблему.Также оказалось, что проект, над которым я работал, был подключен к некоторым функциям / методам, предшествующим v2.0, поэтому возникла следующая проблема.

Спасибо Джеффу Шумахеру за дополнительную помощь по этой проблеме.Надеемся, что программное обеспечение TopShelf обновлено, чтобы не иметь этих различий в текущих версиях.

...