Visual C++ 2008以前の古い再頒布可能パッケージのインストールに失敗する
アプリケーションの前提条件としてCrystal reportsやVisual C++ 2008以前の古い再頒布可能パッケージをインストールしようとしたときにエラーとなることがあったため、原因と対処方法をまとめておきます。
現象
-
Error 1935/HRESULT:0x80070005のエラーでVisual C++ 2008再頒布可能パッケージのインストールに失敗する。
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)を含む製品のインストールに失敗する。
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で失敗していました。
問題が起きなかった環境のアクセス権を調べるとSYSTEMユーザーはフルコントロールが許可されていました。また、継承元は「なし」になっていました。
問題が起きていた環境だと読み取りと実行しか許可されていませんでした。また、継承元は「C:\Windows\WinSxS\」になっていました。
より厳しいアクセス権となっているC:\Windows\WinSxS\からアクセス許可を引き継ぐ構成になってしまっていたことで、インストーラーがSYSTEMユーザーとして一時フォルダーに書き込み出来ない状態になっていました。このようになってしまった原因は分かりませんでしたが、恐らく何らかの理由でC:\Windows\WinSxS\InstallTempフォルダーを手動で削除してしまい、その後再作成した際に既定の動作としてアクセス許可を継承する構成になってしまったのだと思います。
対処方法
所有者をAdministratorsに変更し、SYSTEMユーザーにフルコントロールを与えることで解消しました。