2016-07-18 3 views
1

イメージファイルから特定のメタデータを抽出する必要があるASP.NET MVCアプリケーションがあります。私は現在、次のようにこれを行うには、Windows APIコードパックを使用しています:Windows APIコードパックでユニコード文字を含むメタデータを取得するとアプリケーションがクラッシュする

var imageShellObject = ShellObject.FromParsingName(filePath); 
var title = imageShellObject.Properties.System.Title; 

局所的には、私のPC上で、これは正常に動作します:期待どおりに、ファイルのTitleプロパティを含む文字列を取得します。しかし、Webサーバーにデプロイされたとき、w3wp.exeは、2番目のコード行に到達するとクラッシュし、取得しようとしているプロパティにLINE SEPARATOR(U + 2028)やLATIN SMALL LETTER THORN(U + 00FE )。私は例外をキャッチする方法がないので、問題が何であるかを判断することはできません。さらに悪いことに、正常に失敗することはありません。IISプロセスはただちにクラッシュします。サーバーでは、これは、Windowsのエラーログのいずれかのエラーについての詳細は示していない、それだけで発生したアプリケーションエラーの数が表示され

An unhandled win32 exception occurred in w3wp.exe [3708]. Just-In-Time debugging this exception failed with the following error: No installed debugger has Just-In-Time debugging enabled. In Visual Studio, Just-In-Time debugging can be enabled from Tools/Options/Debugging/Just-In-Time. Check the documentation index for 'Just-in-time debugging, errors' for more information.

を述べ、標準のVisual Studioジャストインタイムデバッガーダイアログをポップアップ表示しますモジュールpropsys.dll、combase.dll、およびKERNELBASE.DLLのw3wp.exeにあります。

私はアプリケーションをローカルで実行すると、同じファイルを使用してうまく動作するということです。私は、サーバーにUnicodeに関連するものがいくつか見当たらないという印象を受けますが、なぜサーバー上のエクスプローラでファイルプロパティを調べると、ユニコード文字がうまく表示されるのか分かりません。

ここでは何が起こっていますか?

答えて

2

私が問題と修正を追跡するために管理してきたので、私は将来の世代のためにここにこれを残している:

問題がIShellItem2.GetPropertyへのWindows APIコードパックの相互運用呼び出し中でした()。このメソッドには、PropVariant型のoutメソッドがあります。このメソッドは、コードパックのコアプロジェクトにMS.WindowsAPICodePack.Internal.PropVariantとして定義されています。この型はOLE構造体PROPVARIANTを表します。

PROPVARIANTは、これは間違っている12としてオフセットを指定して、FieldOffsetAttributeで飾られていますのIntPtrフィールド_ptr2があります。それは16

が修正されたコードパックのGitHubのページでプル要求(https://github.com/aybe/Windows-API-Code-Pack-1.1/pull/5)ありますする必要がありますこの問題。悲しいことに、コードパックは唯一の寄稿者によって放棄されているように見えるので、どんなプルリクエストもマージされていないように見えます。私は修正を適用し、プライベートナゲットサーバー上の新しいNuGetパッケージとしてコードパックを梱包しました。

関連する問題