2015-08-08 7 views
4

Я проходил через Walkthrough: Creating a Windows Service Application in the Component Designer на MSDN.Служба Windows не запускается: «Служба не отвечает на функцию управления».

У меня есть некоторый код и устанавливается моя служба:

My New Service in the Services MSC

Мой код, как показано ниже:

namespace WindowsServiceWalkthrough 
{ 
    using System; 
    using System.Diagnostics; 
    using System.ServiceProcess; 
    using System.Timers; 
    using System.Runtime.InteropServices; 

    public partial class MyNewService : ServiceBase 
    { 
     private int _eventId; 

     public MyNewService() 
     { 
      InitializeComponent(); 
      if (! EventLog.SourceExists("MySource")) 
      { 
       EventLog.CreateEventSource(
        "MySource", 
        "MyNewLog"); 
      } 
      eventLog1.Source = "MySource"; 
      eventLog1.Log = "MyNewLog"; 
     } 

     [DllImport("advapi32.dll", SetLastError = true)] 
     private static extern bool SetServiceStatus(IntPtr handle, ref ServiceStatus serviceStatus); 

     protected override void OnStart(string[] args) 
     { 
      var serviceStatus = new ServiceStatus 
      { 
       dwCurrentState = ServiceState.SERVICE_RUNNING, 
       dwWaitHint = 100000 
      }; 

      SetServiceStatus(this.ServiceHandle, ref serviceStatus); 

      eventLog1.WriteEntry("My Event Log: In OnStart method", EventLogEntryType.Information); 

      var timer = new Timer(); 
      timer.Interval = 60000; // 60 seconds 
      timer.Elapsed += OnTimer; 
      timer.Start(); 

      // Update the service state to Running. 
      serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; 
      SetServiceStatus(ServiceHandle, ref serviceStatus); 
     } 

     public void OnTimer(object sender, ElapsedEventArgs args) 
     { 
      // TODO: Insert monitoring activities here. 
      eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, _eventId++); 
     } 

     protected override void OnStop() 
     { 

     } 
    } 

    public enum ServiceState 
    { 
     SERVICE_STOPPED = 0x00000001, 
     SERVICE_START_PENDING = 0x00000002, 
     SERVICE_STOP_PENDING = 0x00000003, 
     SERVICE_RUNNING = 0x00000004, 
     SERVICE_CONTINUE_PENDING = 0x00000005, 
     SERVICE_PAUSE_PENDING = 0x00000006, 
     SERVICE_PAUSED = 0x00000007, 
    } 

    [StructLayout(LayoutKind.Sequential)] 
    public struct ServiceStatus 
    { 
     public long dwServiceType; 
     public ServiceState dwCurrentState; 
     public long dwControlsAccepted; 
     public long dwWin32ExitCode; 
     public long dwServiceSpecificExitCode; 
     public long dwCheckPoint; 
     public long dwWaitHint; 
    }; 
} 

Однако, когда я пытаюсь запустить службу из окна службы I получить следующую ошибку:

enter image description here

Если я пытаюсь запустить его из консоли с net start MyNewService я получаю следующее сообщение об ошибке:

The service is not responding to the control function.

More help is available by typing NET HELPMSG 2186.

Сообщение помощи затем аналогично окну, т.е.

The service is not responding to the control function.

Как я могу исправить \ отладить это?

Я бегу Windows, 8.1 и с использованием .NET 4.5.2

+0

Удалить весь код. Он работает сейчас? Должно. Теперь выборочно добавьте обратно. – usr

+1

Есть ли причина для установки статуса обслуживания? Я думаю, что удаление этого кода решит проблему. –

+0

Неверное определение для ServiceStatus. 'DWORD' - 32-битные значения, а' longs' - 64 бит. Все ваши поля должны быть 'int'. Кроме того, вам не нужно напрямую обращаться к SetServiceStatus. 'ServiceBase' обрабатывает все это для вашего. https://msdn.microsoft.com/en-us/library/windows/desktop/ms685996(v=vs.85).aspx – shf301

ответ

2

Для отладки проблемы, вы можете сделать следующее:

Попробуйте добавить к вашему методу OnStart (возможно начало):

System.Diagnostics.Debugger.Launch(); 

Решение должно быть открытым в VS, и когда вы запустите сервис, он должен попросить вас запустить ваш отладчик в вашем экземпляре VS. Вы можете найти несколько альтернативных решений в очень похожей проблеме, чем ваша: How to debug the .NET Windows Service OnStart method?

Счастливая отладка!

0

Благодаря совету DDan по прикреплению отладчика, я смог решить мою проблему.

Моя проблема заключалась в том, что я пытался контролировать папку в каталоге файлов программ, для которой у службы не было разрешения, и я получал ошибку The directory name [path of folder] is invalid... Я сменил каталог на C: \ temp, и служба отлично работала.

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

Смежные вопросы