Моя служба Windows не запускается после перезагрузки - PullRequest
1 голос
/ 30 мая 2019

Я могу успешно запустить / остановить службу вручную, но она не запускается при перезапуске системы, хотя тип запуска установлен на 'Automatic'.На некоторых терминалах при перезагрузке служба не запускается с ошибкой failed to connect DB

29052019 17:25:27 ERROR Logs.TransactionLogManager - Exception Thrown in getNewSession()

29052019 17:25:27 ERROR Logs.TransactionLogManager - Unable To Open Database Session

29052019 17:25:27 ERROR Logs.TransactionLogManager - Unable to complete network request to host "localhost".
   at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPoolManager.Pool.CreateNewConnectionIfPossibleImpl(FbConnectionString connectionString)
   at FirebirdSql.Data.FirebirdClient.FbConnectionPoolManager.Pool.GetConnection(FbConnection owner)
   at FirebirdSql.Data.FirebirdClient.FbConnection.Open()
   at NHibernate.Connection.DriverConnectionProvider.GetConnection()
   at NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare()
   at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect dialect, IConnectionHelper connectionHelper)
   at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory sessionFactory)
   at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at StevensCommon.Database.FluentNHibernateManager.OpenNewSession()
   at StevensCommon.DAOs.StevensDAO.GetNewSession()

В среде разработки во время отладки я даже не получаю никакой ошибки.Предполагая, что на моей машине службы firebird запускаются раньше, чем моя служба, все равно не удается запустить службу при перезагрузке.И в журнале ничего не появляется.

Я добавил несколько точек журнала в коде, и все они регистрируются, когда я останавливаю / запускаю службу вручную.Но ничего не отображается в журнале, когда система перезагружается и сервер никогда не запускается.

Попытка добавления службы Firebird в качестве зависимости в установщике проекта / службы, установите DelayedAutoStart = true.Какое бы решение я ни читал в Интернете, я пробовал его, но служба не запускалась при перезагрузке.

После этого я добавляю фрагмент начальной / входной точки службы.

Программа.cs

static class Program
{
  static void Main(string[] args)
  {
    TransactionLogManager.WriteServiceLog("FLAG - Before DAO Call", null);
    // Check to see if we have a licence 
    if (LicenceFileDAO.GetLicence() != null && LicenceManager.IsLicenceActive())
    {
        TransactionLogManager.WriteServiceLog("FLAG - Inside DAO Block", null);
        //Run the IS Service
        ServiceBase[] ServicesToRun = new ServiceBase[] { new MyService() };
        ServiceBase.Run(ServicesToRun);
        TransactionLogManager.WriteServiceLog("FLAG - End of DAO Call", null);
    }
    else
    {
        TransactionLogManager.WriteServiceLog("No Valid Licence Found - Either A Licence Has Not Been Activated Or It Has Expired. Please Contact Support", null);
    }
  }
}

MyService.cs

public partial class MyService : ServiceBase
{
    protected static Timer importTimer = null;
    protected static Timer exportTimer = null;
    protected static Timer licenceTimer = null;
    protected static Timer requestTimer = null;
    protected static Timer uploadTimer = null;
    protected static Timer handshakeTimer = null;
    protected static Timer scheduledReportTimer = null;
    protected static Timer alertTimer = null;
    public static Boolean ImportRunning = false;
    public static Boolean ExportRunning = false;
    public static Boolean RequestRunning = false;
    public static Boolean UploadRunning = false;
    public static Boolean HandshakeRunning = false;
    public static Boolean ScheduledReportRunning = false;
    public static Boolean AlertReportRunning = false;
    public static int? zynkWorkflowProcessId = null;

    public MyService()
    {
        TransactionLogManager.WriteServiceLog("FLAG - 1", null);

        InitializeComponent();

        InitializeServiceTimers();


        try
        {
            MessengerService.Start();
            TransactionLogManager.WriteServiceLog("Messaging Service Started", null);
        }
        catch (Exception e)
        {
            TransactionLogManager.WriteServiceLog(e.Message, e.StackTrace);
        }
    }

