Смысл в чем. Создаю абсолютно пустую службу:
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:
Служба не ответила на запрос своевременно.
В чем проблема?
На самом деле проблема была в путанице с файловой системой. Как известно, из за перехода на x64 все 32-битные сборки при обращению к system32 редиректятся в SysWOW64. Поэтому когда сборка с сервисом находится в system32, при установки sc начинает искать службу в SysWOW64 (ее там, естественно, нет). Из за чего и происходит эта ошибка.
Попробуй добавить Thread или Task в метод onStart
protected override void OnStart(string[] args)
{
Thread thread = new Thread(new ThreadStart(StartFunction));
thread.Start();
}
private void StartFunction()
{
// какой-то код
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Во вьюшках в ASPNET MVC можно определять секции - Section
При обращении к полю для получения значения, для которого заданы get и set происходит многократное обращение к этому полю, в результате чего...
У меня есть база данных с такой структурой, каждый раз как приходит пациент, допустим тот же самый, каждый раз приходится о нем заполнять информацию,...
Дан такой массив: как мне избавится от foreach'ов чтобы не писать их оч много а просто указать длинну строки?