我已经制作了一个C#程序,出于授权的原因,我想限制并发用户的数量。
程序本身(exe文件)是本地安装的,数据文件(不是数据库)存储在服务器上的共享驱动器上。
我的想法是有一个锁文件,程序的每个实例都保留一个ReadWrite句柄。
然后我会把打开的文件句柄数到锁文件。当句柄数达到5个时,我会拒绝更多的句柄,并且不允许程序启动,
类似于:
FileStream fileStream = new FileStream(@"f:\blabla\lock.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
if (filestream.CountFileHandles()>5) return false; 但我不知道怎么算锁文件的打开文件句柄。
我不想在锁文件里写任何东西。数一下手柄。
或者我走错了路,有人可以引导我找到一个更好的解决方案,如何限制并发用户的数量。
发布于 2020-12-08 17:22:34
它很脏,但这可能只是起作用.
您预先准备了尽可能多的锁文件,就像允许并发用户一样。因此,如果您允许10个用户,那么它将是:
f:\blabla\lock0.txt,f:\blabla\lock1.txt,.,f:\blabla\lock9.txt
要获得“许可证”,程序将遍历所有文件,尝试以独占模式()读取每个文件:
File.open(f, FileMode.Open, FileAccess.ReadWrite, FileShare.None)继续尝试0..9,直到对其中一个文件成功(在这种情况下,您现在拥有了许可证),或者您尝试了所有这些文件(在这种情况下,您没有得到一个)。
无论何时退出程序,都要尽可能干净地关闭文件,使其工作得更好。
最终,总是有问题的家庭滚动许可证解决方案。如果它不仅仅是少数并发用户,那么某种服务器解决方案会更好,可能是您没有自己编写的解决方案。
https://stackoverflow.com/questions/65203249
复制相似问题