メインコンテンツまでスキップ

Visual C++ 2008以前の古い再頒布可能パッケージのインストールに失敗する

アプリケーションの前提条件としてCrystal reportsやVisual C++ 2008以前の古い再頒布可能パッケージをインストールしようとしたときにエラーとなることがあったため、原因と対処方法をまとめておきます。

現象

  • Error 1935/HRESULT:0x80070005のエラーでVisual C++ 2008再頒布可能パッケージのインストールに失敗する。

    Visual C++ 2008再頒布可能パッケージのインストールエラー1

    Error 1935.An error occurred during the installation of assembly 'Microsoft.VC90.ATL,version="9.0.30729.6161",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32"'. Please refer to Help and Support for more information. HRESULT: 0x80070005.

  • Error 1935のエラーでVisual C++ ランタイム(Microsoft.VC80.CRTやMicrosoft.VC90.ATL)を含む製品のインストールに失敗する。

    Visual C++ 2008再頒布可能パッケージのインストールエラー2

    Error 1935.An error occurred during the installation of assembly 'Microsoft.VC90.ATL,version="9.0.21009.1",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32"'. Please refer to Help and Support for more information.

原因

C:\Windows\WinSxS\InstallTempフォルダーのサブフォルダーにSYSTEMユーザーでファイルを書き込もうとしてACCESS DENIEDで失敗していました。

InstallTempフォルダーの書き込みアクセス拒否エラー

問題が起きなかった環境のアクセス権を調べるとSYSTEMユーザーはフルコントロールが許可されていました。また、継承元は「なし」になっていました。

正常な環境のInstallTempフォルダーのアクセス権

問題が起きていた環境だと読み取りと実行しか許可されていませんでした。また、継承元は「C:\Windows\WinSxS\」になっていました。

問題が起きる環境のInstallTempフォルダーのアクセス権

より厳しいアクセス権となっているC:\Windows\WinSxS\からアクセス許可を引き継ぐ構成になってしまっていたことで、インストーラーがSYSTEMユーザーとして一時フォルダーに書き込み出来ない状態になっていました。このようになってしまった原因は分かりませんでしたが、恐らく何らかの理由でC:\Windows\WinSxS\InstallTempフォルダーを手動で削除してしまい、その後再作成した際に既定の動作としてアクセス許可を継承する構成になってしまったのだと思います。

対処方法

所有者をAdministratorsに変更し、SYSTEMユーザーにフルコントロールを与えることで解消しました。

参考情報

Assembly Error: Access is denied.