【问题标题】:How can I set file permissions to prevent anyone else from taking exclusive lock on my file?如何设置文件权限以防止其他人对我的文件进行独占锁定?
【发布时间】:2012-09-03 17:43:23
【问题描述】:

我想使用 C#/.NET 在 Windows 7 主机上打开文件以进行追加。为此,我想使用通常的文件输出操作。我找到了这样的解决方案:

FileStream trace_fd = new FileStream(r"c:\temp\testlog.txt", 
                                     FileMode.Append, 
                                     FileAccess.Write, 
                                     FileShare.ReadWrite)

即使上面一行的程序已启动并正在运行,我的跟踪文件也是可读的。从这样的正确代码中,我不再有文件被另一个进程使用的异常:

FileStream good_logreader_fd = new FileStream("c:\temp\testlog.txt", 
                                              FileMode.Read, 
                                              FileAccess.Read,
                                              FileShare.ReadWrite)

然后我有另一个程序(错误的日志扫描器)有这样的行:

FileStream bad_logreader_fd = new FileStream("c:\temp\testlog.txt", 
                                             FileMode.Read, 
                                             FileAccess.Read, 
                                             FileShare.None)

这样的行显然是日志扫描器的一个错误。如果我的程序没有运行,那么有缺陷的 logscaner 将获得排他锁,并且我的程序的后续运行将无法获取跟踪文件的 fd。

我的问题是我能做些什么来防止这种可怕的情况发生。 例如。我可以为跟踪文件设置文件权限以防止任何人获得排他锁吗?如果是,那怎么办?还有什么可以保护我的程序免受错误日志扫描程序问题的影响吗?请注意,我必须在程序运行之间保持相同的跟踪文件名。

【问题讨论】:

    标签: c# .net file-locking


    【解决方案1】:

    您不能设置权限以允许对文件进行任何访问,但会以某种方式限制 FileShare.None,因为文件共享模式与访问权限无关。

    权限使进程(基于它运行的帐户)访问文件/资源​​。如果授予访问权限的进程可以使用它想要的任何共享模式打开文件。如果此共享模式与文件请求成功时的现有共享模式不冲突,则文件将具有此共享模式(与以前的共享模式相结合)。详情请见CreateFile- dwShareMode section。

    在您的情况下,日志阅读器需要具有打开文件的权限,因此如果它是打开文件的第一个进程,它将能够设置 ShareMode.None。正如 devshorts 所说,除了更改违规过程或破解文件访问方法(搜索“hook CreateFile”)之外,您无能为力。

    旁注:如果您的日志阅读器在与其他进程相同的帐户下运行,则权限将无济于事,因为 Windows 中没有“每个进程”权限,所有进程将共享同一用户的权限。

    【讨论】:

      【解决方案2】:

      据我所知,您无法阻止其他人在不修改其代码的情况下尝试以另一种文件访问模式打开文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2013-10-21
        • 1970-01-01
        相关资源
        最近更新 更多