Служба Windows не может запустить поток в Win 2003 Server - PullRequest
0 голосов
/ 12 ноября 2009

Моя служба Windows может запускать потоки (в соответствии с делегатом ThreadStart) в Win XP, но в Win 2003 Server она не может, и не выдает исключение ... поток просто не запускается.

Я сделал тестовую Службу Windows, которая имеет одинаковый код в обработчике событий (OnStart), и она работала как на Win XP, так и на Win 2003 Server, что сводит меня с ума, я не знаю, что не так с моей исходной службой почему это не может начать поток.

вот код как в моем Win Service с проблемой, так и в тестирующем Win Service, который работал просто отлично:

    private Thread trd;
    StreamWriter sw;
    int i = 0;


    protected override void OnStart(string[] args)
    {
        // TODO: Add code here to start your service.
        sw = new StreamWriter("c:\\TestingService.txt", true);

        trd = new Thread(new ThreadStart(this.LoopingThread));
        trd.IsBackground = false;
        trd.Priority = ThreadPriority.Highest;
        trd.Start();
    }

    protected override void OnStop()
    {
        // TODO: Add code here to perform any tear-down necessary to stop your service.
    }

    private void LoopingThread()
    {
        while (i < 100)
        {
            lock (sw)
            {
                sw.WriteLine("hello from thread i="+i.ToString());
                sw.Flush();
            }
            i++;
            Thread.Sleep(1000);
        }
    }

этот код "точно" идентичен на обоих сервисах Win. мой оригинальный сервис (у которого есть проблема) получил много ссылок на другие библиотеки DLL, и его список «Использование»:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Xml;
using System.Security.Principal;
using System.Reflection;
using System.Threading;
using System.Management;

и другие операторы использования, относящиеся к некоторым конфиденциальным DLL (сторонние организации) но на самом деле я не создаю никакой объект ... эффективный код - это то, что я опубликовал.

Я не могу понять, почему моя служба Win не может запускать потоки на Win 2003 Server

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Поместите вызов System.Diagnostics.Debugger.Break () в начале вашего метода OnStart () и скомпилируйте в отладочном режиме. При запуске службы вам будет предложено начать сеанс отладки. Оказавшись в отладчике, откройте диалоговое окно «Исключения» в меню «Отладка» и проверьте столбец «Брошенный» для исключений общего времени выполнения. Ваш сервис будет остановлен, если возникнет исключение.

Если бы мне пришлось угадывать, я бы сказал, что причина, по которой ваш поток не запускается, в том, что он не зашел так далеко. Исходя из предоставленного вами кода, я бы сказал, что создание StreamWriter по какой-то причине не удается. Например, у вас могут не быть разрешения на запись на диск C на компьютере с Win 2003 Server.

0 голосов
/ 25 ноября 2009

Это было решено очень глупо !! Я просто создал другой класс в моей службе Windows, скопировал в него весь код, а затем заставил код в program.cs создать экземпляр этого класса вместо старого класса обслуживания.

После этого все работало нормально, я не знаю, что случилось !!

Спасибо всем, кто пытался помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...