Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#文件系统监视程序-查找触发事件的用户_C#_Filesystemwatcher - Fatal编程技术网

C#文件系统监视程序-查找触发事件的用户

C#文件系统监视程序-查找触发事件的用户,c#,filesystemwatcher,C#,Filesystemwatcher,我构建了一个windows服务来监控我们的共享网络文件夹(NAS)。当创建、重命名、删除任何文件夹时,我都能够将日志写入事件查看器。我的最终目标是找到“该文件夹是由谁创建、重命名或删除的”,并将其用户名或LanID包含到事件查看器日志中 我只是在寻找下一步如何处理的线索。下面是我目前的代码 public partial class NasFolderMonitor : ServiceBase { public const string MyServiceName = "NASFo

我构建了一个windows服务来监控我们的共享网络文件夹(NAS)。当创建、重命名、删除任何文件夹时,我都能够将日志写入事件查看器。我的最终目标是找到“该文件夹是由谁创建、重命名或删除的”,并将其用户名或LanID包含到事件查看器日志中

我只是在寻找下一步如何处理的线索。下面是我目前的代码

    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共享位置,并且不能真正接触修改高程的选项。相反,我们希望看到谁真正在做更改,因为很难联系到所有用户,询问他们是否做了任何更改。