Моя програма C # повертає 0xE0434352 до Планувальника завдань Windows, але вона не аварійно завершує роботу


76

Я написав декілька програм C #, які я запускаю за допомогою планувальника завдань Windows. Вони успішно працюють (як я бачу з файлів журналів, які вони пишуть), але планувальник завдань Windows показує, що вони повертають останній результат запуску 0xE0434352. Чи потрібно щось робити в моїй програмі C #, щоб вона повертала код успіху до планувальника завдань Windows?


Що робить ваше завдання?
Ta01


Завдання виконує мою програму C # з аргументом -a. Додаток виконується в звичайному режимі, і він не виходить з ладу, тому я не впевнений, чому схоже, що планувальник Windows отримує код помилки.
Kynrek

48
Ваше припущення про те, що воно не падає, не є правильним. 0xe0434352 - це код винятку CLR низького рівня. Вперед, написавши обробник подій для AppDomain.CurrentDomain.UnhandledException і ввімкніть значення e.ExceptionObject.ToString ()
Ганс Пассант

5
Дякую Гансе, ти був правий. ця стаття допомогла мені налаштувати рівномірний обробник, як ви запропонували msdn.microsoft.com/en-us/library/…
Kynrek

Відповіді:


91

Інший варіант - просто використовувати журнал програм, доступний через засіб перегляду подій Windows. Помилка .Net буде записана до журналу програм.

Ви можете побачити ці події тут:

Переглядач подій (локальний)> Журнали Windows> Програма


+1: Так легше виявити помилку. У моєму випадку моя програма повинна була надіслати електронне повідомлення під час винятку, і smtp був неправильно налаштований у файлі налаштування. Навіть програма ніколи не переходила до блоку catch, помилка траплялася. Виправлення конфігурації вирішило проблему.
Баз Гувенкая

3
Журнал подій у моєму випадку включав трасування стека, дуже корисне.
було

3
Щоб бути абсолютно педантичним, зауважте, що в журналі подій можуть бути дві помилки. Не зосереджуйтесь лише на останньому; перший може містити більш цікаву інформацію.
RenniePet

1
У Win10 (можливо, і в інших) шлях у засобі перегляду подій: EventViewer / Журнали Windows / Програма
MikeH

Стек винятку .NET реєструється під джерелом.NET Runtime
riQQ

40

При налаштуванні завдання в новому вікні у вас є два поля " програма / сценарій " і " Почати в (необов'язково) ". Помістіть назву програми на перше, а розташування програми на друге. Якщо ви цього не зробите, і ваша програма почнеться не в каталозі з exe, вона не знайде файли, які в ній знаходяться.


7
Точно так. Якщо ви використовуєте відносні шляхи у своєму коді, вам потрібно вказати місце розташування програми. Зазвичай це шлях до файлу exe.
Krisztián Balla

Я просто хочу зазначити, що це дуже протилежне інтуїтивно зрозуміле від MS.
Керол

25

Ганс Пасант був правильним, я додав обробник для AppDomain.CurrentDomain.UnhandledException, як описано тут http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.71).aspx Я був вдалося знайти виняток, що відбувся, і виправити його.


Я додав обробник, як описано, і виняток зник. Думаю, я ніколи не дізнаюсь ...
Ерік Нельсон,

12

Я посилався на зіставлений диск, і виявив, що відображені диски не завжди доступні для облікового запису користувача, який виконує заплановане завдання, тому я використовував \\IPADDRESSзамість цього, MAPDRIVELETTER:і я працюю.


У мене була подібна проблема, коли недоступний мережевий шлях UNC (різні користувачі), і я спробував за допомогою менеджера облікових даних додати потрібну інформацію про обліковий запис.
dakab

7

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


Це був той. Моя програма пише запис у папку, відмінну від папки, з якої вона працювала.
MartinH

2

У мене виникла ця проблема, і це пов’язано з версією .Net framework. Я оновив збірку до фреймворку 4.0, але, здавалося, це вплинуло на деякі комм-файли, які використовувала програма. Я повернувся до фреймворку 3.5, і він працював нормально.


Мені потрібно знизити оцінку своєї версії, але тоді я отримую помилку перевстановлення багатьох бібліотек DLL, а також мій веб-сайт не може працювати.
baymax

2

Я отримав ту ж помилку, але виправив її, змінивши шлях читання файлу з "ConfigFile.xml" на AppDomain.CurrentDomain.BaseDirectory.ToString () + "ConfigFile.xml"

У моєму випадку ця помилка через помилку шляху до файлу, оскільки диспетчер завдань запускає програму з "System32" як початковий шлях, але папка, яку ми думали.


1

Я отримував те саме повідомлення повідомлення в dotNet Core 2.2 за допомогою MVC 5, однак нічого не реєструвалось у засобі перегляду подій Windows.

Я виявив, що змінив Project sdk з Microsoft.NET.Sdk.Webна Microsoft.NET.Sdk.Razor(видно у projects.csprojфайлі). Я змінив це назад, і воно працювало нормально :)


0

У моєму випадку це було тому, що я мав вікна повідомлень. Коли я прокоментував цей код, він почав працювати. Я згадав, що це може бути проблемою, коли я переглянув журнал подій, як пропонується в цій темі. Всім дякую!


0

Я зіткнувся з цією проблемою під час роботи з COM-об'єктами. За певних обставин (з моєї вини) я знищив зовнішній процес .EXE, у паралельному потоці змінна намагалася отримати доступ до інтерфейсу com app.method і стався збій на рівні COM. Планувальник завдань це помітив і вимкнув програму. Але якщо ви запускаєте програму в консолі і не обробляєте виняток, програма продовжить працювати ...

Зверніть увагу, що якщо ви використовуєте некерований код або зовнішні об'єкти (AD, Socket, COM ...), вам потрібно їх контролювати!


-1

Це проблема видачі дозволу в моєму випадку, у планувальника завдань є користувач, який не має дозволу на сервері, на якому знаходиться база даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.