问题描述
我正在编写一个实用程序,它必须跟踪安装。
此安装在我的计算机上创建了哪些目录和文件。
语言是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 实现。