Консольное приложение — не удается поймать необработанное исключение

Я написал очень простое консольное приложение C#, которое откроет отчет Crystal Report, обновит его и сохранит в виде PDF-файла в указанном месте.

При работе в VS2005 все работает нормально; PDF-файл создается, как и ожидалось. Когда я копирую .exe на мой корневой диск C: и запускаю его из командной строки, я получаю диалоговое окно, в котором говорится, что «CrystalGenerator перестал работать», но файл PDF все еще создается! Поиск возможных причин этого диалогового окна указывает на то, что произошло необработанное исключение, но все содержимое метода Main содержится в try/catch, поэтому это не может быть моей проблемой.

Глядя в журнал событий, я вижу ряд записей, в которых говорится: «Не удалось найти строку замены для индекса вставки (% 1)», но не могу найти разумного объяснения того, что это значит.

Положительным моментом является то, что если я скопирую файл в коробку с Server 2003 (там, где он предназначен для запуска), команда запустится без ошибок, но я хочу знать, почему приложение работает неправильно в Vista и как это решить.

Заранее спасибо.


person DilbertDave    schedule 28.11.2008    source источник
comment
@Kent: Спасибо за правки тегов и т. д., но это было Рождество, приятель — отключи на время ;-)   -  person DilbertDave    schedule 21.08.2009


Ответы (3)


Будет ли это работать, если вы запустите приложение из командной строки с повышенными привилегиями (WinKey, затем нажмите cmd, а затем Ctrl+Shift+Return)?

Возможно, одному из процессов, которые вы вызываете, требуется повышение прав.

person Dirk Vollmar    schedule 28.11.2008
comment
Похоже, ошибка, которую вы видите, связана с проблемой журнала событий в Vista: blogs.msdn.com/ericfitz/archive/2007/04/18/ (см. первый комментарий) - person Dirk Vollmar; 28.11.2008
comment
Вы проверили, что при отладке отладчик останавливается на всех исключениях? Посмотрите Отладка -> Исключения... и посмотрите, все ли флажки отмечены. - person Dirk Vollmar; 28.11.2008
comment
Я включил отладку неуправляемого кода и теперь получаю следующую ошибку в VS2005: необработанное исключение по адресу 0x074abc38 в CrystalGenerator.exe: 0xC0000005: нарушение прав доступа. Гуглите! - person DilbertDave; 28.11.2008
comment
он генерирует исключение в следующей строке: ReportDocument oRtp = new ReportDocument(); - person DilbertDave; 28.11.2008
comment
Пожалуйста, рассмотрите возможность редактирования вашего вопроса - похоже, Vista не была виновником, но на самом деле выявила проблему. - person Argalatyr; 01.12.2008

Если по какой-либо причине вы вызываете переполнение стека, его нельзя поймать, потому что нет способа надежно раскрутить стек вызовов.

В этой ситуации ваше приложение будет вести себя так, как вы сказали.

person FlySwat    schedule 25.12.2008

Что ж, после долгой погони за ссылками похоже, что это поведение «по замыслу»!

Джефф Этвуд, владелец StackOverflow, столкнулся с проблемой (см. здесь) и поднял этот вопрос в Microsoft Connect (см. здесь).

Похоже, я буду искать альтернативный подход, хотя код работает на сервере 2003.

Спасибо divo за ваши предложения, которые были очень полезны.

person DilbertDave    schedule 01.12.2008