2

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 を管理者グループに追加しても失敗します。

次のステップに関するアイデアはありますか?

4

2 に答える 2

1

したがって、これが最終的に機能したものです:

  • 管理者ユーザーを作成し、Word を DCOM 設定で実行するように設定します。
  • 設定で、AppPool ユーザーと IIS_IURS および IUSR にアクティベーション、起動、およびアクセス許可を与えます。他のユーザーに権限を付与せず、AppPool ユーザーにのみ付与した場合でも、Windows は AppPool ユーザーに十分な権限がないと報告することに注意してください。これは完全に誤解を招くものです。

また、フリーズする Word の問題が何であるかを突き止めました。新しいファイルを作成すると、Word が特別なモードで開き、ファイルが危険である可能性があることが通知されます。もちろん、COM を使用すると問題は発生しませんが、許可するまで続行することはできません。これは Word 2013 の新しい動作であり、そのため以前はありませんでした。

于 2014-08-14T17:54:37.813 に答える