Windows7のOfficeサーバーサイドオートメーションで例外がスローされるという現象が発生しました。
具体的には、WindowsサービスでのExcelファイルのオープンで例外が発生していました。
エラーメッセージ
System.Runtime.InteropServices.COMException (0x800A03EC): ファイル '[ファイル名]' にアクセスできません。次のいずれかの理由が考えられます。• ファイル名またはパスが存在しません。• ファイルが他のプログラムによって使用されています。• 保存しようとしているブックと同じ名前のブックが現在開かれています。
解決方法
以下のフォルダを作成します。
- x86
- C:\Windows\System32\config\systemprofile\Desktop
- x64
- C:\Windows\SysWOW64\config\systemprofile\Desktop
原因
どうやら、2003R2サーバーまでは存在していた「SystemProfile が実行する仮想デスクトップフォルダが存在しない」ため実行ユーザーがログオンしていない状態で実行(タスク実行とか)すると、デスクトップがないのでEXCEL(つかオフィス?)が実行できないらしい。
ちなみに
マイクロソフトが推奨しない実装であることは承知しています。
マイクロソフトは、現在のところ、無人の非対話型クライアント アプリケーションまたはコンポーネント (ASP、ASP.NET、DCOM、および NT サービスを含む) からの Microsoft Office アプリケーションのオートメーションに関して、推奨もサポートも行っていません。それは、このような環境で Office を実行した場合、Office で不安定な動作やデッドロックが発生する可能性があるためです。
Office のサーバーサイド オートメーションについて
開発者は、Microsoft Office のオートメーションを使用して、Office 製品に組み込まれている機能を使用したカスタム ソリューションを構築できます。このようなプログラムの開発は、クライアント システム上では比較的簡単ですが、Microsoft Active Server Pages (ASP)、ASP.NET、DCOM、Windows NT サービスなど、サーバーサイドのコードからオートメーションを実行する場合はさまざまな課題が生じる可能性があります。 ...