一个软件父亲对他的双胞胎程序的(非)有条件的爱
本文关键字:双胞胎 程序 有条件 一个 软件 父亲 | 更新日期: 2023-09-27 18:36:51
我有一个C#程序一直失败。没关系,我已经创建了程序,这是我的孩子,无论如何我都喜欢它。作为一种支持,我决定围绕它编写一个 AutoHotKey 包装器,它会自动重新启动程序,直到它完成而没有错误。现在,我希望这不会让我成为一个糟糕的父亲,但我对 C# 程序还有一个愿望:
要是它能失败而不跑到Windows 7寻求帮助就好了。问题是它要求我在Windows认为可以找到解决问题的方法之后说"是的,关闭程序,不要调试它"。
我怎样才能让程序毫无怨言地失败?它还有大约 5500 个 PDF 需要考虑,如果这两个程序能够在它们之间解决问题,我会感到自豪。
这似乎已经解决了,但是:
设置错误模式似乎能够完全停用当前进程的 Windows 错误报告对话框。(针对我的人工访问违规进行了测试并有效。
[DllImport("kernel32.dll")]
public static extern uint SetErrorMode(uint uMode); // from msdn page
将 uMode 设置为 SEM_NOGPFAULTERRORBOX
,即0x0002
。
(顺便说一句:看来你已经创建了一个旅鼠程序,所以你是一个旅鼠父亲。
或者,如果有一个模块无论如何都失败了很多,你可以:
- 使用 System.Diagnostics.Process 将其作为单独的进程启动。
- 使用另一个应用程序域(正在进行中)。如果检测到故障,请卸载进程。
我会尝试解决问题,而不是试图对抗症状。
修复您的孩子将是首选路径,但您也可以使用以下注册表项来禁用提示
来自 MSDN
[HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'Windows Error Reporting]
"ForceQueue"=dword:00000001
"DontShowUI"=dword:00000001
[HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'Windows Error Reporting'Consent]
"DefaultConsent"=dword:00000002