Windows中的user mode dump collection功能已有详细记录。只要创建LocalDumps
下的HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting
密钥,系统上的每个应用程序崩溃都会使用默认设置生成核心转储。它下面的一个子项,以我感兴趣的进程的可执行文件命名,它覆盖了全局(默认)设置,我在名义上获得了崩溃转储,在我指定的位置完全内存打嗝。
但是,LocalDumps
下的文档中没有任何设置可以告诉系统不要创建转储,这样我就会覆盖一个用于服务的子项。在我们的环境中,有多个服务进程在多个身份下运行,因此在所有身份'%LOCALAPPDATA%\CrashDumps
目录周围会分散许多核心转储,这是不必要的。这些是无人值守的服务器,更多垃圾意味着更多的脚本清理。
是否有记录的方法默认为所有程序禁用核心转储,并仅覆盖禁止核心转储的禁令?
据记载,如果崩溃进程的身份不能写入该位置,则不会创建转储,但我也不希望它们用于LocalSystem服务,并且这个人可以在任何地方写入。此外,似乎如果DumpFolder
指向无效的文件路径,则不会创建转储。为了使它甚至可能不那么hacky,我将它设置为设备命名空间中的NUL
设备(:
代表“密钥下的值”):
LocalDumps:DumpFolder=\\.\NUL
LocalDumps:DumpCount=1
LocalDumps\myservice.exe:DumpFolder=C:\Program Files\myservice\data\crash_dumps
LocalDumps\myservice.exe:DumpType=2
LocalDumps\myservice.exe:DumpCount=5
这表面上可以在Server 2012,2012R2和2016中使用。但是我必须指责下一次更新不会改变这种(未记录的)行为。