我有一个基于Oracle的WinForms (.NET C#) OLTP应用程序。
从我们的支持环境中,我们经常会体验到数据库连接的丢失,生成一个产生的微型文件(我不完全确定是什么造成的)--显然它不会导致应用程序崩溃,但是为了实际执行任何事情,您必须关闭它并重新启动它。
在同一个目录中创建了许多这样的微型转储之后,这些微型转储突然开始获得相当奇怪的文件名,这些文件名显然是windows上的“非法”文件名。
例如,我们有一个文件名,如:
“°χ2 _minidump_default_pid_20248_tid_x19AC_2015_9_1_8_31_51.dmp”“
是的,回车是文件名的一部分。
我们发现了这一点,因为log4net监视目录,突然之间,由于这些无效的文件名,出现了无法处理的异常。
因此,我们正在试图弄清楚为什么在一开始就生成了这个微型程序,但是这里的问题是,我们能以某种方式防止使用无效的文件名生成这个最小值,或者控制命名过程吗?
第二,有人知道为什么一开始就可以创建无效的文件名吗?
更新:对于任何试图弄清楚为什么首先创建转储文件的人来说,的问题是,当内存几乎耗尽时,就会生成转储文件,但出于某种原因,我们并不总是能得到一个OOMException。
发布于 2015-09-03 20:39:06
首先,您应该真正地了解这些转储是如何生成的。例如,微软提供了一种很好的方法,使用一个名为LocalDumps的注册表密钥,它为我提供了很大的帮助。我确信这种方法不会像上面那样生成无效的文件名。
其次,如果应用程序没有崩溃,它可能已经注册了一个未处理异常处理程序。这基本上是可以的,并设计为编写崩溃转储,但未处理的异常由崩溃进程本身处理。处理这种情况的代码如何确保他自己不受坠机的影响?更好的选择是让Windows作为操作系统来处理崩溃。然后Windows内核(不受崩溃影响)能够真正处理这种情况。这就是LocalDumps所做的。
第三,在Windows中,通过从\\.\开始的路径可以直接访问文件系统。启动这样的路径将跳过任何文件名检查,以便生成保留字符(如*、?、:或换行符)的文件。应用程序的未处理异常处理程序可能正在这样做,并以覆盖文件名部分的方式受到崩溃的影响。
Chkdsk应该能够修复文件系统。
发布于 2021-08-10 10:43:44
请检查您是否正在从网络路径安装,如\remoteserver\d$\client。
然后将其更改为\remoteserver\d\clinet
共享路径中的"$“在释放提升的权限文件时创建问题
https://stackoverflow.com/questions/32328325
复制相似问题