Как безопасно записать в файл журнала два экземпляра одного и того же приложения? - PullRequest
3 голосов
/ 19 августа 2009

У меня есть приложение, в котором одновременно может работать только 1 экземпляр, однако, если запущен 2-й экземпляр, его необходимо зарегистрировать в общем лог-файле, который также может использовать первый.

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

Итак, я хотел выяснить, какой самый безопасный способ иметь 2 отдельных экземпляра одного и того же приложения для записи в файл журнала, который обеспечит обоим возможность записи в него.

Я бы предпочел не использовать существующую дополнительную структуру, если ее можно избежать

Любая помощь приветствуется.

Ответы [ 5 ]

3 голосов
/ 19 августа 2009

A Mutex может использоваться для межпроцессной синхронизации общего ресурса, такого как файл журнала. Вот образец .

1 голос
/ 19 августа 2009

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

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

См. Этот вопрос здесь .

0 голосов
/ 19 августа 2009

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

0 голосов
/ 19 августа 2009

Почему бы не использовать протокол syslog ? Это позволит вам доставлять журналы очень стандартизированным и гибким способом. Сам протокол довольно прост, но в сети есть множество примеров, например, здесь . Если ваше приложение предназначено для корпоративного использования, наличие стандартного способа ведения журнала может быть большим плюсом. (И вам также не нужно поддерживать файлы - это становится работой специализированного программного обеспечения, которое делает именно это)

0 голосов
/ 19 августа 2009

Вы можете избежать проблемы, если предпочитаете ...

Если это приложение для Windows, вы можете сначала отправить сообщение, а затем просто выйти. После получения сообщения исходный экземпляр может записать в файл журнала без проблем.

...