Взаимное исключение между сеансами пользователей в среде Citrix - PullRequest
1 голос
/ 07 марта 2011

У меня есть приложение, которое работает в среде Citrix.Приложение может запускаться одновременно несколькими пользователями в разных пользовательских сеансах.В моем приложении я пишу в файл, который должен быть взаимоисключающим для всех пользовательских сессий.Я пытался использовать Mutex, чтобы избежать записи в файл из разных пользовательских сеансов, но использование Mutex не удалось, так как в некоторых сценариях разные пользовательские сессии не могли определить, был ли объект Mutex уже создан.

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

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

1 Ответ

3 голосов
/ 07 марта 2011

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

Когда вы открываете файл, вызывая CreateFile(), вы определяете доступ для совместного использования для последующих попыток открыть файл с помощью dwShareModeпараметр.Например, установите для этого параметра значение 0, и никакой другой процесс не сможет открыть файл.

...