.NET Frameworkの修正プログラムがエラーで失敗する: アクセスが拒否されたか、使用中のファイル

この記事は、アセンブリが使用されている場合、またはパッチが適用されたときに Microsoft .NET Framework修正プログラムの適用エラーが発生する問題を解決するのに役立ちます。

元の製品バージョン: .NET Framework
元の KB 番号: 2263996

現象

グローバル アクセス キャッシュ (GAC) 内のアセンブリ ファイルがロックされているか、使用中の場合、.NET Frameworkパッチが失敗する可能性があります。 この問題は、fusion がロールバックを処理する方法のバグによって悪化する可能性があり、ファイルが削除される可能性があります。 これにより、マネージド アプリケーション (フレームワーク アセンブリに依存するアプリケーション) が失敗します。

失敗したパッチ MSI 詳細ログには、次のようなものが含まれている可能性があります。

システム エラーが原因で 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\system.dll' :Access が拒否されました。
06/22/10 11:57:26 DDSet_Status: 100ms...
MSI (s) (54!70) [11:57:26:738]: 製品: Microsoft .NET Framework 2.0 Service Pack 2 -- この Windows インストーラー パッケージに問題があります。
詳細については、セットアップ ログを参照してください。
この Windows インストーラー パッケージに問題があります。
詳細については、セットアップ ログを参照してください。
06/22/10 11:57:26 DDSet_CARetVal: 0
06/22/10 11:57:26 DDSet_Exit: InstallAssembly ended with return value 1603
MSI (s) (54:94) [11:57:26:758]: ユーザー ポリシー値 'DisableRollback' は 0 です
MSI (s) (54:94) [11:57:26:758]: マシン ポリシー値 'DisableRollback' は 0 です
アクションは 11:57:26: InstallExecute で終了しました。 戻り値 3。

または

02/22/10 08:38:32 DDSet_Status: 100ms...
02/22/10 08:38:32 DDSet_Error: アセンブリのインストールに失敗しました
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll。 IAssemblyCache-InstallAssembly>() から -2147024864 が返されました。
02/22/10 08:38:32 DDSet_Error: アセンブリのインストールに失敗しました
システム エラーが原因で 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll' :
プロセスは別のプロセスによって使用されているため、ファイルにアクセスできません。

原因

パッチが適用されたときにアセンブリが使用中またはロックされている場合、パッチは失敗します。

解決方法

この問題は、アセンブリにロックを設定できるプロセスが実行されていないことを確認することで回避できます。

アセンブリが使用されているかどうかを検出するには、次の手順に従います。

  1. procexp.exe をダウンロードして、アセンブリをロックしているプロセスを検出します。

  2. procexp.exe を起動し、Ctrl キーを押しながら F キーを押して、[プロセス エクスプローラー検索] ウィンドウを開きます。

  3. [ ハンドルまたは DLL 部分文字列 ] ボックスに「 Assembly」 と入力し、[ 検索] を選択します。

    アセンブリを検索する手順を示すスクリーンショット。

  4. 一覧表示されているすべてのファイルは、パッチのインストールに影響を与える可能性があります。 一覧表示されているすべてのプロセスを終了するか、関連付けられているアプリケーションを閉じます。 これを行うには、次の手順を実行します。

    1. [プロセス エクスプローラー検索] ウィンドウで終了するプロセス名を選択して、プロセスを見つけます。

    2. [プロセス] ウィンドウでプロセス名を右クリックします。

    3. [ プロセスの強制終了] を選択して、プロセスを終了します。

      プロセスを強制終了する手順を示すスクリーンショット。