webbrowser visual studio software net microsoft internet hkey_current_user featurecontrol feature control c# .net winforms webbrowser-control internet-explorer-9

c# - visual - Aplicación que utiliza bloqueos del control WebBrowser después de instalar IE9



visual studio 2015 webbrowser control ie version (9)

browser.Navigate ("xxx") se llama desde el temporizador

¿Qué tipo de temporizador estás usando? Si la devolución de llamada del temporizador de disparo ocurre en otro hilo, y estás llamando a métodos en el objeto del navegador, entonces te estás abriendo al azar probabilidad de accidente. Pruebe a configurar Control.CheckForIllegalCrossThreadCalls = true; en su método Main () antes de ejecutar el método Application.Run (...) y ver si cuando falla, obtiene un mensaje de error más "en punto" o lo mismo.

Instalé IE 9 la semana pasada y, desde entonces, mi aplicación c # .net falla alrededor del 20% de las veces. El depurador no puede mostrar algo útil además de detenerse en Program.cs Application.Run (new MyMainForm ()); , por cierto, la forma principal ya se mostró, así que no es que sea algo en construcción en la forma principal.

Tengo Windows7.

The exception thrown is: "An unhandled exception of type ''System.ArgumentException'' occurred in System.Windows.Forms.dll Additional information: Value does not fall within the expected range.

Captura de pantalla de la pila de llamadas -> http://img861.imageshack.us/f/ie9v.png/

Cuando se ejecuta fuera del depurador, se muestra esta información:

Problem signature: Problem Event Name: APPCRASH Application Name: myexe.exe Application Version: 6.7.6.0 Application Timestamp: 4d7fdffd Fault Module Name: mshtml.dll Fault Module Version: 9.0.8112.16421 Fault Module Timestamp: 4d76266c Exception Code: c0000005 Exception Offset: 0012c848 OS Version: 6.1.7600.2.0.0.256.48 Locale ID: 1037 And sometimes instead of mshtml.dll it says StackHash_f09d Problem Event Name: APPCRASH Application Name: myexe.exe Application Version: 6.7.6.0 Application Timestamp: 4d7fdffd Fault Module Name: StackHash_f09d Fault Module Version: 0.0.0.0 Fault Module Timestamp: 00000000 Exception Code: c0000005 Exception Offset: 00000000 OS Version: 6.1.7600.2.0.0.256.48 Locale ID: 1037

Gracias por adelantado

Editado:

Eso es lo que veo en windbg, con símbolos:

0:000> kb ChildEBP RetAddr Args to Child 0020eda4 64d54f83 0566c988 00001012 00000000 mshtml!CDoc::ReduceMemoryPressureTask+0x1a 0020edb4 64d54f2c c6b991e4 0020ee78 00000113 mshtml!GWYieldToMsgOnCurrentThread+0x17b 0020edfc 770086ef 00192392 00000012 0000201b mshtml!GlobalWndProc+0x1f2 0020ee28 77008876 64d54afe 00192392 00000113 USER32!InternalCallWinProc+0x23 0020eea0 770089b5 00000000 64d54afe 00192392 USER32!UserCallWinProcCheckWow+0x14b 0020ef00 77008e9c 64d54afe 00000000 0020ef2c USER32!DispatchMessageWorker+0x35e 0020ef10 03b54726 0020ef9c fa69a961 00000000 USER32!DispatchMessageW+0xf *** WARNING: Unable to verify checksum for C:/Windows/assembly/NativeImages_v2.0.50727_32/System.Windows.Forms/f92c882fd4e7005c005e208daa04c28d/System.Windows.Forms.ni.dll WARNING: Frame IP not in any known module. Following frames may be wrong. 0020ef2c 5af78aee 01b743e4 00000001 01ac95cc 0x3b54726 0020efe0 5af78757 00000000 ffffffff 00000000 System_Windows_Forms_ni+0x208aee 0020f038 5af785a1 01b6c610 1f3a000e 00000000 System_Windows_Forms_ni+0x208757 0020f068 5af35911 01bb7d84 0020f10c 003b73d8 System_Windows_Forms_ni+0x2085a1 0020f0e0 6f221b5c 015b1141 00000001 0020f170 System_Windows_Forms_ni+0x1c5911 0020f0f0 6f232209 0020f1c0 00000000 0020f190 mscorwks!CallDescrWorker+0x33 0020f170 6f246511 0020f1c0 00000000 0020f190 mscorwks!CallDescrWorkerWithHandler+0xa3 0020f2b4 6f246544 0032c040 0020f380 0020f34c mscorwks!MethodDesc::CallDescr+0x19c 0020f2d0 6f246562 0032c040 0020f380 0020f34c mscorwks!MethodDesc::CallTargetWorker+0x1f 0020f2e8 6f2b0c45 0020f34c d847bc11 00000000 mscorwks!MethodDescCallSite::CallWithValueTypes+0x1a 0020f44c 6f2b0b65 003239c0 00000001 0020f488 mscorwks!ClassLoader::RunMain+0x223 0020f6b4 6f2b10b5 00000000 d847b3d9 00000001 mscorwks!Assembly::ExecuteMainMethod+0xa6 0020fb84 6f2b129f 013a0000 00000000 d847b389 mscorwks!SystemDomain::ExecuteMainMethod+0x456

