Новая служба не ответила на запрос своевременно

284
28 марта 2017, 10:28

Смысл в чем. Создаю абсолютно пустую службу:

projectinstaller.cs

using System;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace mrserivce
{
    [RunInstaller(true)]
    public class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller serviceProcessInstaller;
        private ServiceInstaller serviceInstaller;
        public ProjectInstaller()
        {
            serviceProcessInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();
            serviceProcessInstaller.Account = ServiceAccount.LocalService;
            serviceInstaller.ServiceName = MainService.MyServiceName;
            this.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });
        }
    }
}

mainservice.cs

using System;
using System.ServiceProcess;
namespace mrserivce
{
    public class MainService : ServiceBase
    {
        public const string MyServiceName = "mrserivce";
        public MainService()
        {
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            this.ServiceName = MyServiceName;
        }
        protected override void OnStart(string[] args)
        {
        }
        protected override void OnStop()
        {
        }
    }
}

kernel.cs

using System;
using System.ServiceProcess;
namespace mrserivce
{
    static class Kernel
    {    
        static void Main()
        {
            ServiceBase.Run(new ServiceBase[] { new MainService() });
        }
    }
}

Далее я компилирую ее в Release, открываю cmd от админа, с помощью cd перехожу в каталог с экзешником, и пишу:

sc create testService binPath=mrservice.exe type=own start=auto
sc start testService

После чего (мгновенно) выпадает ошибка:

[SC] StartService: ошибка: 1053:
Служба не ответила на запрос своевременно.

В чем проблема?

Answer 1

На самом деле проблема была в путанице с файловой системой. Как известно, из за перехода на x64 все 32-битные сборки при обращению к system32 редиректятся в SysWOW64. Поэтому когда сборка с сервисом находится в system32, при установки sc начинает искать службу в SysWOW64 (ее там, естественно, нет). Из за чего и происходит эта ошибка.

Answer 2

Попробуй добавить Thread или Task в метод onStart

protected override void OnStart(string[] args)
{
   Thread thread = new Thread(new ThreadStart(StartFunction));
   thread.Start();
}
private void StartFunction()
{
    // какой-то код
}
READ ALSO
Как определить задана ли секция в ASP.NET MVC 5

Как определить задана ли секция в ASP.NET MVC 5

Во вьюшках в ASPNET MVC можно определять секции - Section

256
C#, get/set и StackOverflovException

C#, get/set и StackOverflovException

При обращении к полю для получения значения, для которого заданы get и set происходит многократное обращение к этому полю, в результате чего...

279
Как правильно перенести данные?

Как правильно перенести данные?

У меня есть база данных с такой структурой, каждый раз как приходит пациент, допустим тот же самый, каждый раз приходится о нем заполнять информацию,...

235
Работа в массивом

Работа в массивом

Дан такой массив: как мне избавится от foreach'ов чтобы не писать их оч много а просто указать длинну строки?

233