次の方法で共有


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

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

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

症状

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

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

システム エラー:Access が拒否されたため、'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\system.dll' です。
06/22/10 11:57:26 DDSet_Status: 睡眠中 100 ミリ秒...
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 が戻り値 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: 睡眠中 100 ミリ秒...
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 キーを押して、 Process エクスプローラーの検索 ウィンドウを開きます。

  3. Handle または DLL 部分文字列ボックスに「Assembly」と入力し、Search を選択します。

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

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

    1. Process Explorer Search ウィンドウで終了するプロセス名を選択して、プロセスを見つけます。

    2. Process ペインでプロセス名を右クリックします。

    3. Kill Process を選択してプロセスを終了します。

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