每当他尝试使用我的产品时,我的一位客户就遇到了例外。我获得了发生的异常的调用堆栈,其顶部是:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.__Error.WinIOError()
at System.IO.Path.GetTempFileName()
at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
at System.Windows.Input.Cursor..ctor(Stream cursorStream)
对此进行了谷歌搜索,我发现大量博客文章指出%TEMP%文件夹中有超过65535个临时文件时抛出此异常,并且解决方案是简单地清除旧的临时文件。我可以请客户这样做,但这可能只是一个临时解决方案-如果他们定期运行其他一些软件,该软件频繁调用GetTempFileName,这将使问题反复发生吗?
我不能只是以编程方式清除%TEMP%文件夹,因为这可能会以某种方式损坏其他内容,并且我无法避免调用GetTempFileName(并使用我自己的临时文件夹),因为不是我而是WPF代码在调用它。
是否有永久解决方案?
更新:我已经确认%TEMP%文件夹中的日志文件溢出的问题不是由我自己的代码引起的,而一定是由客户计算机上的某些其他第三方应用程序引起的。我还研究了的实现,Cursor.LoadFromStream它肯定没有错-它会生成一个临时文件,然后在finally块中将其删除。