c# - .NET 进程失去对共享的访问权限;进程重启时恢复访问
问题描述
我遇到了一个奇怪的问题,它只出现在生产中,并且只有在流程运行了几天,有时是几周之后才会出现。触发错误的代码非常简单。它正在查看报告目录以删除旧数据:
public void DeleteOldReports(){
DateTime now=DateTime.Now;
foreach(String filePath in
new DirectoryInfo(ReportPath)
.GetFiles()
.Where(x=>x.Name.StartsWith("webReport-",StringComparison.CurrentCultureIgnoreCase) && (now-x.LastWriteTime)>WebReportLifetime)
.Select(x=>x.FullName)
.ToList()
){File.Delete(filePath);}
}
调用时抛出异常new DirectoryInfo(ReportPath).GetFiles()
,这是一个简单的文件读取操作。
例外是:
System.UnauthorizedAccessException:对路径“\\inst7\appsupp\btc_webreports”的访问被拒绝。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileSystemEnumerableIterator
1.CommonInit() at System.IO.FileSystemEnumerableIterator
1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost) 在 System.IO .DirectoryInfo.InternalGetFiles(String searchPattern, SearchOption searchOption) 在 cf.core.WebReportManager.DeleteOldReports() 在 WebReportManager.cs:line 26
这个例程可以在几天或几周内正常工作,但是一旦抛出第一个异常,它将在每次访问尝试时继续抛出异常。在重新启动该过程之前,它永远不会再次工作。
现在,如果它只发生一次然后恢复,我不会担心。也许“inst7”暂时离线。或者,在确定对共享的访问方面发挥作用的域控制器或其他一些 VM 可能暂时不可用。但这不是这里发生的事情。就好像某些允许我的进程访问该路径的特定令牌或权限已过期或已被撤销。重新启动该过程会立即解决问题。
一旦进程进入这种不良状态,据我所知,就无法重新获得访问权限。尽管事实上我可以在 Windows 资源管理器中毫无问题地导航到有问题的文件夹,此外,通过“查看有效访问”进行的权限测试表明没有问题。
参与交互的所有 VM 都在 AWS 上运行 Windows 2016 Server。
我该如何解决这个问题?
最好的,
非斯都
解决方案
推荐阅读
- asp.net - 尝试将数据从excel文件填充到数据表时出现异常
- yosys - 使用带有 CircuitTikZ 的 Latex 从 yosys 中绘制原理图并将其转换为 PDF?
- python - Python程序向后打印数组中的字母
- angular - Angular Http拦截器阻止http进度事件
- vuejs2 - Vue2Leaflet 如何在打开时显示 1 弹出窗口
- ios - 通过传递字典创建 httpbody 时获取 400(错误请求)
- kubernetes - 如何在本地从谷歌云访问磁盘快照?
- vba - 如何在 ppt 中选择具有相同自定义布局或包含给定形状或文本的幻灯片?
- php - 尝试在一个查询中将数据插入 MySQL 表,但更改一个特定列
- ruby-on-rails - RoR:以 json 格式返回语句的方法?