以编程方式确定在Windows上上次修改文件的用户?

Jam*_*tis 12 c# windows network-drive

我的任务是在C#中编写一个简单的命令行实用程序,它将监视服务器上的一个目录,该目录将由多个用户访问以复制/剪切/粘贴/查看数据.我使用FileSystemWatcher来做这个,但它缺少一些功能.

是否可以确定用户或至少从访问/修改文件的位置确定计算机名称

(注意:这不一定是FileSystemWatcher,我正在寻找任何方法来做到这一点.)

Jos*_*hua 7

我认为你不能直接从C#监听这个.无论如何,并非没有主机操作系统的帮助.Windows和NTFS允许您审核特定目录并在主机的安全事件日志中记录访问(因此托管共享的服务器必须审核,而不是客户端).

来自KB310399 - 如何在Windows XP中审核用户对文件,文件夹和打印机的访问

审核文件,文件夹和打印机的用户访问权限

审核日志显示在事件查看器的安全日志中.要启用此功能:

  1. 依次单击"开始","控制面板","性能和维护",然后单击"管理工具".
  2. 双击"本地安全策略".
  3. 在左窗格中,双击"本地策略"以展开它.
  4. 在左窗格中,单击"审核策略"以在右窗格中显示各个策略设置.
  5. 双击"审核对象访问".
  6. 要审核指定文件,文件夹和打印机的成功访问,请选中"成功"复选框.
  7. 要审核对这些对象的不成功访问,请选中"失败"复选框.
  8. 要启用两者的审核,请选中两个复选框.
  9. 单击确定.

指定要审核的文件,文件夹和打印机

启用审核后,您可以指定要审核的文件,文件夹和打印机.为此:

  1. 在Windows资源管理器中,找到要审核的文件或文件夹.要审核打印机,请单击"开始",然后单击"打印机和传真"以找到它.
  2. 右键单击要审核的文件,文件夹或打印机,然后单击"属性".
  3. 单击"安全"选项卡,然后单击"高级".
  4. 单击"审核"选项卡,然后单击"添加".
  5. 在"输入要选择的对象名称"框中,键入要审核其访问权限的用户或组的名称.单击"高级",然后在"选择用户或组"对话框中单击"立即查找",可以浏览计算机以查找名称.
  6. 单击确定.
  7. 选择要审核的操作的"成功"或"失败"复选框,然后单击"确定".
  8. 单击"确定",然后单击"确定".

服务器操作系统和Windows Vista/Windows 7的过程类似.如果您采用此路线,则可以让C#程序读取事件日志(请参阅EventLog类)以查找所需的数据.

注意:从vista开始,您必须(并在需要时提升UAC)管理员才能从代码中读取它们.