2013-04-09 2 views
0

I'v created C# проект с обработанным ядром портирован с C++ - ядро ​​просто выполняет задание - получает простые данные, обрабатывает его и возвращает некоторый результат, как снова простые данные.Странное поведение приложения при работе в качестве службы Windows

Этот проект работает нормально при работе в качестве консольного приложения:

MainProcess main = new MainProcess(); 
main.Run(); //starts thread with main 
main.Join(); //prevent main thread from terminating 

Когда я изменить это запустить как простейший процесс окон, с MainProcess main = new MainProcess(); по инициализации, main.Run() на старте и main.Abort() \\ aborts thread with main на остановить ядро ​​перестает работать правильно.

Ядро - это некоторое детерминированное состояние, которое не знает ничего, кроме самого себя. Он получает одинаковые данные, но возвращает худший результат, когда все приложение работает как служба.

Я проверил, это не проблема.

У вас есть идеи, что может пойти не так? Это точно такой же код с этим небольшим изменением. Он возвращает всегда тот же результат для одних и тех же данных (одинаковый для всех консольных исполнений и одинаковый для всех служб Windows).

Итак, мой вопрос: что же это отличает его, когда программа работает как консольное приложение или как служба Windows?

+3

Что означает «ядро перестает работать правильно»? Вы не указали никакой информации, которая могла бы идентифицировать проблему, потому что вы не сказали нам, в чем проблема, в первую очередь. «перестает работать» не помогает, если вы не объясните, что это значит. «возвращает худший результат» также ничего нам не говорит, потому что «худший результат» снова не имеет значения никому, кроме вас. Мы не можем читать ваши мысли или видеть ваш код здесь. :-) Вам нужно объяснить проблему, если вы хотите, чтобы мы помогли вам решить эту проблему. –

+0

@KenWhite Я не думаю, что проблема с самим ядром. Он работал до портирования, он работал после переноса в консольное приложение. Код довольно длинный и очень сложный. Вопрос в том, какая разница, когда программа работает как приложение консоли или приложение для Windows, поэтому я и люди в подобной ситуации могли бы знать, с какой стороны они должны его отлаживать. – Ari

+0

Как я уже сказал, вы ничего нам не рассказали о проблеме. Это касается конкретных вопросов, а не «Можете ли вы рассказать о том, что может быть причиной проблемы, о которой я вам не скажу?» дискуссии. Если вы не скажете нам, каким образом это сломано, мы не можем сказать вам, что не так, или как вы можете это исправить. Ваш вопрос должен быть ясным и описывать фактическую проблему, или он скорее всего будет закрыт как «слишком локализованный» или «не настоящий вопрос». –

ответ

1

Проблема была в некоторых относительных дорожках.

Например:

... 
OpenFile("file.ext"); 
.. 

И file.ext существует в бен директории с Program.exe.

Это работает, когда вы запускаете это как консольное приложение, но когда вы пытаетесь запустить это как сервис Windows, тогда корневой каталог будет другим, и программа не найдет file.ext.