Как безопасно записать в файл журнала два экземпляра одного и того же приложения?
Вопрос
У меня есть приложение, в котором одновременно может работать только один экземпляр, однако, если запускается второй экземпляр, его необходимо зарегистрировать в общем файле журнала, который также может использоваться первым.
У меня есть проверка количества запущенных экземпляров, и я планировал сначала просто зарегистрировать это в регистраторе событий, но приложение может работать в контексте пользователя или системы, и при попытке запросить источник журнала событий в качестве пользователя выдаются исключения, чтобы идея отброшена, поскольку журналы безопасности недоступны пользователю.
Поэтому я хотел выяснить, какой самый безопасный метод записи двух отдельных экземпляров одного и того же приложения в файл журнала будет гарантировать, что оба получат возможность писать в него.
Я бы предпочел не использовать существующую дополнительную структуру, если этого можно избежать.
Любая помощь приветствуется.
Другие советы
Вы всегда можете записать в журнал системных событий.Никаких блокировок или чего-то еще не требуется, а средство просмотра событий более надежное, чем некоторые полагают.
В ответ на ваш комментарий другой пользователь задал вопрос о правах на запись в журнал событий здесь, на SO.Ответ связан со статьей msdn, в которой описывается, как это сделать.
Посмотрите этот вопрос здесь.
Вы можете уклониться от проблемы, если хотите...
Если это приложение для Windows, вы можете сначала отправить сообщение, а затем просто выйти.Получив сообщение, исходный экземпляр может без проблем записать запись в файл журнала.
Почему бы не использовать системный журнал протокол?Это позволит вам доставлять журналы гибким и основанным на стандартах способом.Сам протокол достаточно прост, но в сети полно примеров, например. здесь.Если ваше приложение предназначено для корпоративного использования, наличие стандартного способа ведения журнала может быть большим плюсом.(И вам также не нужно поддерживать файлы — это становится работой специализированного программного обеспечения, которое делает именно это)
Один из способов взломать это — отобразить файл журнала в памяти.Таким образом, оба экземпляра приложения используют один и тот же образ виртуальной памяти файла.Кроме того, существует несколько способов реализации мьютекса внутри файла.