Я разрабатываю сервис с использованием .NET на платформах Windows.
Он работал до вчерашнего дня ... но сегодня он не хочет запускаться !!!Это кажется странным, и я чувствую, что что-то упустил ...
Я также пытался вернуть исходные коды к последней рабочей версии, но больше ничего не происходит: net start вывод:
Служба не отвечает на функцию управления.
Что может вызвать эту неисправность?
Возможно, большинство из вас хочет знатьбольше об этом.Итак, позвольте мне показать вам некоторый код:
Сервисный код:
#if DEBUG
class iGeckoService : DebuggableService
#else
class iGeckoService : ServiceBase
#endif
{
static void Main()
{
#if DEBUG
if (Debugger.IsAttached == true) {
DebuggableService[] services = Services;
// Create console
AllocConsole();
// Emulate ServiceBase.Run
foreach (DebuggableService service in services)
service.Start(null);
// Wait for new line
Console.WriteLine("Press ENTER to exit..."); Console.ReadLine();
// Emulate ServiceBase.Run
foreach (DebuggableService service in services)
service.Stop();
} else
ServiceBase.Run(Services);
#else
ServiceBase.Run(Services);
#endif
}
#if DEBUG
static DebuggableService[] Services
{
get {
return (new DebuggableService[] { new iGeckoService() });
}
}
[DllImport("kernel32")]
static extern bool AllocConsole();
#else
static DebuggableService[] Services
{
get {
return (new ServiceBase[] { new iGeckoService() });
}
}
#endif
#endregion
#region Constructors
/// <summary>
/// Default constructor.
/// </summary>
public iGeckoService()
{
// Base properties
ServiceName = DefaultServiceName;
// Service feature - Power events
}
#endregion
protected override void OnStart(string[] args)
{
try {
...
} catch (Exception e) {
sLog.Error("Unable to initialize the service. Request to stop.", e);
}
}
/// <summary>
/// Stop this service.
/// </summary>
protected override void OnStop()
{
...
}
}
[RunInstaller(true)]
public class iGeckoDaemonInstaller : Installer
{
/// <summary>
/// Default constructor.
/// </summary>
public iGeckoDaemonInstaller()
{
ServiceProcessInstaller spi = new ServiceProcessInstaller();
spi.Account = ServiceAccount.LocalSystem;
ServiceInstaller si = new ServiceInstaller();
si.ServiceName = iGeckoService.DefaultServiceName;
si.StartType = ServiceStartMode.Automatic;
Installers.AddRange(new Installer[] {spi, si});
}
}
class DebuggableService : ServiceBase
{
public void Start(string[] args) { OnStart(args); }
}
Стартовый скрипт:
installutil ..\bin\Debug\iGeckoService.exe
net start "Gecko Videowall"
, а стоп-скрипт:
net stop "Gecko Videowall"
installutil /u ..\bin\Debug\iGeckoService.exe
Однако я думаю, что это системная настройка, поскольку приложение работало до последнего дня.(Вздох).
Обновление
Когда служба работала, я использовал log4net для регистрации активности службы (я не могу подключить отладчик кработает служба ...), и она всегда регистрируется.
С этого момента журнал log4net никогда не создается (даже если я включаю опцию внутренней отладки), даже если я регистрируюсь в подпрограмме Main!
Еще одно обновление
Кажется, что приложение никогда не выполняется.Я сократил каждую подпрограмму (Main, OnStart, OnStop) и запускаю пустой сервис.Процедура OnStart создает файл в каталоге (полностью доступный для записи всем), но при запуске службы файл не создается.
Еще одно обновление
Воодушевленный комментарием Роба, я видел это сообщение в средстве просмотра событий:
> Faulting application name: iGeckoService.exe, version: 1.0.0.0, time stamp: 0x4c60de6a
> Faulting module name: ntdll.dll, version: 6.1.7600.16385, time stamp: 0x4a5be02b
> Exception code: 0x80000003
> Fault offset: 0x000000000004f190
> Faulting process id: 0x1258
> Faulting application start time: 0x01cb384a726c7167
> Faulting application path: C:\Users\Luca\Documents\Projects\iGeckoSvn\iGeckoService\bin\Debug\iGeckoService.exe
> Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
> Report Id: b096a237-a43d-11df-afc4-001e8c414537
Это, безусловно, причина отключения службы ... не возникает вопрос: " Какотладить его?"(Спасибо, Роб, я до сих пор никогда не думал о средстве просмотра событий!). Отладка, выполняемая как консольное приложение, не выдает никакой ошибки, на самом деле, похоже, что она связана со средой службы.Единственное, что мне приходит в голову, может быть какая-то ошибка загрузки DLL, так как теперь сервис пуст ... любая идея?
(Спасибо всем за то, что следите за мной ... Я хотел бы предложить вампицца и пиво)
Решено!
Службе не удалось запустить после сбоя до основной процедуры, вызванной установкой и настройкойMS Application Verifier (x64).После удаления этого приложения все заработало как обычно!
Спасибо всем!