2011/12/27

SQLite3.dllからプロシージャ エントリ ポイントが見つからないせいで問題が多発するので、対策を考えてみた

エラーメッセージ「AppleSyncNotife.exer - エントリ ポイントが見つかりません」


どーも。久々の技術ネタ。

ほんとは受験生だからこんなことやってる場合じゃないんだけど、ちょっと自分的にも困ってしまったので備忘録の意味でもポストしてみます。

さて。
あまり深く考えずにiTunesをアップデートしてしまったんだけれども、それからずっとこんなエラーメッセージが出るようになってしまった。

エラーメッセージ「AppleSyncNotife.exer - エントリ ポイントが見つかりません」
なるほど。
というわけで、解決法を下に記すので、もし同様の症状でお困りの方がいたら参考にしてもらいたい。


まぁ、WindowsマシンのほうでMobileMeが使えなくてもさほど影響ないから仕方ないか、と思ってっ放置してたら、こんどはこっちでも。

エラーメッセージ「PDANetPC.exe - エントリ ポイントが見つかりません」




ちなみに、PdaNetPC.exeというのは、脱獄犯が使えるテザリングアプリの一種ね。

さすがにテザリングができなくなるのはちょっと痛い。



その上、iFunBoxもこんなエラーメッセージを吐くようになった。
データ転送エンジン部分にエラーメッセージが表示されている。
iFunBoxに至っては、iTunesMobileDevice.dllが見つからないと言ってくる始末
どれどれ。
Failed to locate Apple Mobile Device Support, iTunesMobileDevice.dll is not found.
Install iTunes to fix it.
と書いてある。
なるほどね。
AppleMobileDeviceSupportのiTunesMobileDevice.dllが見つからないから、iTunesを再インストールしてくれ、と。

とりあえず、どうやらSQLite3.dllが破損しているか、アップルがビルドしたDLLが以前と変わったせいかはわからないが、なんらかの理由で必要な関数がSQLite3.dll内に見当たらなくて困っている様子。
iFunBoxに至ってはデバイスのDLLファイルまで死んでるらしい。

というわけで基本の再インストールをやってみた。
が、効果なし
しかも、全てにおいて。

すでに入っているインストーラから修復インストールをやってみても、一回アンインストールした後にインストーラを落としてきてインストールしても、効果はなかったので、どうやらビルドされたDLLに関数が入ってないんだろう。(ただしあくまでも憶測
ただ、ファイルが破損しているということは考えづらい。


案の定、iTunesとiCloudのアプリケーションはしっかり動いてるからね。
ついでに言えば、iTunesMobileDevice.dllなんか破損してたらiTunesが動かないはずだし、iPhoneの認識すらできないはずなのだ。

ゆえに、「AppleMobileDeviceSupportのiTunesMobileDevice.dllが見つからないから、iTunesを再インストールしてくれ」というiFunBoxのメッセージも、SQLite3.dllからプロシージャエントリポイントが見つからないせいで起きている可能性が高くなってきた。


っというわけで、仕方ないからこうなったらDLLファイルをリプレースするしかないよね、ってことでSQLite3.dllを探してみた。


案の定あるじゃない、本家本元(www.sqlite.org)のが。

やっとここからが本番。
お困りの方はここからの手順を参考にしてねー。

まずは、SQLiteの本家ホームページのダウンロードページにアクセスする。
(アドレス:http://www.sqlite.org/download.html)

まぁ、当然ながら英語だけどあわてずに行こう。
ページの真ん中あたりに、「Precompiled Binaries For Windows」って書いてあるセクションがあるから、そこのセクション内にあるsqlite-dll-win32-x86-3070900.zipってやつをダウンロードしよう。

ちなみに、3070900とかいう数字はリビジョン番号的なものだろうから、最新バージョンがリリースされてたらこの通りじゃないかもしれない。
ま、でもそれっぽい感じのzipファイルをダウンロードすればおk。

あとはデスクトップあたりにzipファイルを解凍してあげれば、最新版のSQLite3.dllが手に入るというわけですね。

ちなみに、本家からもってきた最新版のDLLにはデジタル署名は付いてないので、心配な人はSHAなりMD5をチェックしておいてもいいかもしれない。


残るはDLLファイルの更新なんだが、方法はいくつかあると思うんだよね。

一つは、System32の中にあるSQLite3.dllを書き換えてしまう。
もう一つは、Appleが絡みそうなプログラムフォルダの中にあるSQLite3.dllをを書き換えてしまうという方法。

一応確認してみたら、Windows\System32の中にあるSQLite3.dllは、2008/10/28付けのファイルなんだよね。
相当古い。
案の定、バージョン番号はわからなかった。しかもデジタル署名付いてないしww


対して、Appleのデジタル署名が入ってるSQLite3.dllのバージョンは、3.7.5。

この記事を書いてる今日(2011/12/27)現在、入手できるバージョンは3.7.9だから、結局のところ両方とも古いわけだ。ぶっちゃけ、両方書き換えたっていいかもしれない(笑


うーん、どうしようか。
System32のほうを書き換えちゃってもいいけど、何か問題が起きた時の対処が面倒なので、 今回はAppleが絡んでそうなほうを書き換えることにする。

というわけで、ダウンロードして解凍した最新版のSQLite3.dllを、下記のディレクトリにコピーする。

C:\Program Files\Common Files\Apple\Apple Application Support (上書きする必要あり)
C:\Program Files\Common Files\Apple\Mobile Device Support (普通にコピーするだけ)


ちなみに、コピーの前に、タスクマネージャーのプロセスタブからiTunesHelper.exeを「プロセスの終了」ボタンを押して終了させて、そのあとサービスタブからApple Mobile Deviceサービスを右クリック「サービスの停止」で終了させておくことを推奨。

もしかしたら、アクセス拒否されるかもしれないので。

それと、心配性な方はApple Application Supportのところにもともと入ってたSQLite3.dllを、SQLite3.dll.oldみたいな感じに、拡張子を変えるなどしてとっておいたほうがいいかもしれない。
そしたら、 上書きしなくて済むし。


とりあえず書き換えたら再起動してみましょう。

これでよくなってるといいんだけどな。 

ま、もしだめだったらSystem32の中にも新しいものをぶち込んじゃいましょうw


一応、自分の場合はうまくいきましたよ。MobileMeやPDANetのクライアントソフトも、iFunBoxも、全部。

もしこれでもダメだったら、素直にiCloudにしなさいってことなんだろうなって思っただろうけど←


しかし、こういう面倒事はできるだけ避けてもらいたいものだね、AppleもMicrosoftも。


そして、後から思った。
ぶっちゃけ、Mobile Device SupportのほうにはSQLite3.dllを入れる必要がなかったんじゃないのかな、って。(殴

でも、もう一回再起動するのは面倒なので入れちゃいました、自分は。

ついでに言うと、最新版のほうがきっといいよね、とか思ってついでにSystem32のSQLite3.dllも書き換えてしまった(笑)
万が一問題が起きたら元に戻そう。問題が起きる気配は全くないけど。


もし、そっちは入れなくても問題なかったっていう人がいたらコメントかなんかで知らせてくれるとうれしいです。
そのときは記事も修正するんで。

【訂正】2012/01/02 -- 冒頭に載ってた画像を、本来表示したかった部分にも表示するようにしました。また、iFunBoxのエラーメッセージ部分を、引用の形で表示するようにしました。そのほか、記事のタイトルを少し変更しました。記事の内容に関しては特段変更はありません。

0 件のコメント:

コメントを投稿