簡體   English   中英

疑難解答:通過背后的Word代碼調用自定義代碼時找不到引用的非托管dll

[英]Troubleshooting: Can't find a referenced unmanaged dll when invoking custom code via a Word code-behind

內容:

  1. 我有一個WPF應用程序,該應用程序在D:\\ WordAutomation \\ MyApp_Source \\ Executables \\ MyApp文件夾中使用某些非托管DLL。 我可以雙擊該exe,然后一切運行。
  2. 接下來,我有一個Word 2007代碼隱藏項目,該項目引用上述文件夾中的相關托管DLL,並嘗試執行相同操作。.調出App UI。 經過足夠的“砍刀”后,我得到了我的UI。 但是,現在有一個用戶操作,該操作強制加載一個非托管的dll,並與FileNotFoundException一致地崩潰(沒有幫助/缺少哪個文件的指示)

我在問題行上放置了一個斷點,清除了輸出窗口,按F10鍵,在運行該行時比較了輸出(將對象添加到ObservableCollection中,該對象的CollectionChanged處理程序具有加載非托管代碼的代碼)

情況1:雙擊EXE。

'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).

情況2:運行同一行,但從.cs文件后面的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).

我努力了

  • 將非托管DLL添加到 (word doc + VSTO dll) 相同的文件夾
  • 將文件夾添加到PATH環境變量中 還是一樣。
  • 過去幾天我能想到的任何事情

我注意到Word似乎正在通過托管引用程序集將其復制到以下代碼段中所示的位置..這可能是調查的結果。 但是,為什么要這么做呢?為什么要解析非托管的DLL ?。我不知道。 同樣在第一個片段中,從WinSXS路徑中加載了一些DLL,這也可能是另一個線索。

'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.

終於優雅地關閉了...幫助!

要找出導致問題的dll是什么,以及在哪里尋找dll,請使用ProcessMon(不包含sysinternals)。

在這里查看我的答案: 參考答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM