【问题标题】:How to safely write to a log file from two instances of the same application?如何从同一应用程序的两个实例安全地写入日志文件?
【发布时间】:2009-08-19 15:17:27
【问题描述】:

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

我已经检查了有多少实例正在运行,并且我计划最初只是将其记录到事件记录器中,但是应用程序可以在用户或系统上下文中运行,并且在尝试将事件日志源查询为用户,因此该想法被废弃,因为用户无法访问安全日志。

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

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

任何帮助表示赞赏。

【问题讨论】:

    标签: c# file logging share


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      看到那个问题here

      【讨论】:

      • 正如我在上面发布的那样,我尝试了这个,但在以用户身份运行应用程序时遇到了问题。有什么办法可以避免这种情况吗?如前所述,另一个实例可能在系统或用户帐户下运行,不能保证哪个会首先启动
      • 已更新以链接到 SO 上的问题,以回答您的安全问题。
      【解决方案3】:

      如果你愿意,你可以避开这个问题......

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

      【讨论】:

        【解决方案4】:

        为什么不使用syslog 协议?这将允许您以非常基于标准和灵活的方式交付日志。协议本身很简单,但是网上有很多例子,例如here。如果您的应用程序是为企业使用而设计的,那么拥有标准的日志记录方式可能是一大优势。 (而且,您也不需要维护文件 - 它成为了专门软件的工作)

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2014-09-20
            • 2012-12-30
            • 1970-01-01
            • 2014-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-09
            • 1970-01-01
            相关资源
            最近更新 更多