我如何确定哪些文件是由特定进程在 c# windows OS 中以编程方式创建或操作的

问题描述

我正在编写一个实用程序,它必须跟踪安装。

此安装在我的计算机上创建了哪些目录和文件

语言是c#.net,操作系统是windows。

到目前为止,我使用了 FileWatcher,这是前进的一步,但是您必须清理很多操作系统噪音,它使最终结果,带有文件系统更改的文本文件,并且易于出错,导致无法使用。

我什至对其进行了过滤,以便仅跟踪运行安装的用户 (BUILTIN\Administrators) 的事件,但仍然存在大量噪音。

.
.
.

owner = (new FileInfo(e.FullPath).GetAccessControl().Getowner(typeof(SecurityIdentifier)).Translate(typeof(NTAccount)) as NTAccount).Value;

if (owner.Contains("BUILTIN\\" + "Administratorer"))
   {
      eventList.Add(">" + e.FullPath + "<" + e.ChangeType + ":" + owner);
   }
.
.
.

我也尝试过使用微软的“handle64.exe -p processname.exe”的输出,但它只拍了一个快照,并且在安装过程中无法继续运行。

有没有人知道如何在 c# 中实现它,或者是否有可能。

非常感谢您的时间和精力

解决方法

您将需要使用 windows api 函数来确定哪些进程具有您要查找的文件的句柄,特别是 NtQuerySystemInformation api 函数来查询所有句柄,这可以通过 P/Invoke 实现。