Возможно, необразованная предсказуемая реакция, но идея сохранить репозиторий в двоичном блобе как база данных SQLite пугает меня. Я также сомнителен из преимуществ включения wikis и средств отслеживания ошибки непосредственно в VCS - или они под-известным по сравнению с полным программным обеспечением как Trac, или VCS в широком масштабе чрезмерно увеличен в размере по сравнению с Подверсией или Базаром.
Какой идентификатор вы используете для запуска консольного приложения?
Кроме того, вы можете захотеть использовать SetConsoleCtrlHandler для захвата событий консоли. См. это сообщение в блоге для получения дополнительных сведений. У нас была аналогичная проблема, когда консольное приложение запускалось под учетной записью службы, и время от времени оно могло завершаться. Я не уверен, что вы столкнулись с этим. Дайте мне знать, я могу опубликовать код.
ОБНОВЛЕНИЕ: похоже, ваш сценарий похож на то, что мы испытали. В обработчике событий консоли вам необходимо проверить событие LogOff и вернуть значение true. Посмотрите эту статью в KB .
public static void inputHandler(ConsoleCtrl.ConsoleEvent consoleEvent)
{
if (ConsoleEvent == ConsoleCtrl.ConsoleEvent.CtrlLogOff)
return true;
return false;
}
Вам необходимо иметь аналогичный блок catch на верхнем уровне функции, с которой работает каждый поток. Если в потоке есть неперехваченное исключение, оно убьет приложение, а блок catch в основном потоке не поможет.
Это может быть функция Logging.Log, которая вызывает ваше исключение.
Это может быть память утечка. Если ваше приложение занимает слишком много памяти, Windows убьет его. Вы можете проверить, сколько памяти вы используете: если он со временем увеличивается, у вас может быть утечка памяти.
Другая возможность состоит в том, что где-то у вас есть код, вызывающий Environment.Exit (). Попробуйте выполнить полнотекстовый поиск по вашему коду, чтобы проверить еще раз. Мало ли!
Будьте осторожны; есть некоторые исключения, которые невозможно перехватить: OutOfMemoryException и StackOverflowException.
Поэтому ваша программа умрет ужасно, но тихо.
Консольная программа завершает работу при выходе из основной функции. Поскольку DoWork просто порождает несколько потоков, он сразу же возвращает управление основному элементу, а поскольку Main не имеет ничего другого, он выходит, и программа завершается. В это время также уничтожаются потоки, порожденные DoWork.
То, что это работало раньше, означает, что либо в DoWork () было что-то, что ожидало тех потоков, которые теперь сразу же возвращаются (не работают), либо эта часть все еще работает, но поток, для которого раньше требовалось много времени, теперь прерывается и возвращается сразу.
В прошлом мне удавалось заставлять программы бесследно исчезать, как и вы (без следов исключений и сообщений журнала о завершении). Почти все время это было связано с уничтожением стека (название этого веб-сайта всегда напоминает мне).
Возможно, вы внезапно пытаетесь обработать гораздо больше данных, чем обычно, или используете процедуры повторного входа, или «умно» с указателями.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой опыт работы с приложением Win32 C ++, а не C #.
Возможно, что один из потоков, порождаемых методом DoWork, генерирует исключение. По умолчанию в этом случае процесс завершается. Вы можете предотвратить это, используя событие AppDomain.UnhandledException , чтобы переопределить поведение по умолчанию.