C#文件系统监视程序-查找触发事件的用户
我构建了一个windows服务来监控我们的共享网络文件夹(NAS)。当创建、重命名、删除任何文件夹时,我都能够将日志写入事件查看器。我的最终目标是找到“该文件夹是由谁创建、重命名或删除的”,并将其用户名或LanID包含到事件查看器日志中 我只是在寻找下一步如何处理的线索。下面是我目前的代码C#文件系统监视程序-查找触发事件的用户,c#,filesystemwatcher,C#,Filesystemwatcher,我构建了一个windows服务来监控我们的共享网络文件夹(NAS)。当创建、重命名、删除任何文件夹时,我都能够将日志写入事件查看器。我的最终目标是找到“该文件夹是由谁创建、重命名或删除的”,并将其用户名或LanID包含到事件查看器日志中 我只是在寻找下一步如何处理的线索。下面是我目前的代码 public partial class NasFolderMonitor : ServiceBase { public const string MyServiceName = "NASFo
public partial class NasFolderMonitor : ServiceBase
{
public const string MyServiceName = "NASFolderWatcher";
private System.Diagnostics.EventLog eventLog;
public NasFolderMonitor()
{
InitializeComponent();
eventLog = new System.Diagnostics.EventLog();
eventLog.Source = "NasMonitorLog";
eventLog.Log = "NasMonitorLog";
}
public void NASFolderWatcher()
{
if (!EventLog.SourceExists("NasMonitorLog"))
{
EventLog.CreateEventSource("NASFolderWatcher", "NasMonitorLog");
}
// Create a new FileSystemWatcher with the path
FileSystemWatcher NasWatcher = new FileSystemWatcher("Share Path here");
NasWatcher.IncludeSubdirectories = true;
NasWatcher.Changed += new FileSystemEventHandler(OnChanged);
NasWatcher.Created += new FileSystemEventHandler(OnChanged);
NasWatcher.Deleted += new FileSystemEventHandler(OnChanged);
NasWatcher.Renamed += new RenamedEventHandler(OnChanged);
// Begin watching
NasWatcher.EnableRaisingEvents = true;
}
protected override void OnStart(string[] args)
{
NASFolderWatcher();
eventLog.WriteEntry("Monitoring Started");
}
protected override void OnStop()
{
eventLog.WriteEntry("Monitoring Stopped");
}
public void OnChanged(object source, FileSystemEventArgs e)
{
WatcherChangeTypes wct = e.ChangeType;
eventLog.WriteEntry(e.ChangeType.ToString() + "-" + e.FullPath);
}
}
不确定这是否能完全解决您的问题,但您可能能够获得文件/文件夹等的所有者(因此是创建者?)。我没有运行NAS,但请尝试以下代码,它在本地计算机上工作:
var fi = new System.IO.FileInfo(@"c:\temp\client_id.json");
var ac = fi.GetAccessControl();
var user=ac.GetOwner(typeof(System.Security.Principal.NTAccount));
Console.WriteLine(user.Value);
不确定这是否能完全解决您的问题,但您可能能够获得文件/文件夹等的所有者(因此是创建者?)。我没有运行NAS,但请尝试以下代码,它在本地计算机上工作:
var fi = new System.IO.FileInfo(@"c:\temp\client_id.json");
var ac = fi.GetAccessControl();
var user=ac.GetOwner(typeof(System.Security.Principal.NTAccount));
Console.WriteLine(user.Value);
这不可能直接从.NET实现,老实说,我也不确定它在Windows中是如何实现的,但您可能希望查看SysInternals Process Monitor实用程序以获得提示。Windows审核策略可以帮助您@JianpingLiu我无法添加审核策略,因为它已在组策略中配置为仅用于失败事件。这对我没什么帮助。除了审核策略之外,没有其他方法吗?这不可能直接从.NET中实现,我也不确定在Windows中是如何实现的,但您可能希望查看SysInternals Process Monitor实用程序以获取提示。Windows审核策略可以帮到您@JianpingLiu我无法添加审核策略,因为它已在组策略中配置为仅用于失败事件。这对我没什么帮助。除了审核策略之外,没有其他方法吗?我的主要目标是保护现有的文件夹和文件,创建文件夹或文件是我想和其他监视器过滤器一起添加的额外功能。你能给我一些其他的想法吗?当任何用户进行任何类型的更改时,我可以在哪里监视文件夹并创建事件。如果你有域控制器,我认为最好的办法是在active directory中配置这些内容,这样人们就不能修改或删除这些内容。我们现在有不同的用户组,他们可以访问该NAS共享位置,并且不能真正接触修改高程的选项。我的主要目标是保护现有的文件夹和文件,创建文件夹或文件是我想与其他监视器过滤器一起添加的额外功能。你能给我一些其他的想法吗?当任何用户进行任何类型的更改时,我可以在哪里监视文件夹并创建事件。如果你有域控制器,我认为最好的办法是在active directory中配置这些内容,这样人们就不能修改或删除这些内容。我们现在有不同的用户组,他们可以访问该NAS共享位置,并且不能真正接触修改高程的选项。相反,我们希望看到谁真正在做更改,因为很难联系到所有用户,询问他们是否做了任何更改。