Служба Windows запускається, але зупиняється негайно без помилок після OnStart ()

Нещодавно я перетворив програму для прослуховування TCP-порта в службу Windows, яка встановлюється та працює чудово на ноутбуці 32-розрядного Vista. Проблема полягала в тому, що після її встановлення я намагався запустити службу (через Remote Dekstop) на 64-бітному Win7, і він акуратно вручив мені помилку 1053, в основному заявляючи, що термін служби закінчився при запуску.

Тепер я отримав його для запуску без помилок, але все це - це вихід негайно, без будь-яких помилок або будь-яких eventLogging минулих OnStart. Я намагався замінити мій таймер на Threading, щоб дізнатись, чи може це статися з дивним початком, але нещасного там ... Ось метод OnStart служби і метод, який призначений для постійного запуску.

protected override void OnStart(string[] args)
    {
        myServer.Start();
        eventLog1.WriteEntry("Server started.");               
        mWorker = new Thread(StartUp);
        eventLog1.WriteEntry("Starting up CykelScore service.");
        mWorker.Start();//Start the service
        //timer.Start();             //Start the timer
    }

    private void StartUp(object arg)
    {
        while (true)
        {
            eventLog1.WriteEntry("Running.");
            if (mStop.WaitOne(10000)) return;
            {
                if (Monitor.dataCount > 0)
                {
                    string tmp = "";
                    eventLog1.WriteEntry("Antal tags: " + Monitor.dataCount.ToString());
                    lockedUp.WaitOne();
                    try
                    {
                        tmp = Monitor.PopData();
                    }
                    catch (Exception ex)
                    {
                        eventLog1.WriteEntry("Fejl:" + ex.ToString());
                    }
                    eventLog1.WriteEntry("Recieved: " + tmp);
                    string buffer = tmp;
                    string antenna = (buffer.Split(',')[0]).Replace(" ", "");
                    string time = buffer.Split(',')[2];
                    string RFIDNR = (buffer.Split(',')[1]).Replace(" ", "");

                    string[] ART = new string[3];
                    ART[0] = antenna;
                    ART[1] = RFIDNR;
                    ART[2] = time;

                    if (lastreceivedtagID == RFIDNR)
                    {
                        eventLog1.WriteEntry("Same tag as last time. No need to check database");
                    }
                    else
                    {
                        if (!DataHandler.LoggedInCurrentTimespan(ART))
                        {
                            try
                            {
                                DataHandler.SaveToLocal(ART);
                                eventLog1.WriteEntry("Data saved to local database");

                                DataHandler.SendToRemote(tmp, Monitor.server, Monitor.database, Monitor.username, Monitor.password);
                                eventLog1.WriteEntry("Data sent to remote database");
                            }
                            catch (Exception ex)
                            {
                                eventLog1.WriteEntry("Fejl" + ex.ToString());
                            }
                        }
                        else
                            eventLog1.WriteEntry("Discarding data. Already in local database");
                    }
                    lastreceivedtagID = RFIDNR;
                    lockedUp.ReleaseMutex();
                }
            }
        }
    }

Хто-небудь має уявлення про те, що може стати проблемою?

2
Я б не думав, що це 32/64 біт. Найкращий спосіб, яким я можу придумати, щоб дізнатись, яка проблема полягає в тому, щоб написати обгортку навколо вашої служби, яка викликає процедури запуску/зупинки без необхідності для менеджера послуг. Потім ви можете запустити цю програму за допомогою віддаленого сеансу налагодження і побачити, де починається процедура запуску.
додано Автор Dirk Dastardly, джерело
Припустимо, проблема у вашому методі OnStart (). Додати журнал для діагностики.
додано Автор Hans Passant, джерело
Ви використовуєте будь-які зовнішні DLL-файли?
додано Автор Erno de Weerd, джерело
Подивіться на цей погляд на події та подивіться, чи він показує якісь помилки. Ви перевірили, чи щось вже було прослуховування у порту, який ви обслуговуєте, у вікні Win7?
додано Автор user957902, джерело
Тепер я можу запустити його, але через секунду він зупиниться без попередження. Там нічого більше не слухає в порту - у мене з'являється потік на OnStart, який показує мені, що він проходить через нього і закінчує метод OnStart - але таймер, який він починає, очевидно, не може викликати наступні методи або щось інакше йде не так, що я не знаю.
додано Автор GoD1x, джерело
Не те, що я знаю (я не зробив додаток). Хоча вона все ще повинна запускатися, оскільки програма, служба pre-windows-все ще працює на сервері, я намагаюся її запустити, і я додав лише системні посилання.
додано Автор GoD1x, джерело

Відповідей немає

0
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug