Windows Citrix环境中跨用户会话的互斥

Windows Citrix环境中跨用户会话的互斥,windows,citrix,mutual-exclusion,Windows,Citrix,Mutual Exclusion,我有一个在Citrix环境中运行的应用程序。应用程序可以由多个用户在不同的用户会话中同时运行。在我的应用程序中,我正在写入一个文件,该文件在所有用户会话中应该是互斥的。我尝试使用互斥来避免从不同的用户会话写入文件,但使用互斥失败,因为在某些情况下,不同的用户会话无法检测互斥对象是否已经创建 有谁能告诉我以下哪种方法更适合在所有用户会话中实现互斥: 使用命名管道: 若命名管道已经存在,那个么应用程序将等待管道被打开它的应用程序实例关闭。否则,创建命名管道以指示获取锁 使用锁定文件: 在磁盘上创建一

我有一个在Citrix环境中运行的应用程序。应用程序可以由多个用户在不同的用户会话中同时运行。在我的应用程序中,我正在写入一个文件,该文件在所有用户会话中应该是互斥的。我尝试使用互斥来避免从不同的用户会话写入文件,但使用互斥失败,因为在某些情况下,不同的用户会话无法检测互斥对象是否已经创建

有谁能告诉我以下哪种方法更适合在所有用户会话中实现互斥:

  • 使用命名管道: 若命名管道已经存在,那个么应用程序将等待管道被打开它的应用程序实例关闭。否则,创建命名管道以指示获取锁
  • 使用锁定文件: 在磁盘上创建一个普通文件,指示在需要解锁时获取锁定和删除

  • 您不需要使用锁定文件。您可以使用内置的文件系统共享机制


    通过调用打开文件时,您可以使用
    dwShareMode
    参数确定后续尝试打开文件时的共享访问权限。例如,将此设置为0,其他进程将无法打开该文件。

    谢谢。但我希望在其他进程完成写入该文件的任务后打开。基本上是相互的exclusion@aJ当一个进程完成写入时,它调用文件句柄上的
    CloseHandle
    ,然后它就可以再次使用了。基本上,文件系统的接口已经为您实现了互斥。你真的不应该尝试任何其他方法!但该进程必须等待另一个进程调用CloseHandle。OS是否支持任何机制来“知道”另一个进程何时完成其写入?@aJ如果写入速度快且几乎没有争用,那么您可以使用睡眠循环。否则,你可以回到你的互斥锁,使用全局名称空间,而不是本地名称空间,我猜这是你以前做错的。啊!全局命名空间--这可能对我有帮助。让我试试。谢谢。