Добрый день!
Столкнулся с проблемой при написании сервиса для Windows. Сервис должен отбрасывать время системы на исходное значение.
Имеется код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using System.Runtime.InteropServices;
namespace WindowsService1
{
static class Program
{
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME //описываем переменную
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
[DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
private extern static void Win32GetSystemTime(ref SYSTEMTIME lpSystemTime); //импортируем kernel32.dll и создаем переменную запроса времени из системы
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
private extern static bool Win32SetSystemTime(ref SYSTEMTIME lpSystemTime); //импортируем kernel32.dll и создаем переменную запроса на запись времени на систему
private static System.Timers.Timer TimeCycle; //создаем таймер
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new TimeCycleService()
};
ServiceBase.Run(ServicesToRun);
}
private static void Cycle()
{
TimeCycle = new Timer(); //создаем таймер
TimeCycle.Interval = 180000; //время таймера 3 минуты
TimeCycle.Enabled = true; //включаем таймер
TimeCycle.Elapsed += Time; //по окончанию взываем событие
TimeCycle.AutoReset = true; //указываем авторестарт для таймера
}
private static void Time(Object source, ElapsedEventArgs e)
{
SYSTEMTIME time = new SYSTEMTIME(); //создаем переменную
Win32GetSystemTime(ref time); //получаем системное время
time.wMinute = (ushort)(time.wMinute -3); //от существующего времени отнимаем 3 минуты
Win32SetSystemTime(ref time); //записываем время в систему
}
}
}
При запуске сервера изменение времени не происходит, где-то я допустил ошибку или не учел особенности построения кода для сервиса. Почему именно - найти самостоятельно не смог, сервис запускается от имени LocalService и автостартом, никто не сможет подсказать где допущена ошибка?
Благодарю за ваше внимание!