如何安全地从同一个应用程序的两个实例写入日志文件?

时间:2009-08-19 15:17:27

标签: c# file logging share

我有一个应用程序,每次只能运行1个实例,但是如果启动了第二个实例,则需要将其记录到第一个也可以使用的公共日志文件中。

我检查了正在运行的实例数,我计划最初只是将其记录到事件记录器,但是应用程序可以在用户或系统上下文中运行,并且在尝试将事件日志源作为查询时抛出异常用户因为用户无法访问安全日志而取消该想法。

所以我想找出哪个最安全的方法让同一个应用程序的2个单独实例写入日志文件将确保两者都有机会写入它。

如果可以避免,我宁愿不使用现有的额外框架

任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:3)

Mutex可用于共享资源(如日志文件)的进程间同步。这是一个sample

答案 1 :(得分:1)

您始终可以写入系统事件日志。没有锁定或任何需要的东西,事件查看器比一些人认为的更强大。

在回复您的评论时,另一位用户在SO上询问了有关事件日志的写入权限的问题。答案与msdn文章有关,该文章描述了如何执行该操作。

查看问题here

答案 2 :(得分:0)

如果您愿意,可以躲避问题......

如果这是一个Windows应用程序,您可以向第一个实例发送消息,然后退出。收到消息后,原始实例可以毫无问题地写入日志文件。

答案 3 :(得分:0)

为什么不使用syslog协议?这将允许您以基于标准和灵活的方式提供日志。协议本身很简单,但网上有很多例子,例如: here。如果您的应用程序的目的地是企业用途,那么采用标准的日志记录方式可能是一个很大的优势。 (并且,您也不需要维护文件 - 它成为专业软件的一项工作)

答案 4 :(得分:0)

破解它的一种方法是对日志文件进行内存映射。这样,应用程序的两个实例共享文件的相同虚拟内存映像。然后有很多方法可以在文件中实现互斥。