Служба Windows на C#: потоки не запускаются в режиме выпуска, но нормально работают в режиме отладкиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Служба Windows на C#: потоки не запускаются в режиме выпуска, но нормально работают в режиме отладки

Сообщение Anonymous »

У меня есть служба Windows, написанная на C#, которая прекрасно работает в режиме отладки, но когда я собираю и запускаю ее в режиме выпуска, запускаемые мной потоки (AcceptTCPClient, TCPSender и SyncMonitorOpenWindows), похоже, не выполняются. Сама служба запускается (подтверждается журналом событий), но ни один из потоков, похоже, не работает.
Вот фрагмент моего кода:
protected override void OnStart(string[] args)
{
try
{
string source = "MyRemoteAgent";
_serviceIsRunning = true;
JsonFileManager.ClearJsonFile();

if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, "Application");
}

EventLog.WriteEntry(source, "MyRemoteAgent started.");

// Starting threads
new Thread(AcceptTCPClient).Start();
new Thread(TCPSender).Start();
new Thread(SyncMonitorOpenWindows).Start();
}
catch (Exception ex)
{
EventLog.WriteEntry(source, $"Error in OnStart: {ex.Message}", EventLogEntryType.Error);
}
}

В режиме отладки служба работает должным образом, и все три потока выполняются без каких-либо проблем.
В режиме выпуска служба запускается (проверено через Event Log), но потоки, похоже, не выполняются.
Исключения не перехватываются в блоке catch.
Как устранить эту проблему в режиме выпуска? Есть ли лучший подход к запуску потоков в службе Windows на C#?
Что я пробовал:
  • Добавлено дополнительное ведение журнала, чтобы проверить, запускаются ли потоки, но в режиме выпуска журналы не отображаются.
  • Отключена оптимизация компилятора для конфигурации выпуска, но проблема остается.
  • Заменен новый Thread().Start() на Task.Run(), но поведение такое же.
  • Проверено, что все зависимости присутствуют в папке Release.
  • Добавлен Thread.Sleep () после запуска потоков, чтобы дать им время на инициализацию, но это не помогло.
private void AcceptTCPClient()
{
try
{
TcpListener listener = new TcpListener(IPAddress.Any, 6357);
listener.Start();
JsonFileManager.InitializeJsonFile();

while (_serviceIsRunning)
{
TcpClient tcpClient = listener.AcceptTcpClient();
ServiceProcess serviceProcess = new ServiceProcess(_commandsToSend);
Client client = new Client(tcpClient, serviceProcess);
client.AddConnection();
}

listener.Stop();
}
catch (Exception ex)
{
EventLog.WriteEntry("MyRemoteAgent", $"Error in AcceptTCPClient: {ex.Message}", EventLogEntryType.Error);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-fine-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»