2013-02-22 1 views
0

У меня есть файл UNC. Я в Сети с другими людьми. Каждый другой может открыть файл, опрокинув файл \\ файла адреса.можно записать нет подключение?

Знаю, что хочу написать программу C# в Vs2010, которая просматривает файл, который я использую Win7 32bit. Если кто-нибудь откроет файл, программа должна записать в файл журнала, чтобы кто-то открыл мой файл.

Я попытался использовать FileSystemWatcher, но это только поиск изменений/сохранения/разбиения, но не для открытия.

Я прочитал кое-что о «аудите» и что я смогу это сделать (просмотрите мой файл с файлом) с помощью этого (аудита). Но я попытался выяснить, как использовать аудит в C#, но я не нашел много.

.

Так мои вопросы:

Можно ли делать то, что я хочу с «аудит»?

Кто-то работал с аудитом в C# befor или имеет ссылку или somtihng, чтобы показать мне, как это работает в C#?

MFG Сэм

Sry для плохого английского

+0

Это то, что вам нужно: [Как проверить доступ пользователей к файлам, папкам и принтерам в Windows XP] (http://support.microsoft.com/kb/310399)? –

+0

Возможный дубликат [unc monitor with C#] (http://stackoverflow.com/questions/15019251/unc-monitor-with-c) –

ответ

1

Вы можете использовать Audit Object Access.

шаги вы должны следовать:

  1. Включить Аудит доступа объекта в политики локального компьютера.
  2. Включить аудит объекта, за которым вы хотите следовать.
  3. Из вашего приложения, используйте EventLog.EntryWritten Event для обнаружения события открытия файла

Вот упрощенное использование образца, но вам придется копаться в документации для того, чтобы захватить и войти, как вам нужно:

class Program 
{ 
    public static void Main() 
    { 

     EventLog myNewLog = new EventLog("Security", ".", "Microsoft Windows security"); 

     myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten); 
     myNewLog.EnableRaisingEvents = true; 

     Console.ReadLine(); 
    } 

    public static async void MyOnEntryWritten(object source, EntryWrittenEventArgs e) 
    { 
     await Task.Factory.StartNew(() => 
     { 
      if (e.Entry.InstanceId == 4656 || e.Entry.InstanceId == 4663) 
      { 
       Console.WriteLine(e.Entry.Message); 
      } 
     }); 
    } 
} 
+0

Да! Спасибо ! – Sam

Смежные вопросы