Solución de problemas: no se puede encontrar un dll no administrado al invocar un código personalizado a través de un código de Word subyacente

StackOverflow https://stackoverflow.com/questions/319964

Pregunta

Contexto:

  1. Tengo una aplicación WPF que usa ciertas DLL no administradas en la carpeta D: \ WordAutomation \ MyApp_Source \ Executables \ MyApp. Puedo hacer doble clic en el archivo exe y todo se ejecuta.
  2. A continuación, tengo un proyecto de código subyacente de Word 2007, que hace referencia a las DLL administradas relevantes en la carpeta anterior e intenta hacer lo mismo ... mostrar la interfaz de usuario de la aplicación. Después de un "macheting" adecuado, aparece mi IU. Pero ahora hay una acción del usuario que fuerza la carga de uno de los dlls no administrados que explota constantemente con una FileNotFoundException (sin ayuda / indicación de qué archivo falta)

Coloqué un punto de interrupción en la línea problemática, borré la ventana de salida, presioné F10, comparé la salida cuando ejecuté esa línea (agregando un objeto a una ObservableCollection, cuyo controlador CollectionChanged tiene un código que carga la pieza no administrada)

Caso 1: haga doble clic en EXE .. que funciona perfectamente (ligeramente cortado)

'MyApp.DesktopApp.exe': Loaded 'D:\WordAutomation\MyApp_Source\Executables\MyApp\ManagedFrameworkWrapper.dll', Symbols loaded.
'MyApp.DesktopApp.exe': Loaded 'D:\WordAutomation\MyApp_Source\Executables\MyApp\Unmanaged.Framework.dll'
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcr90d.dll', Symbols loaded.
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcp90d.dll', Symbols loaded.
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugMFC_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_2a62a75b\mfc90ud.dll', Symbols loaded.
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\system32\msimg32.dll'
'MyApp.DesktopApp.exe': Loaded 'D:\WordAutomation\MyApp_Source\Executables\MyApp\HelperFunctions.dll'
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\system32\dbghelp.dll'
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcm90d.dll', Symbols loaded.
'MyApp.DesktopApp.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.MFCLOC_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_11f3ea3a\mfc90enu.dll', Binary was not built with debug information.
CCollectionDataType ConstCCollectionDataType ConstCCollectionDataType ConstCCollectionDataType ConstCCollectionDataType ConstCCollectionDataType Const'MyApp.DesktopApp.exe' (Managed): Loaded 'D:\WordAutomation\MyApp_Source\Executables\MyApp\ManagedFrameworkWrapper.dll', Symbols loaded.
'MyApp.DesktopApp.exe' (Managed): Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcm90d.dll', Symbols loaded.
The thread 'Win32 Thread' (0x12ec) has exited with code 0 (0x0).

Caso 2: ejecute la misma línea, pero se inicia desde un archivo .cs con código de Word

A first chance exception of type 'System.IO.FileNotFoundException' occurred in WindowsBase.dll
The program '[5320] WINWORD.EXE: Managed' has exited with code 0 (0x0).

He intentado

  • agregar las DLL no administradas a la misma carpeta que (word doc + VSTO dll)
  • agregó la carpeta a la variable de entorno PATH . Siempre lo mismo.
  • cualquier cosa que se me ocurra ... durante los últimos días

Noto que Word parece estar copiando los ensamblados de referencia administrados a una ubicación como se muestra en el fragmento a continuación ... que puede ser una línea de investigación. Pero, ¿por qué Word está haciendo esto y cómo resuelve las DLL no administradas? No lo sé. También en el primer fragmento, hay algunos archivos DLL cargados desde una ruta WinSXS, que también podrían ser otra ventaja.

'WINWORD.EXE' (Managed): Loaded 'C:\Documents and Settings\pillaigi\Local Settings\Application Data\assembly\dl3\6HQYB5GK.LY0\KC4WN109.HT4\4d81c901\70abeb86_124ec901\MyWPFPlotPopup.DLL', Symbols loaded.

Finalmente para cerrar con gracia ... ¡Ayuda!

¿Fue útil?

Solución

Para averiguar qué dll está causando el problema y dónde se está buscando el dll, use ProcessMon (sin sysinternals).

Mira mi respuesta aquí: Respuesta referenciada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top