- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 Oracle 的 WinForms (.NET C#) OLTP 应用程序。
在我们的支持环境中,我们经常会遇到与数据库连接丢失的情况,并且会生成一个小型转储文件(具体是什么,我不完全确定)——显然它不会导致应用程序崩溃,但为了实际上做任何你必须关闭它并重新启动它的事情。
在同一个目录中创建了许多这样的小型转储之后,小型转储突然开始出现相当奇怪的文件名,这些文件名在 Windows 上显然是“非法”的。
例如我们有一个文件名:
"°÷ƒ_minidump_default_pid_20248_tid_x19AC_2015_9_1_8_31_51.dmp"
是的,回车是文件名的一部分。
我们发现这一点是因为 log4net 监视目录并且由于这些无效的文件名突然开始发出未处理的异常。
因此,我们首先要弄清楚为什么会生成小型转储,但这里的问题是,我们能否以某种方式防止使用无效文件名生成小型转储或以其他方式控制命名过程?
其次,有人知道为什么一开始就可以创建无效的文件名吗?
更新:对于任何看到这个试图弄清楚为什么首先创建转储文件的人来说,我们的问题是 Windows 在内存快用完时生成它们,但由于某种原因我们不会总是得到 OOMException。
最佳答案
首先,您真的应该尝试找出这些转储是如何生成的。微软例如提供了一种使用名为 LocalDumps 的注册表项的好方法这为我提供了很大的帮助。我确信这种方法不会像上面那样生成无效的文件名。
其次,如果应用程序没有崩溃,它可能已经注册了一个unhandled exception handler。 .这基本上没问题,旨在编写故障转储,但未处理的异常由崩溃进程本身处理。处理这种情况的代码如何确保他自己没有受到崩溃的影响?更好的选择是让 Windows 作为操作系统来处理崩溃。然后 Windows 内核(不受崩溃影响)才能真正处理这种情况。这就是 LocalDumps
所做的。
第三,在将文件系统传递给 Windows API 时,可以通过以 \\.\
开头的路径直接访问文件系统。启动这样的路径将跳过任何文件名检查,因此您可以生成具有保留字符的文件,例如 *
、?
、:
或换行符被你观察到。您的应用程序的未处理异常处理程序可能正在执行此操作,并且受到崩溃的影响,部分文件名被覆盖。
Chkdsk
应该可以修复文件系统。
关于c# - 我可以防止无效的小型转储文件名吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328325/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!