2013-11-12 3 views
0

У меня есть служба Windows, которая каждые 20 секунд просыпается и смотрит в очередь отчетов и выполняет программу на основе того, что находится в очереди отчетов. Если я запускаю программу отчета самостоятельно, тогда она работает без проблем. Если он выполняется из службы я получаю следующее сообщение об ошибке в журнале событий ...Выполнение неинтерактивной программы из службы Windows

Application: cqrAbandonedCallsRpt.exe 
    Framework Version: v4.0.30319 Description: 
     The process was terminated due to an unhandled exception. 
      Exception Info: System.TypeInitializationException Stack: at 
       CallQueueReport.cqrAbandonedCallsRpt.Main(System.String[]) 

Там нет дополнительной информации в журнале. Я прокомментировал весь код в основной функции, и я все еще получаю ошибку. Также служба работает под учетной записью администратора.

Любая идея, что может вызвать проблему?

ответ

2

Похоже, проблема заключается не в методе Main, а в инициализаторе типа для класса, который содержит Main. Возможно, в статическом поле, которое инициализируется inline в классе? Нечто подобное ?:

class Program 
{ 
    // this... 
    static string someValue = SomeObject.FetchSomeValue(); 

    static void Main(string[] args) 
    { 
     // no code here 
    } 
} 

TypeInitializationException вы видите, вероятно, заслоняя (возможно внутреннее исключение) фактические ошибки, которая происходит. Попробуйте удалить все исходный код инициализации из класса и инициализировать значения в качестве первого шага в Main(), затем вы можете обернуть код инициализации в try/catch и зарегистрировать фактическую ошибку, которая имеет место, поэтому вы можете осмысленно устранить основную причину.

(По моему опыту, TypeInitializationException только короткий способ сказать ThereIsTooMuchUnvalidatedLogicAtTheClassLevelAndYouShouldPutItInAMethodException.)

+0

Спасибо, я закомментировать все статические переменные и пошел вниз, пока я не нашел проблему. – Gary

Смежные вопросы