背景:
我有一个文件监控服务,它使用FileSystemWatcher
类监视本地系统上文件的更改,我正在处理Created
,Deleted
,{{1}等事件}}。当触发这些事件时,我只想使用Renamed
,FileName
,FileSize
,CreationTime
,LastAccessTime
来获取文件的属性,例如LastWriteTime
,FileSystemInfo
,GET THE PROPERTIES OF THE FILE
,ALTERNATIVE
,without hanging on to the resources of the file
FileSystemInfo
上课。
问题:
虽然此服务正在运行,但我无法卸载某些程序(例如Microsoft Security Essentials)。我觉得这些服务正挂在标记为删除的文件的资源上,因为如果只运行此服务,我只能卸载这些程序。
我的问题是public void OnCreate/OnRenamed(object source, FileSystemEventArgs e)
{ FileInfo file = new FileInfo(e.FullPath);
String output = "<Event><TimeStamp>" + currentTime + "</TimeStamp>";
output += "<Name>" + action + "</Name>";
output += "<Properties><FileName>" + file.Name + "</FileName>";
output += "<FullPath>" + file.FullName + "</FullPath>";
output += "<FileSize>" + file.Length + "</FileSize>";
output += "<CreationTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.CreationTime) + "</CreationTime>";
output += "<LastAccess>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastAccessTime) + "</LastAccess>";
output += "<LastWriteTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastWriteTime = DateTime.Now) + "</LastWriteTime></Properties></Event>";
}
&amp; {我是如何{{1}}(如上所述)有效的方式{{1}}?
以下是使用{{1}}
的代码{{1}}
此致 德里克
答案 0 :(得分:2)
使用FileSystemInfo通常不会“挂起”这些文件。您必须首先弄清楚在卸载过程中导致其他程序卡住的确切原因。使用ProcessMonitor查看卸载期间正在访问的文件。该工具非常自我解释,您需要过滤文件系统活动。阅读this或谷歌浏览。
尝试一次取出一件东西进行试验。我假设当您的服务未运行时,这些程序会成功卸载。这证明确实是您的服务导致了问题。首先注释你的FileSystemInfo代码。看看问题是否消失了。然后注释掉FileSystemWatcher并查看它是否有帮助。
更新:看起来这是违规行:
file.LastWriteTime = DateTime.Now
尝试评论此分配,看看它是否解决了问题:
file.LastWriteTime /* = DateTime.Now */
这是一个错字还是你真的需要写LastWriteTime?
答案 1 :(得分:0)
您可以做的是对LastAccessTime和LastWriteTime进行每次间隔检查,并根据间隔进行一些快速数学运算,您可以确定文件是否是在间隔时间内上次访问或修改的。如果是的话,做你需要做的事。只是一个想法...