コンテクスト:
- D:\ WordAutomation \ MyApp_Source \ Executables\MyAppフォルダーに特定のアンマネージDLLを使用するWPFアプリがあります。exeをダブルクリックすると、すべてが実行されます。
- 次に、Word 2007の分離コードプロジェクトがあります。このプロジェクトは、上記のフォルダー内の関連するマネージDLLを参照し、同じことを実行しようとします。アプリUIを起動します。適切な「マチェット」の後、UIが表示されます。しかし、現在、FileNotFoundExceptionで一貫して爆発するアンマネージdllの1つを強制的にロードするユーザーアクションがあります(どのファイルが欠落しているかのヘルプ/表示はありません)
問題のある行にブレークポイントを設定し、出力ウィンドウをクリアし、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:同じ行を実行しますが、Wordコードビハインド.csファイル内から起動します
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がマネージドrefアセンブリをコピーしているように見えます。これは調査の行である可能性があります。しかし、なぜこれを行うのか、そしてそれがアンマネージ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.
最後に優雅に締めくくります...助けて!