misc.log

日常茶飯事とお仕事と

PCクラッシュ後、いくつかのアプリが起動しなくなった

Guilty Gear Striveをオンライン対戦で楽しんでいたのですよ……。そしたら急にハングアップからのブルースクリーン。強制再起動に見舞われました。対戦相手の方、ごめんなさい。

再起動が繰り返された後、起動しないアプリが

その後、再起動するも、ログイン画面後しばらくするとブルースクリーン、という状況が3回ほど続き、諦めかけていたところなんとか起動したのですが、ログイン後に見慣れないメッセージが表示されていました。

MSACM32.dllが見つからないというエラー

エラーを出しているのは、Elements Auto Creations 2021.exeというプログラム。自分のPCで「Elements」という単語がついているアプリは「Photoshop Elements 2021」しかありません。調べてみたところ、Photoshop Elementsに付属するアプリで、Photoshop Element起動時に表示されるホーム画面(これがまためんどくさい……)から呼び出せる「他のメディアを読み込んで作品を自動作成する」というアプリだそうです。いらない……。要らないのだけど、エラーが毎回でるのも面倒なのでなんとかしたいところですね。

Photoshop Elementsのホーム画面と自動作成機能の場所

他のアプリも起動しなかった

このPhotoshop Elementsの不要なアプリだけなら正直放置していても問題なかったのですが、すぐに他のアプリ2本が起動しないことに気付きました。下記の2つです。

  • TMPGEnc Smart Renderer 6
  • APEX Legends

前者は数日前に買ったばかりの、MP4等の動画をエンコードで劣化させることなく切ったり繋いだりするアプリ。後者は言わずとしれたオンライン対戦FPSですね。それぞれ下記のようなエラーを出して起動失敗してしまうようになりました。

TMPGEnc Smart Rendererが出したエラー

アプリケーションに必須のファイルが存在しないか正しく読み込めませんでした。アプリケーションを一度アンインストールしてから再インストールしてください。

APEX Legendsが出したエラー

Error: Failed to load library: AVIFIL32.dll

結論:すべて犯人はMSACM32.dll

長くなりそうなので先に結論を書いておきます。犯人は、PCクラッシュの過程で壊れたか、原因となったMSACM32.dllというファイルでした。これが「Windows\System32」フォルダーから無くなってしまっていたため、別のWindows10パソコンから持ってきて配置。再起動したら全て上手くいきました。

以下に、そこに至るまでに試したことを書いておきます。参考にしてください。

ただ、こうしたファイルをネットからダウンロードしてきて入れるのは避けた方がいいです。これだけは気をつけてください。同じように困っている人に付け込んで、「このファイルを使うと良いよ」と、ウイルスやワームなどを仕込んだファイルを配布されたらひとたまりもありません。必ず「身近な別のパソコンなどから持ってくる」にとどめるようにしてください(それが無い場合は……諦めた方がいいかもです)。

TMPGEnc Smart Rendererに関してやったこと

まず、メッセージ通り「アプリを再インストール」しました。公式サイトには、修復インストールか、再インストールを試し、それでもダメならサポートに連絡を、と書いてありましたが、どう考えてもサポートに連絡して解決する気がしません(普通に考えたら「直前のクラッシュが原因ですから、Windowsから入れ直してください」と自分だったら回答しそう)。ですので3回ほど再インストールを繰り返した時点でこちらの対応はギブアップ。どうにもならなければサポートに連絡しよう、ということで一旦放置しました。

APEX Legendsに関してやったこと

  • Originのゲームランチャーから、「修復」を試しました …… 効果無し。
  • 管理者として起動したコマンドプロンプトから、システムファイルチェッカー「sfc」を起動し、システムファイルの修復を試みた …… 効果無し。
  • エラーメッセージにある「AVIFIL32.dll」をSysWOW64フォルダーから探してきて、ファイルの所有者をAdministratorsにすることでアクセス権をつけてみた …… 効果無し。

最後はアンインストールからの再インストールか、とも思ったのですが、問題となっているのがWindowsのシステムファイルであれば、いくら外部からのアプリを入れ直しても効果は無いと思ったので、これも一旦この状態でおいておくことにしました。

sfc.exeの結果ログを確認してみる

システムファイルチェッカー「sfc」は、実行するとこんな感じでしばらく待たされます。

system file checkerを起動している様子

その後、このようにメッセージを出して終了。終了後はWindows\Logs\CBS フォルダーに「CBS.log」というログファイルを吐き出します。

system file checker終了のメッセージ