    private void InitializeComponent()
    {
        this.eventLog1 = new System.Diagnostics.EventLog();
        ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
        // 
        // MyService
        // 
        this.ServiceName = "MyService";
        ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

    }

    private void InitializeServiceTimers()
    {
        if (!System.Diagnostics.EventLog.SourceExists("Stevens Integration Service"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "Stevens Integration Service", "ServiceLog");
        }
        eventLog1.Source = "Stevens Integration Service";
        eventLog1.Log = "ServiceLog";

        TransactionLogManager.WriteServiceLog("FLAG - 2", null);

        importTimer = new Timer(IntegrationServiceSettings.GetImportInterval() * 1000);
        exportTimer = new Timer(IntegrationServiceSettings.GetExportInterval() * 1000);
        licenceTimer = new Timer(86400 * 1000); // Daily
        requestTimer = new Timer(IntegrationServiceSettings.GetRequestInterval() * 1000);
        scheduledReportTimer = new Timer(30000);
        alertTimer = new Timer(20000);

        importTimer.Elapsed += new ElapsedEventHandler(ImportTimerElapsed);
        exportTimer.Elapsed += new ElapsedEventHandler(ExportTimerElapsed);
        licenceTimer.Elapsed += new ElapsedEventHandler(LicenceTimerElapsed);
        requestTimer.Elapsed += new ElapsedEventHandler(RequestTimerElapsed);
        scheduledReportTimer.Elapsed += new ElapsedEventHandler(ScheduledReportTimerElapsed);
        alertTimer.Elapsed += new ElapsedEventHandler(AlertTimerElapsed);
        TransactionLogManager.WriteServiceLog("FLAG - 3", null);
        StartTimers();
        TransactionLogManager.WriteServiceLog("FLAG - 4", null);
    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("Stevens Integration Service Starting...");
        TransactionLogManager.WriteServiceLog("FLAG - OnStart() Started", null);

        if (StevensDAO.TestConnection())
        {
            eventLog1.WriteEntry("Configure Settings...");
            IntegrationServiceSettings.InitialiseAll();
            eventLog1.WriteEntry("Done.");
        }
        TransactionLogManager.WriteServiceLog("FLAG - OnStart() Finished", null);


        TransactionLogManager.WriteServiceLogInfo("Started");
        eventLog1.WriteEntry("Started.");
    }

}

ProjectInstaller - включает в себя System.ServiceProcess.ServiceProcessInstaller и System.ServiceProcess.ServiceInstaller


private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
private MyService myService ;

private void InitializeComponent()
{
    this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
    this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
    this.myService = new IntegrationService.MyService();

    // serviceProcessInstaller1
    this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
    this.serviceProcessInstaller1.Password = null;
    this.serviceProcessInstaller1.Username = null;

    // serviceInstaller1
    this.serviceInstaller1.Description = "My Integration Service";
    this.serviceInstaller1.DisplayName = "MyService";
    this.serviceInstaller1.ServiceName = "MyService";
    //this.serviceInstaller1.ServicesDependedOn = new string[] { "Firebird Guardian - DefaultInstance", "Firebird Server - DefaultInstance" };
    //this.serviceInstaller1.DelayedAutoStart = true;
    this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;

    // myService 
    this.myService.ExitCode = 0;
    this.myService.ServiceName = "MyService";

    // ProjectInstaller
    this.Installers.AddRange(new System.Configuration.Install.Installer[] {
    this.serviceProcessInstaller1,
    this.serviceInstaller1});
}

LogPoints - При ручном запуске / остановке я получаю следующие точки журнала, но при перезагрузке системы ничего не появляется

30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - Before DAO Call
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - Inside DAO Block
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - 1
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - 2
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - 3
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - 4
30052019 16:19:35 ERROR Logs.TransactionLogManager - Messaging Service Started
30052019 16:19:35 ERROR Logs.TransactionLogManager - FLAG - OnStart() Started
30052019 16:19:35 ERROR Logs.TransactionLogManager - Client 1 is now connected!
30052019 16:19:36 ERROR Logs.TransactionLogManager - FLAG - OnStart() Finished
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...