我可以防止无效的小转储文件名

本文关键字:转储 文件名 无效 我可以 | 更新日期: 2023-09-27 18:10:50

我有一个WinForms (. NET c#) OLTP应用。

在我们的支持环境中,我们经常会遇到与数据库连接丢失的情况,并且会生成一个迷你转储文件(由什么生成,我不完全确定)-显然它不会导致应用程序崩溃,但为了实际做任何事情,您必须关闭它并重新启动它。

在同一目录中创建了许多这样的迷你转储后,突然间迷你转储开始得到相当奇怪的文件名,文件名显然是"非法的"。在windows .

例如,我们有一个文件名:

"°÷ƒ_minidump_default_pid_20248_tid_x19AC_2015_9_1_8_31_51.dmp"

是的,回车符是文件名的一部分。

我们发现了这一点,因为log4net监视目录,并且由于这些无效的文件名突然开始发出未处理的异常。

所以我们试图弄清楚为什么minidump首先生成,但这里的问题是,我们能否以某种方式防止minidump生成无效的文件名或以其他方式控制命名过程?

其次,有人知道为什么创建无效的文件名是可能的吗?

更新:对于那些试图弄清楚为什么要创建转储文件的人来说,我们的问题是Windows在内存即将耗尽时生成它们,但由于某些原因,我们并不总是得到OOMException。

我可以防止无效的小转储文件名

首先,您应该真正尝试找出这些转储是如何生成的。例如,微软提供了一个很好的方法,使用一个名为LocalDumps的注册表项,它为我提供了很大的帮助。我确信这种方法不会产生像上面那样无效的文件名。

第二,如果应用程序没有崩溃,它可能已经注册了一个未处理的异常处理程序。这基本上是可以的,并且设计用于编写崩溃转储,但是未处理的异常由崩溃进程本身处理。处理这种情况的代码如何确保自己不受崩溃的影响?更好的选择是让Windows作为操作系统来处理崩溃。然后Windows内核(不受崩溃影响)可以真正处理这种情况。这就是LocalDumps的作用。

第三,当传递给Windows API时,可以通过以''.'开头的路径在Windows中直接访问文件系统。启动这样的路径将跳过任何文件名检查,因此您可以生成带有保留字符的文件,例如*, ?, :或您观察到的换行符。应用程序的未处理异常处理程序可能会使受到崩溃的影响,从而覆盖部分文件名。

Chkdsk应该能够修复文件系统

请检查是否从网络路径安装,如'remoteserver'd$'client。

然后将其更改为'remoteserver'd'clinet

"$";在共享路径中提取提升权限文件时产生问题