.net - solucionar - nombre del evento de problema appcrash
Deshabilitando el diálogo de Informe de errores de Windows(AppCrash) programáticamente (2)
De acuerdo con este documento , debería ser posible heredar el valor SetErrorMode
al proceso hijo. Por lo tanto, cualquier tipo de iniciador (o su aplicación principal) que haría SetErrorMode
a los valores requeridos y luego ejecutar su aplicación nativa debería funcionar. En realidad esta herencia existe por defecto. Para apagarlo vea las banderas here .
Estoy ejecutando un proceso en la aplicación .NET.
Process process = new Process();
....
process.StartInfo.UseShellExecute = false;
process.StartInfo.ErrorDialog = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
....
process.Start();
El problema es que el ejecutable a veces se bloquea, lo cual está bien, pero el dialg de AppCrash aparece y evita que la aplicación continúe la ejecución hasta que haga clic en cerrar.
Sé que puedo configurar HKLM/Software/Microsoft/Windows/Windows Error Reporting/
value Disabled to true - msdn.microsoft.com/en-us/library/bb513638%28v=vs.85%29.aspx
Pero, ¿hay alguna manera de que pueda hacer esto en código?
EDITAR:
kmp ha publicado una gran respuesta, pero todavía estoy buscando cómo lograr lo mismo con la aplicación nativa.
Si puede editar el código del proceso de bloqueo, entonces lo que puede hacer es agregar el código que le muestro a continuación (este artículo habla sobre esto: Deshabilitar el diálogo de bloqueo del programa ) - vea la función SetErrorMode para obtener información de MSDN sobre esta función de la API de Windows .
Si no puede alterar el código de la aplicación que falla, es más complejo y tendría que inyectarlo en tiempo de ejecución (la complejidad depende de en qué se escriba el proceso que está iniciando; si es un proceso .NET, es más fácil por ejemplo, que una aplicación nativa, por lo que necesitaría dar más información sobre ese proceso).
[Flags]
internal enum ErrorModes : uint
{
SYSTEM_DEFAULT = 0x0,
SEM_FAILCRITICALERRORS = 0x0001,
SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
SEM_NOGPFAULTERRORBOX = 0x0002,
SEM_NOOPENFILEERRORBOX = 0x8000
}
internal static class NativeMethods
{
[DllImport("kernel32.dll")]
internal static extern ErrorModes SetErrorMode(ErrorModes mode);
}
// Ideally the first line of the main function...
NativeMethods.SetErrorMode(NativeMethods.SetErrorMode(0) |
ErrorModes.SEM_NOGPFAULTERRORBOX |
ErrorModes.SEM_FAILCRITICALERRORS |
ErrorModes.SEM_NOOPENFILEERRORBOX);