Windows リソース保護により、破損したファイルが見つかりましたが、それらの一部は修復できませんでした。オンライン修復の場合、詳細は次の場所にあるCBSログファイルに含まれています
windir\ Logs\CBS\CBS.log(たとえば C:\Windows\Logs\CBS\CBS.log)。オフライン修復の場合、詳細は /OFFLOGFILE フラグによって指定したログファイルに含まれています。

どうやら、システムファイルの中に破損したものを見つけたようですが、修復出来なかった、と。終了報告メッセージの「Windowsリソース保護」という言葉がどこに掛かるのかよくわからないのですが、なんにせよ修復失敗したことは確かです。ログファイルがあるとのことなので、ファイルを見に行ってみました*1

ログには、このような記述がありました。

CBS.logの中身

抜粋するとこんな感じです。

Cannot repair member file [l:11]'msacm32.dll' of Microsoft-Windows-Audio-MMECore-ACM, version 10.0.19041.1
Could not reproject corrupted file \??\C:\WINDOWS\System32\\msacm32.dll; source file in store is also corrupted

ファイルは「corrupted(崩壊している)」とのこと。しかし、これがPhotoshop Elementsのツールが出していたエラーの原因なのは間違いないですね。ということで、このファイルを実際に見てみよう……とSystem32フォルダーを見に言ったところ、ありませんでした。最初から消えていたのか、sfcが修復の過程でゴミとして消したのか判りません。とりあえず、無いのでアクセスできない、そういうことのようです。

まずはMSACM32.dllの問題を片付ける

このファイル、どうやら32bitアプリのオーディオ、音声関連の処理を受け持っている部品のようで、Windows自体に含まれるものです。なので、修復ディスクや修復領域にあるWindowsインストーラーで入れ直しができるのでは??と思い、今の環境を作った際に作成しておいた修復ディスクから起動して試してみたのですが……。バックアップや復元ポイントを作っていないと戻せないんですね。また、今の環境はWindows7からのアップグレードの際に作ったUSBメモリーのデータを元にインストールしたWindows10で、どうやらHDDやSSDにはWindowsのイメージデータが無く、USBも読めなかったのでアクセスできませんでした。

もしかしたら、このあたりの情報が揃っている環境であれば、Windowsシステムファイルを入れ直すことができるのかもしれません。が、私の環境では駄目そうということで諦めました。

ではどうするか……。他のPCから持ってくればいいじゃない、という路線で、子供のパソコンからファイルを失敬してきて、System32フォルダーにファイルを配置しました。この力業は、下記のサイトのやり方を参考にしたものです。

dspckn.blogspot.com

すべてが解決した

システムフォルダーにファイルを置いたので、念のためPC自体を再起動。その後、ログインしてみたところ、発生していたPhotoshop Elementsのツールエラーが消えました。また、TMPGEnc Smart Renderer 6も起動、APEX Legendsも起動するようになりました。

よかった!!

APEXの「AVIFIL32.dll」のエラー原因

では、なんでファイル名がちがうエラーが起きていたAPEXのエラーまで解決したのでしょうか?WindowsのDLLファイルの依存関係を調べるツール「Dependencies」で、AVIFIL32.dllを調べてみたところ……

AVIFIL32.dllの依存関係を調査したところ

やはり……AVIFIL32.dllは、内部でMSACM32.dllを使っており、MSACM32.dllが無いために正常に動かなかったのですね。そのため、MSACM32.dllを正しく配置するとエラーも消えた、ということのようです。

まとめ

というわけで、結局「そもそもなんでクラッシュしたの?」ということは不明ですが、破損したDLLファイルを特定し、別のPCから持ってきて入れ替えることで当面の問題は解決出来たように思います。

ただ、この方法がたまたま今回は上手く行きましたが、破損ファイルが「システムに登録する必要のあるライブラリーファイル」などであった場合、ファイルを置くだけでは無くRegsvr32を使ったシステムへの登録なども必要だったかもしれません(そういう手順を書いているサイトもありましたので)。あくまで、今回のケースは一例として扱ってください。失敗しても一切の責任は負えませんので悪しからず。

それから、システムの復元ポイントというやつを定期的に取る様にしておけば、もう少し楽だったかもしれませんね。普段使いPCの運用方針を少し見直すべきかもしれません。

*1:sfcの終了メッセージにある「CBS.log」ですが、常時ログが追加されていっているようです。なので、中身を閲覧する場合、ファイルをコピーしてどこか適当なフォルダーに置いてから閲覧することをお勧めします。