別のユーザーが Windows Server 2012/R2 または Windows Server 2008/R2 でリモート デスクトップ セッションをログオフすると、アプリケーションがクラッシュするか応答しなくなる

この記事は、別のユーザーがリモート デスクトップ セッションからログオフした場合にアプリケーションがクラッシュしたり応答しなくなる問題を解決するのに役立ちます。

適用対象: Windows Server 2012 R2
元の KB 番号: 2536487

現象

マップされたドライブからアプリケーションを実行すると、別のユーザーがログオフしたときに、アプリケーションが応答しなくなるか、ユーザー (または複数のユーザー) に対してクラッシュします。 この問題は、Windows Server 2012 R2、Windows Server 2012、Windows Server 2008 R2 Service Pack 1 (SP1)、および Windows Server 2008 で発生します。 たとえば、この問題は次のシナリオで発生する可能性があります。

  • 1 つのサーバーはファイル サーバーであり、もう 1 つはリモート セッション ホスト サーバー (ターミナル サーバー) です。

  • ファイル サーバー上のフォルダーは、RDS サーバーに接続するリモート ユーザーが使用するためにマップされます。

  • マップされた共有上のアプリケーションは、複数のユーザーによって起動されます。

  • 1 人のユーザーがログオフします。 これにより、アプリケーションの他のユーザーにアプリケーションのクラッシュや応答が発生します。 OS のバージョンに応じて、この問題は、次のように、アプリケーションの最初または最後のユーザーがログオフしたときに発生します。

    • Windows Server 2012 R2、Windows Server 2012、Windows Server 2008 では、ログオンした最初のユーザーがログオフしたときにこの問題が発生します。
    • Windows Server 2008 R2 SP1 では、この問題は、ログオンした最後のユーザーがログオフしたときに発生します。

注:

Windows Server 2008 R2 SP1 では、修正プログラム 2559767をインストールした後、この動作は Windows Server 2012 R2、Windows Server 2012、および Windows Server 2008 と同じになります。

原因

この問題は、リダイレクターが問題のバイナリのファイル制御ブロック (FCB) を処理する方法が原因で発生します。

Windows Server 2012 R2、Windows Server 2012、および Windows Server 2008 では、FCB はファイルを開いた最初のユーザーによって所有され、この FCB は後続のユーザーによって使用されます。 最初のユーザーがログオフすると、FCB は孤立します。 これにより、アプリケーションがクラッシュしたり、後続の使用で応答しなくなります。
Windows Server 2008 R2 では、FCB はファイルを開いた最後のユーザーが所有しており、前回のユーザーがログオフしたときに以前のユーザーに問題が発生します。

技術的には、FCB は特定のユーザーが所有していません。 これは、ファイルを表す単なる共有構造です。 FCB は、ファイルの最初のハンドルが開かれたときに作成され、ファイルの最後のハンドルが閉じられたときに破棄されます。 そのため、ユーザーには関連付けされません。

孤立したエンティティは、ログオフするユーザーに属するファイル オブジェクトです。 そのファイル オブジェクトがファイル システム キャッシュまたはマップされたセクションをバックしている場合、これらの I/O エラーが発生します。

解決方法

この問題を解決するには、Windows Server 2016にアップグレードします。 この問題は、このバージョンの Windows Server で修正されています。

回避策

この問題を回避するには、以下のいずれかの方法を使用します。

  • マップされたフォルダーから共有アプリケーションを実行しないでください。 代わりに、共有アプリケーションをターミナル サーバーにローカルにインストールします。
  • リモート バイナリ共有が必要な場合は、マップされたフォルダーの代わりに WebDAV 共有を使用します。
  • ネットワーク リンカーからのスワップ実行設定を使用して、アプリケーションをコンパイルします。
  • アプリケーションがマネージド アプリの場合は、 シャドウ コピー機能を使用します。

注:

バイナリをリモートで実行することはお勧めしません。 このような状況では、最初の回避策を使用することをお勧めします。