Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从同一应用程序的两个实例安全地写入日志文件?_C#_File_Logging_Share - Fatal编程技术网

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

C# 如何从同一应用程序的两个实例安全地写入日志文件?,c#,file,logging,share,C#,File,Logging,Share,我有一个应用程序,每次只能运行一个实例,但是如果启动了第二个实例,则需要将其记录到第一个实例也可以使用的公共日志文件中 我已经检查了有多少实例正在运行,我本来打算简单地将其记录到事件记录器中,但应用程序可以在用户或系统上下文中运行,并且在尝试以用户身份查询事件日志源时会抛出异常,因此idea将被废弃,因为用户无法访问安全日志 因此,我想找出将同一应用程序的两个独立实例写入日志文件的最安全方法是什么,以确保两者都有机会写入日志文件 如果可以避免,我宁愿不使用现有的附加框架 谢谢你的帮助 A可用于共

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

我已经检查了有多少实例正在运行,我本来打算简单地将其记录到事件记录器中,但应用程序可以在用户或系统上下文中运行,并且在尝试以用户身份查询事件日志源时会抛出异常,因此idea将被废弃,因为用户无法访问安全日志

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

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


谢谢你的帮助

A可用于共享资源(如日志文件)的进程间同步。这里有一个答案。

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


如果这是windows应用程序,您可以先向第一个实例发送消息,然后退出。收到消息后,原始实例可以写入日志文件而不会出现任何问题。

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

您可以随时写入系统事件日志。无需锁定或其他任何操作,事件查看器比一些人认为的更健壮

在回复您的评论时,另一个用户询问了关于事件日志的写入权限的问题。答案链接到msdn文章,该文章描述了如何执行此操作


查看该问题。

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

正如我在上面发布的那样,我尝试了这个方法,但在应用程序以用户身份运行时遇到了问题。有没有办法避免这种情况?如前所述,另一个实例可能是在系统或用户帐户下运行的,不保证会首先启动哪个实例并更新到此处的a问题链接,以便回答您的安全问题。