asp.net で Microsoft Word オートメーションを使用する古いアプリケーションがあり、Office 2013 Standard x86 を搭載した Windows Server 2012 R2 x64 にインストールする必要があります。IIS のようなサーバー テクノロジでの Office の自動化は避けるべきであることはわかっていますが、現時点ではアプリケーションを書き直すための青信号がないため、そのままにしておく必要があります。
最初にアプリケーションを起動しましたが、次のエラーが発生しました。
次のエラーのため、CLSID {000209FF-0000-0000-C000-000000000046} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80070005 アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))。
{000209FF-0000-0000-C000-000000000046} は一般的な Word の識別子であり、特定のバージョンではないという情報をオンラインで見つけました。
Component Services -> My Computer -> DCOM Config -> Microsoft Word 97 - 2003 Document に移動し (Microsoft Word、MS Word、Word のノードはありませんが、Microsoft Excel のノードがあることに注意してください)、セキュリティを許可するように変更しました。 IIS AppPool ユーザー "Local Launch"、"Local Activation"、および "Local Access"。これにより、アプリケーションの応答に時間がかかり (1 分以上)、次のエラーで失敗します。
次のエラーが原因で、CLSID {000209FF-0000-0000-C000-000000000046} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80080005 サーバーの実行に失敗しました (HRESULT からの例外: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))。
同時に、イベント ビューアのシステム ログに次のように表示されます。
サーバー {000209FF-0000-0000-C000-000000000046} は、必要なタイムアウト内に DCOM に登録されませんでした。
オンラインで検索したところ、システム ドライブのパスやレジストリなど、アクセス権に問題がある可能性があるという情報が見つかりました。Process Monitor を実行し、プロセスが開こうとしているものを確認しました。IIS AppPool ユーザーに次へのフル アクセスを許可しました。
- C:\Windows\SysWOW64\config\systemprofile
- C:\Windows\Temp
- HKU.DEFAULT\Software\Microsoft\Office
- HKLM\Software\Wow6432Node\Microsoft\Office
- HKLM\Software\Wow6432Node\Microsoft\Shared Tools
アプリケーションを再度実行したところ、Process Monitor にいくつかのアクセスの問題が表示されただけでした。これは、さまざまな構成を読み取ろうとしただけのようです。アプリケーション自体は、もはやいかなる種類のエラーも表示せず、ただフリーズしました。そのマシンに Visual Studio がインストールされていませんが、アプリケーション ログにエラーが表示されないため、例外はスローされませんでした。
DCOM ID で特定のユーザー (ローカル管理者) も設定しようとしましたが、変更はありませんでした。
すべてのアクセス許可を復元したところ、0x80080005 エラーに戻りました。
次のコードを使用して、単純なアプリケーションでエラーを再現することに成功しました。
try
{
l1.Text = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var application = new Microsoft.Office.Interop.Word.Application();
l2.Text = "OK";
}
catch (Exception ex)
{
this.Label2.Text = ex.ToString().Replace("\r\n", "<br/>");
}
Office 2013 Pro x64 を搭載した Windows 8 x64 でも、まったく同じエラーで失敗します。
現在のユーザーを管理者に偽装すると、機能します。ただし、IIS APPPOOL\DefaultAppPool を管理者グループに追加しても失敗します。
次のステップに関するアイデアはありますか?