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

StackOverflow https://stackoverflow.com/questions/1300629

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Посмотрите этот вопрос здесь.

Вы можете уклониться от проблемы, если хотите...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top