次のようにMicrosoft.Office.Interop.Excel.Workbook
クラスを使用して、サーバー側で.xlsファイルを.xlsxファイルに変換しようとしています。
workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
そして、私は次のエラーを受け取ります:
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at CALLING_METHOD_IN_MY_LIBRARY_HERE...
問題は、このエラーがステージングサーバーでのみ発生することです。私のローカルマシンではうまく動作します。
ステージングサーバーで試したこと:
2)コンポーネントサービスを展開します "->"コンピューター "->"マイコンピューター "->" DCOM構成 "
3)「Microsoft Excelアプリケーション」を見つけます。
4)[プロパティ]ダイアログボックスを開く権利
5)[セキュリティ]タブをクリックし、
6)「起動許可とアクティベーション許可、許可の構成、許可の追加-管理者ユーザー(このユーザー)、対話ユーザー、および起動ユーザーの下で実行されるID
7)。起動とアクティベーションの許可+アクセス許可+構成の許可=> IIS_IUSRS +フルコントロールのネットワークサービスを追加**
2. ローカルマシンで.xlsファイルを「Any CPU」から「x86」に変換するプロジェクトのビルドを変更し、サーバーでこのライブラリを公開しました。
誰かがこの問題を修正する方法を見つけましたか?この問題を2日間修正するのに苦労しています。
DCOMCNFG.exeを使用します。それを開いて、コンポーネントサービス->コンピューター->マイコンピューター-> DCOM構成-> Microsoft Excelアプリケーションに移動します。
プロパティを開き、[ID]タブを選択して、インタラクティブユーザーを選択します。
この問題について詳しく説明しているこの記事を見つけました。これが役立つ場合、次の理由でエラー「80080005サーバーの実行に失敗しました(HRESULTからの例外:0x80080005(CO_E_SERVER_EXEC_FAILURE))」が発生する可能性があります:
このソリューションでこの問題を修正しました:コンポーネントサービス/コンピューター/ DCOM構成/ Microsoft Word97-2003ドキュメントプロパティ/全般タブを右クリックします。
認証レベルを設定:なし
別の場所で解決策を見つけました。
以下を行うdid私の問題を解決します:
DCOMCNFG.exeを使用します。それを開いて、コンポーネントサービス->コンピューター->マイコンピューター-> DCOM構成-> Microsoft Excelアプリケーションに移動します。プロパティを開き、[ID]タブを選択して、インタラクティブユーザーを選択します。
[〜#〜] but [〜#〜]-問題は数分ごとに戻ってきました!
何時間も原因を突き止めようとした後、サーバーがhundreds開かれたWINWORD.EXEプロセスを持っていることに気付きました。これによりメモリの問題が発生し、exception from hresult 0x80080005
エラー。
馬鹿げた話ですが、相互運用アプリケーションcloseにコードを書くのを忘れていました。修正したら、エラーはなくなりました。
doc.Close(false);
Marshal.ReleaseComObject(doc);
Word.Quit();
Marshal.ReleaseComObject(Word);
同じ問題は、サービスの「デスクトップインタラクションを許可する」ことで解決しました。 (ログオンタブのTomcat6w構成ツール)