у нас есть устаревшее приложение, которое недавно было развернуто на экземпляре Windows 2016.Мы сталкиваемся с ошибками в доступе, которых мы не видели, когда он был размещен на Windows 2012 box.
У учетной записи службы есть разрешения на запуск / остановку служб.Единственное, что нас беспокоит, это то, что это на самом деле служба мониторинга.Это значит, что он проверяет, правильно ли обрабатывает данные основное приложение из другой службы.Если возникнут проблемы, эта служба перезапустит его.Мне интересно, были ли какие-либо изменения в Windows 2016, которые изменили профиль доступа.Ничего не изменилось с кодом за последние годы.
Буду признателен за любые предложения или мысли
Ошибка
System.ComponentModel.Win32Exception: Access is denied
--- End of inner exception stack trace ---
at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
at System.ServiceProcess.ServiceController.Start(String[] args)
at System.ServiceProcess.ServiceController.Start()
at DacMonitor.Monitor.StartService(String serviceName, Int32 timeoutMilliseconds)
Код:
public static void RestartService(string serviceName, int timeoutMilliseconds)
{
Log.Info(string.Format("Going to attempt to restart service: {0}", serviceName));
try
{
ServiceController service = new ServiceController(serviceName);
int millisec1 = Environment.TickCount;
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
Log.Info(string.Format("Stopping service: {0}", serviceName));
if (service.Status != ServiceControllerStatus.Stopped &&
service.Status != ServiceControllerStatus.StopPending)
{
service.Stop();
}
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
// count the rest of the timeout
int millisec2 = Environment.TickCount;
timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));
Log.Info(string.Format("Starting service: {0}", serviceName));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch(Exception ex)
{
Log.Error(string.Format("Error trying to restart the service: {0}", serviceName), ex);
}
}