”hbdllmain.ccp:89 指定されたパスが見つかりません。”エラー

この記事は次のブログに引っ越しました。

「hbdllmain.ccp 指定されたパスが見つかりません」エラー ある時から(再起動含め)Windows7(@iMac via Bootcamp)起動時に「対話型サービスの検出」エラーのダイアログが表示されるようになりました。ダイアログを閉じれば良いのですが、起動時に毎回というのが邪魔で邪魔で。 そして、このダイアログの詳細を開くと下記エラーの内容が。 メッセージ タイトル:エラー プログラムのパス:C:\Windows\System32\spoolsv.exe 受信日時:2012年xx月xx日 xx:xx:xx で、ダイアログのボタンを押して、メッセージ内容を見ると下記の通り。 hbdllmain.cpp:89 指定されたパスが見つかりません。 現象環境 環境としては、iMacにBootcampでWindows7を起動しています。いちおうVMware Fusion4も入れていますが、どちらでも現象が出るようになりました。 体感的には"Pogoplug"が、"Pogoplug PC"やらPogoplug Buckup"に変わったあたりのような気がするのですが、いまいち確信が持てません。 暫定回避方法: スプーラーのサービスを停止 とりあえずの応急処置としては、スプーラー・サービスを止めたら、エラーは出なくなりました。 具体的には、[スタート]-「プログラムとファイルの検索」で"msconfig"を起動して、「サービス」タブにある"Print Spooler"のチェックを外して再起動したらメッセージは出なくなりました。 副作用としては印刷ができなくなりますが、このマシンではプリンタがないので、今はよしとします。 考察 今後、忘れたころ(印刷が必要になるころ)に「印刷できん!」となると思うので、その時のための現状の考察を記録します。 まず、エラーの内容を要約すると C++言語で開発されたであろう「とあるWinXP時代のアプリ」から印刷に関する命令がスプーラー・サービスに流れたが、肝心のところで指定したパスが見つからないため、スプーラーはどうしていいのか、わけわかめ。「対話型サービスの検出」サービスがそれを感知して、ドーン!、メッセージを表示。 と言ったところでしょうか。 "spoolsv.exe"は、印刷をする際にプリンタ用のデータ(印刷ジョブ)を溜め込んでプリンタに流すプログラム(サービス)なので、こいつを止めればエラーは出ないのはすぐにわかったのですが、そもそも印刷命令をかけているのはどいつかわからないのが気持ち悪い。 そして、エラーを表示している、この「対話型サービスの検出」ダイアログは、旧Win環境(WinXPなど)との互換のためのWin7機能が、なんかうまく動いていない時に出るようです。→「アプリケーション開発者向け Microsoft® Windows 7 対応アプリケーションの互換性」 次に"hbdllmain.cpp"は、拡張子が".cpp"とあるので、C++言語で開発する時に使われるコンパイル前のプログラム(スクリプト・ファイル)で、恐らく89行目に「何か」を参照しているのですが、参照先(パス)に「その何か」がないため、エラーが出たのだと思われます。 しかし、".cpp"ファイル自体はコンパイルして(DLLやEXEといった)実行可能な状態にしないと意味がないため、どのEXEが原因かは、この情報ではつかめません。当然"hbdllmain.cpp"も検索をかけてもヒットしません。 今のマシンで、プリンタや印刷に関係するアプリで、常駐する系と言えば、思いつくのは"Google Chrome"と"Acrobat Reader"くらいです。 まだ試した事はないのですが、ChromeGoogleアカウントをブラウザに登録しておくと、プリンタがなくても印刷をかけて、別環境で同じアカウントでChromeを立ち上げると印刷できるらしいのです。AppleAir Printに対抗して、Android端末でも印刷できるようにする布石だと思うのですが、「へー」とアカウントは登録しているものの、印刷を試したことはありません。 でも、この機能自体は今回の現象が出るかなり前からあるので、他に原因がある気がします。 "Windows"フォルダ内に"Temp"フォルダがない(つまり"Windows"ではなく"Winnt"にOSがインストールされている)ケースで現象が出る事があるらしく、手動で"Windows"フォルダを作り、その中に"Temp"フォルダを作成したら回避されたという報告もあります。→"Getting hbdllmain.cpp error with every reboot" しかし、アチキの環境では、ちゃんと"C:\\Windows\Temp"は存在しているので該当しない気もします。 気になる点としては、VMWare Fusion4をインストールする前のBootcampにはBuffalloのRAM DISKユーティリティ(仮想メモリ・ディスクのアプリ)を使っていました。実は、アチキのiMacには無駄に16BGのメモリを積んでいるのですが、Windows7が32bitであるため、4GBしか認識しません。12GBが無駄であるため、もったいない、と。 このメモリの空き領域を、仮想ディスクとして使って、ブラウザのキャッシュやTEMPフォルダといった、消えても差し支えないデータや、PortableAppsのような単体で起動するアプリを置くようにすることで、SSD以上の動きを満喫していたのですが、Buffaloの"RAM DISKユーティリティ"は"VMWare Fusion4"上では動かないのです。 そもそも、テキスト・エディタが一番多いので、結局"Fusion4"の使い勝手を取ることにしました。 先ほどの、気になる点というのは、このユーティリティが暫定的にTEMPの保存先をRAMディスクに変更することです。Windows環境変数を変えるだけでないようなので、ここらへんなのかも。