次の方法で共有


ユーザーがログオフすると、COM+ アプリケーションが Windows で動作しなくなる可能性がある

この記事では、ユーザーがログオフしたときに COM+ アプリケーションが Windows で動作を停止する問題の解決策を示します。

元の KB 番号: 2287297

現象

Windows サーバーには、特定のユーザーとして実行するように ID が構成されている COM+ サーバー アプリケーションがあります。 しばらく作業した後、アプリケーションが動作を停止し、失敗し続ける可能性があります。 問題を解決するには、COM+ アプリケーションを再起動する必要があります。

CLIENT マシンのアプリケーション ログに、次のようなエラーが表示される場合があります。 クライアント実行可能ファイルが COM+ サーバー アプリケーションと同じコンピューターで実行されている場合は、COM+ サーバーで次のエラーが表示されます。

イベントの種類: エラー
イベント ソース: DCOM
イベント カテゴリ: なし
イベント ID: 10006
日付: <DateTime>
時刻: <DateTime>
ユーザー: Domain\user
コンピュータ:*****
説明:
サーバーをアクティブ化しようとしたときに、コンピューター 'servername' からエラー "Unspecified error" が発生しました: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

この場合、イベント メッセージは、サーバーからエラー (E_FAILまたは80004005または未指定のエラー) が返されたことを示します。 コンポーネントの CLSID がイベント・ログ・エントリーにリストされます。

COM+ アプリケーションが実行されているコンピューターのアプリケーション ログには、次のようなイベントも表示されます。

ログ名: Application
ソース: Microsoft-Windows-User Profiles Service
日付: <DateTime>
イベント ID: 1530
タスク カテゴリ: なし
レベル: 警告
キーワード: クラシック
ユーザー: SYSTEM
コンピューター: SERVERNAME
説明:
Windows では、レジストリ ファイルが他のアプリケーションまたはサービスで引き続き使用されていることが検出されました。 これでファイルがアンロードされます。 レジストリ ファイルを保持するアプリケーションまたはサービスが、後で正常に機能しない可能性があります。

ディテール-
\Registry\User\S-1-5-21-1049297961-3057247634-349289542-1004_Classesから 1 つのユーザー レジストリ ハンドルがリークしました。
Process 2428 (\Device\HarddiskVolume1\Windows\System32\dllhost.exe) がキー \REGISTRY\USER\S-1-5-21-1123456789-3057247634-349289542-1004_CLASSES

コンポーネントのインスタンスを作成する呼び出しが0x800703fa返される場合があります。

原因

COM+ アプリケーションに関連付けられているユーザー ID は、COM+ アプリケーションが最初に初期化されるときにログオンします。 このユーザーがコンピューターからログオフすると、ユーザーのプロファイルがアンロードされ、COM+ アプリケーションはユーザー ID のプロファイルのレジストリ キーを読み取れなくなります。 Windows Vista 以降、ユーザー プロファイル サービスは、そのユーザーがログオフしたときにユーザー プロファイルのアンロードを強制します。 これは、レジストリ ハンドルがプロセスで閉じられない場合に、ユーザー プロファイルのアンロードを強制する機能がアプリケーションを中断する可能性がある状況です。 この新しいユーザー プロファイル サービス機能が既定の動作です。

解決方法

回避策として、ユーザー プロファイル サービスの既定の動作を変更することが必要な場合があります。 ポリシー設定 ユーザー ログオフ時にユーザー レジストリを強制的にアンロードしません Vista 以降のオペレーティング システムの既定の動作をカウンターします。 有効にすると、ユーザー プロファイル サービスはレジストリを強制的にアンロードしません。代わりに、他のプロセスがユーザー レジストリを使用しないまで待機してからアンロードします。 ポリシーはグループ ポリシー エディター (gpedit.msc) にあります。 ユーザー ログオフ時にユーザー レジストリを強制的にアンロードしません ポリシーは、Computer Configuration>Administrative Templates>System>User Profiles にあります。

この設定を 未構成 から Enabled に変更すると、新しいユーザー プロファイル サービス機能が無効になります。 DisableForceUnload はレジストリに追加される値です。

詳細

ユーザー のログオフ時にユーザーごとのレジストリ キーに対して開いているハンドルがある場合でも、Windows は常にユーザー レジストリをアンロードします。 このポリシー設定を使用すると、管理者はこの動作を無効にして、Windows がユーザー のログオフ時にユーザー レジストリを強制的にアンロードできないようにすることができます。

Note

このポリシーは、この特定の Windows 動作が原因でアプリケーションの互換性の問題が発生する可能性がある場合にのみ使用してください。 ユーザーがローミング ユーザー プロファイルの更新バージョンを取得できなくなる可能性があるため、既定でこのポリシーを有効にすることはお勧めしません。

このポリシー設定を有効にした場合、Windows はログオフ時にユーザー レジストリを強制的にアンロードしませんが、ユーザーごとのレジストリ キーに対するすべての開いているハンドルが閉じられたときにレジストリをアンロードします。

このポリシー設定を無効にするか、未構成にした場合、ユーザー のログオフ時にユーザーごとのレジストリ キーに対して開いているハンドルがある場合でも、Windows は常にログオフ時にユーザー レジストリをアンロードします。

を有効にした場合でも、ユーザー ログオフ時にユーザー レジストリを強制的にアンロードしないポリシー設定では、イベント ID 1530 警告がログに記録される可能性があります。 この警告は、レジストリ ハイブのアンロードを最初に試行した後にログに記録されます。 これが失敗した場合は、開いているレジストリ ハンドルに関係なく、レジストリ ハイブを強制的にアンロードするかどうかを決定するポリシーがチェックされます。