ما المستخدم الذي تسبب في أحداث ملفات filesystemwatcher؟

StackOverflow https://stackoverflow.com/questions/1286137

  •  18-09-2019
  •  | 
  •  

سؤال

على سبيل المثال، يمكنني التقاط حدث حذف لمختلف الملفات في شجرة مجلد، ولكن كيف سأذهب حول تحديد المستخدم الذي تسبب في حذف الحذف؟

لم أستطع العثور على أي شيء واضح في وثائق MSDN ل FileSystemWatcher، لذلك ربما لم يكن ذلك ممكنا. سأكون فضوليا إذا كان هناك حل ولكن.

هل كانت مفيدة؟

المحلول

هذا ليس ممكنا حاليا مع التطبيقات الحالية لملفات filesystemWatcher لأنه لا يتلقى هذا النوع من المعلومات عند حذف ملف، أو أي شيء عن تغييرات الملفات.

نصائح أخرى

من الممكن استخدام مجلد تدقيق (خصائص المجلد> الأمان> خيارات متقدمة> التدقيق) ثم البحث عن سجل الأحداث الأمان بعد حرائق حدث FileSystemWatcher.

string GetUser(string path) {
    object nowDate = Now;
    GetUser = "Unknown";
    Threading.Thread.Sleep(1000);
    // # Search user in the security event log
    object secLog = new EventLog("Security", EVENTLOGSERVER);
    EventLogEntry entry;
    for (int i = (secLog.Entries.Count - 1); (i <= Math.Max((secLog.Entries.Count - 1500), 0)); i = (i + -1)) {
        entry = secLog.Entries(i);
        if (IsValidEntry(path, nowDate, entry)) {
            GetUser = entry.ReplacementStrings(11);
            break;
        }
    }
}

bool IsValidEntry(string path, DateTime nowDate, EventLogEntry entry) {
    return ((entry.EntryType == EventLogEntryType.SuccessAudit) 
        && ((entry.InstanceId == 560) || (entry.InstanceId == 564)) 
        && !entry.UserName.EndsWith("SYSTEM")
        && (Math.Abs(nowDate.Subtract(entry.TimeGenerated).TotalSeconds <= 20) 
        && (entry.ReplacementStrings.GetUpperBound(0) >= 11) 
        && (entry.ReplacementStrings(2).Length >= 4) 
        && path.EndsWith(entry.ReplacementStrings(2).Substring(4)));
}

لا يبدو أن هناك أي وظيفة مدمجة في .NET التي يمكن أن تساعدك في ذلك، ولكن بمساعدة الوظيفة NetFileGetInfo في Netapi32.dll، يجب أن يكون ذلك ممكنا.

إلقاء نظرة على هذا الموضوع حيث سجل المستخدم dave4dl نموذجا رمز يوضح كيفية القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top