===== ACTUALIZACIÓN (No estoy seguro, si se supone que debo publicarlo como "Responde tu pregunta") ============ Gracias a todos los que intentaron ayudar, lo aprecio .

Siendo desesperado, comencé a eliminar fragmentos de código para entender qué parte de mi código lo afecta (usamos el control webrowser en muchas formas). Después de eliminar la llamada a LoginForm que también utiliza el control webrowser, el problema desapareció.

El formulario de inicio de sesión aloja el control webrowser, navega a cierta url, por ejemplo /login.php y si el usuario ya ha iniciado sesión, el formulario UserLoggedIn inside se invoca desde html utilizando ObjectForScripting. Cuando se invoca UserLoggedIn, llamábamos a Close () para cerrar el formulario si se mostraba LoginForm. Aunque LoginForm estaba haciendo todo esto, no siempre lo mostramos. Nosotros estábamos, mostrándolo solo si después de X segundos no se llamó a UserLoggedIn () (es decir, el usuario necesita iniciar sesión). Por alguna razón, y gracias a MS por hacernos capaces de depurar en fuentes .net, cuando estábamos llamando a Close, y el formulario no era visible, en realidad estaba eliminando el formulario y todos sus elementos secundarios porque IsHandleCreated era falso. Ahora, se llamó a Close desde UserLoggedIn (), que es un evento activado por el control del navegador (la pila de llamadas muestra ieframe.dll, mshtml.dll, etc.), por lo que el objeto webbrowser se estaba destruyendo mientras se llamaba. La manera estrafalaria de resolver esto, era llamar a Cerrar, solo si la forma era Visible. Por cierto, no sé, por qué IsHandleCreated es falso, si no mostramos el formulario. Traté de reproducirlo, escribiendo una muestra que crea un formulario, que no se muestra, pero IsHandleCreated es verdadero.

---- de Forms.cs -----

public void Close() { if (GetState(STATE_CREATINGHANDLE)) throw new InvalidOperationException(SR.GetString(SR.ClosingWhileCreatingHandle, "Close")); if (IsHandleCreated) { closeReason = CloseReason.UserClosing; SendMessage(NativeMethods.WM_CLOSE, 0, 0); } else{ // MSDN: When a form is closed, all resources created within the object are closed and the form is disposed. // For MDI child: MdiChildren collection gets updated (VSWhidbey# 368642 & 93550) Dispose(); // THIS WAS CALLED WHEN FORM WAS NOT VISIBLE } }


El código de excepción c0000005 generalmente significa que es un problema de memoria. Tal vez tiene que ver con áreas de 32 y 64 bits de su aplicación que se confunden. Intentaría hacer que tu aplicación se ejecutara completamente en 64, luego completamente en 32, mira qué pasa. Intenta ejecutar como administrador, mira si eso cambia algo. También debería poner capturas de prueba en los puntos donde tiene sentido, y rety siempre que se encuentre el error. Bueno, esas son sugerencias, así que pruébalo y ve si puedes obtener más información.

¡Buena suerte!



Especulación educada para que comiences: los temporizadores usan subprocesos de grupo de subprocesos, que son MTA. Si tuviera que adivinar, diría que podría estar relacionado con eso, ya que los controles ActiveX solo se pueden instanciar de manera segura desde los hilos STA. Tal vez intente crear un hilo manualmente en lugar de usar el hilo del temporizador.


Este bloqueo ocurre cuando jscript.dll está incorrectamente registrado. El método ReduceMemoryPressureTask espera que se cargue y causa una desreferencia nula en caso contrario. Una solución es ejecutar regsvr32 jscript.dll en la máquina afectada. Puede verificar el error mirando la lista de módulos cargados para ver si falta jscript.dll o no. Esto se puede hacer ya sea programáticamente o a través de Process Explorer .


He tenido problemas con esto, principalmente debido a violaciones de privilegios.
El programa se ejecutaba a nivel de administrador y el navegador se ejecutaba a nivel de usuario o viceversa.
Algo para mirar



Obtengo el mismo error / bloqueo desde que obtuve el ie9 instalado. solo sucede cuando hay una película de youtube en la página. de lo que cuelga / se bloquea con la misma ventana, obtienes a Jack Juiceson.

pero detrás del "Nombre del módulo de fallas" no obtengo mshtml.dll, obtengo un d3d9.dll o algo así. veryyyyy extraño.


Puede haber una razón, ya que WinForms se ejecuta bajo STA, pero el navegador web requiere MTA. Ponga un try-catch encima del control del navegador y también verifique si hay una voladura de acceso r / w. Según lo declarado por oakcool