2010-11-09 9 views
6

Tengo un programa de respaldo que se está ejecutando actualmente en nuestro entorno corporativo en aproximadamente 70 máquinas. Una mezcla de computadoras portátiles, computadoras de escritorio y Windows (xp-32, vista-32, vista-64, 7-32-7-64) sin problemas.Error de la aplicación .NET sin información de depuración

Hay una excepción, y es la razón por la que estoy publicando aquí para obtener ayuda.

En una máquina que es una Dell Latitude que ejecuta Windows 7 de 64 bits con .NET 4 Framework instalado, la aplicación de la consola se bloqueará inmediatamente antes de que comience Sub Main. Simplemente da el error genérico de Windows "Un problema hizo que el programa dejara de funcionar correctamente". sin opción para ver información de depuración.

cosas que he intentado:
- desinstalación de todo el software unstandard
- Al comentar varias declaraciones que me pareció que podría causar problemas de
- Recompilada para Auto CPU, x86 y x64 para ver si se hace una diferencia
- se ha deshabilitado el escáner de virus
- usuario es un administrador pero traté de ejecutar como administrador
- se ha añadido un cuadro de mensaje como la primera cosa en Sub Main para determinar dónde se bloquea
- Agregado tratar capturas a todo el código correspondiente

que era capaz de conseguir un poco más de información desde el Visor de sucesos:

Con errores Nombre del Módulo: KERNELBASE.dll, Versión: 6.1.7600.16385, marca de tiempo: 0x4a5bdbdf
Código Excepción: 0xe0434f4d Falla offset: 0x0000b727

Estas próximas entradas parecer extraño para mí:

proceso con errores Identificación: 0x% 9
aplicación con errores hora de inicio: 0x% 10
applicati fallamiento en el camino: 11%
errores Módulo ruta: 12%

también pude tirar hacia arriba el archivo .wer (Informe de errores de Windows de archivos planos) y regurgitado la mayor parte de la misma información, pero también incluyó algunas DLL cargado y otros archivos que se utilizan.

Gracias por tomarse el tiempo para leer mi muro de texto y espero que alguien tenga algunas ideas sobre cómo proceder.

Joshua

edición:

Estoy pensando en las siguientes llamadas a la API de Win32 que podría estar causando los problemas y eran las únicas cosas que no podía hacer comentarios a cabo fácilmente sin un código de gran re-escritura .

Si es así, ¿por qué sólo en este caso la máquina :(

' Obtain a handle to the console application window by passing the title of your application. 
Dim hWnd As Integer = Process.GetCurrentProcess().MainWindowHandle 
Dim hMenu As Integer = GetSystemMenu(hWnd, False) 

'WIN API Functions to assist in disabling the Close button on the Console Window 
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Integer, ByVal uPosition As Integer, ByVal uFlags As Integer) As Boolean 
Private Declare Function GetForegroundWindow Lib "user32"() As Integer 
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Integer, ByVal bRevert As Boolean) As Integer 
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Integer, ByVal uCmd As Integer) As Integer 
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Integer, ByVal lpString As String, ByVal nMaxCount As Integer) As Integer 
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Integer, ByVal nCmdShow As Int32) As Boolean 
Public Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, ByRef cbRemoteName As Integer) As Integer 
+0

me preguntaba por qué no podía llegar al usuario. Tuvo que volar a Brasil, así que publicaré los resultados de estos esfuerzos cuando regrese a su máquina en unos días :( – JoshF

+0

Disculpa por la falta de una actualización. El usuario regresó de Brasil y unas semanas más tarde el problema parecía funcionar solo. Nunca encontré la causa :( – JoshF

Respuesta

1

principio me volvería a la salida Tess Ferrdandez blog tiene información sobre cómo crear un archivo de depuración accidente y mirándolo con windbg

segundo me intentaría reparar el marco en una de estas máquinas ya que teníamos un problema similar en una implementación y eso resolvió el problema.

+0

Cuando me conecto con la máquina, desinstalaré .Net Framework 4.0 e intentaré instalar 3.5 y ver si eso hace la diferencia. – JoshF

+0

@joshf Probablemente sea por lo mejor para descubrir por qué está fallando con .NET Framework 4.0. ¡Imagine el caos cuando las otras máquinas se actualizan de 3.5 a 4.0! :) –

+0

+1 para el enlace de Tess, ¡ella mece! :) windbg ha sido mi salvador algunas veces y cada desarrollador de Windows debe aprender los conceptos básicos. Mira la presentación NDC2010 de Ingo Rammer "Hardcore Production Debugging", es realmente bueno. –

0

Ese error se produce a veces cuando se tiene DLL de 32 bits (o mixtos DLL de 32 bits y 64 bits), para recopilar Cualquier CPU, y se ejecutan en un sistema de 64 bits. Sé que dijiste que intentaste compilar para x86, pero asegúrate de que TODOS los archivos DLL sean de 32 bits y compila para x86.

+0

Todo el DLLS que estoy usando para esta aplicación debe ser win32 o desde el ensamblado global. No tengo ningún dlls de clase que haya creado yo solo para esta aplicación en particular. – JoshF

1

Cambiaría todas las referencias de identificadores (hwnd) a IntPtr, ya que este tipo de datos funcionará en cualquier .NET Framework, pero no creo que el tipo de datos entero funcione en el entorno de 64 bits para handle handle.

La continuación también se sniipet de un artículo de Microsft:

En general, los ensamblados de .NET Framework escrito en Visual Basic se ejecutará el mismo, independientemente de la plataforma. Sin embargo, hay algunos casos que se comportan de manera diferente en diferentes plataformas. Estos casos comunes son:

Estructuras que contienen miembros que cambian de tamaño según la plataforma, como cualquier tipo de puntero.

Aritmética del puntero que incluye tamaños constantes.

Invocación de plataforma incorrecta o declaraciones COM que utilizan entero para identificadores en lugar de IntPtr.

Casting IntPtr a Integer.

Uso de invocación de plataforma o interoperabilidad COM con componentes que no existen en todas las plataformas.

artículo completo se puede encontrar aquí: http://msdn.microsoft.com/en-us/library/8ck8e1y2(v=vs.80).aspx

Cuestiones relacionadas