如何使用C#确定哪个帐户修改了共享文件夹中的文件

如何使用C#确定哪个帐户修改了共享文件夹中的文件,c#,shared-directory,C#,Shared Directory,我正在尝试确定使用C#修改共享文件夹中文件时使用的用户帐户 如果程序在具有共享文件夹的计算机上运行,则没有问题。您应该创建一个包含文件系统监视程序的Windows服务。从这里,您可以确定是哪个用户修改了引发OnChanged事件的文件 watcher.Changed += new FileSystemEventHandler(OnChanged); private static void OnChanged(object source, FileSystemEventArgs e) {

我正在尝试确定使用C#修改共享文件夹中文件时使用的用户帐户


如果程序在具有共享文件夹的计算机上运行,则没有问题。

您应该创建一个包含
文件系统监视程序的
Windows服务
。从这里,您可以确定是哪个用户修改了引发
OnChanged
事件的文件

watcher.Changed += new FileSystemEventHandler(OnChanged);

private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
    Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

侦听文件系统更改通知,并在目录或目录中的文件更改时引发事件


我可以考虑两个选项来确定哪个帐户修改了文件:

  • 审核:如果启用审核(通过本地安全策略),则可以将共享文件夹设置为审核成功的写入访问。这将告诉您哪些用户打开文件进行写访问,而不是那些实际执行写操作的用户。然后,您可以从任何计算机上监视具有共享文件夹的计算机上的安全日志,并查看用户对这些文件具有写访问权限

  • 进程监视:您可以使用共享文件夹在计算机上运行,并让它将日志写入文件。然后,您可以定期检查日志,查看是否有对文件的实际写入。请注意,这将告诉您该进程编写了什么进程以及该进程在哪个用户下运行,但不一定是该进程当时模拟的用户

  • 组合:为了知道哪些用户执行了实际写入,您可能必须组合审核日志和进程监视日志,以查看写入线程在写入时模拟的用户


  • -我认为只有审计政策才能做到这一点。在您可以读取谁访问文件的事件之后。好主意,但是
    FileSystemEventArgs
    不会告诉您用户是谁。Windows操作系统不跟踪上次修改文件的用户。我所能想到的任何操作系统(Linux、Mac…)也没有@hunter:正如ttymatty所说,
    FileSystemWatcher
    只告诉您文件已经更改,而不是谁更改了它。您不知道如何通过知道文件已更改来确定用户。这很重要,因为现在还不清楚这是否可能。