2015-11-19 1 views
4

Я хотел бы добавить удобный файл блокировки на программное обеспечение, работающее под Windows, (Windows 7 в основном), написанный в C#. Я уже достиг части блокировки файла, сохраняя используемые файлы «открытыми» в соответствующем процессе. То, что я теперь хотел бы добавить, - это признание пользователя, у которого есть файл, который в настоящее время открыт/заблокирован.Получить имя пользователя пользователя, который имеет файл открыт на сетевом диске - Microsoft Office Style

Доступные файлы лежат на сетевом диске , который используется различными пользователями на разных компьютерах. Когда файл заблокирован, а второй пытается открыть файл, ему следует столкнуться с диалогом, аналогичным диалоговому окну «Файл в использовании» из программ Microsoft Office. Там также отображается имя пользователя, в настоящее время редактирование файла.

Я нашел решения для выяснения процессов, у которых есть определенный файл open (используется этот: How do I find out which process is locking a file using .NET?) , и я также могу прочитать имя пользователя, который создал этот процесс из него. Однако при открытии заблокированного файла на сетевом диске имя пользователя, полученное таким образом, всегда является моим собственным, а не одним из пользователей, блокирующих файл.

Есть ли у кого-нибудь идеи, как можно достичь этого? Я имею в виду, что Microsoft Office может сделать это на моем же ПК с теми же правами доступа. Я просто хотел бы узнать, как ...

Приветствия!

ответ

2

Офис использует очень простую технику, я расскажу об этом в .NET-терминах. Всякий раз, когда приложение Office открывает файл документа, используя FileShare.None, он также создает скрытый «файл блокировки» с именем, основанным на файле документа (например, с добавлением «.lockfile»). И записывает файл Environment.UserDomainName в этот файл. Файл создается с помощью FileOptions.DeleteOnClose и FileShare.Read и остается открытым до тех пор, пока файл документа открыт.

Закрывает файл блокировки, когда документ снова закрыт. Использование FileOptions.DeleteOnClose гарантирует, что файл блокировки исчезнет, ​​даже когда программа бомбит.

При открытии файла происходит нарушение блокировки, он ищет файл блокировки и считывает имя пользователя. Легкий peasy, простой для реализации. Но может, конечно, работать только в том случае, если это одно конкретное приложение, которое открывает файл.

+0

Спасибо за ваш вклад. Это полностью делает работу! – lorrrris

Смежные вопросы