如何使用C#确定哪个帐户修改了共享文件夹中的文件
我正在尝试确定使用C#修改共享文件夹中文件时使用的用户帐户如何使用C#确定哪个帐户修改了共享文件夹中的文件,c#,shared-directory,C#,Shared Directory,我正在尝试确定使用C#修改共享文件夹中文件时使用的用户帐户 如果程序在具有共享文件夹的计算机上运行,则没有问题。您应该创建一个包含文件系统监视程序的Windows服务。从这里,您可以确定是哪个用户修改了引发OnChanged事件的文件 watcher.Changed += new FileSystemEventHandler(OnChanged); private static void OnChanged(object source, FileSystemEventArgs e) {
如果程序在具有共享文件夹的计算机上运行,则没有问题。您应该创建一个包含
文件系统监视程序的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
只告诉您文件已经更改,而不是谁更改了它。您不知道如何通过知道文件已更改来确定用户。这很重要,因为现在还不清楚这是否可能。