2008-03-27

IE7のフィードが自動更新されない

alezo(ThinkPad X31)がXPの頃にIE7を入れたときも、alezoをVistaにしたときも、IE7のフィード機能は普通に働いていて、それがどうした、こんなの動いてて当たり前だろうくらいにしか考えていなかった。その後、「会社のWSUSでお手軽に脆弱性対策ができる唯一のタブブラウザ」ってことで、会社のXPにIE7を入れたら、ちっとも自動でフィードを更新してくれなくてがっかり、というかびっくり。でもまぁ、手動で「すべて最新の状態に更新」すれば使えないこともないので、さほど気にしていなかった。だいたい、それまでFirefoxにSage入れてRSSを読んでたので、手動で更新というのにさほど抵抗がなかったのだ。

ところが、昨年末に衝動買いしたThinkPad 15周年版X61s。最初っからVistaであるにもかかわらず、自動でフィードの更新をしてくれない(もちろん、「フィードの更新の確認を自動的に行う」にチェックは入っている)。これは結構頭にきた。

なぜか。

Vistaにはサイドバーなるものがあり、そこで、「フィードヘッドライン」が表示できる。明示的にフィードを見に行かなくても、新しい未読エントリはヘッドライン上でボールドになって現れてくる。ふと気が付くと画面の脇に新しいニュースが流れてるのだ。Vistaにしたalezoで、こういう環境に慣れてしまっていたため、自動でフィードが更新されないと、非常に腹立たしいのである。XPでなんとも思わないのは、「フィードヘッドライン」が無いからだろう。

てなわけで、なんで自動で更新されないのかズッと気になっていた。ググったりして調べても、MSの

  1. Internet Explorer 7 で RSS フィードが更新されないことがある
  2. Internet Explorer 7 で RSS フィードが一覧に表示されない、または RSS フィードを購読できない

くらいしかマトモな情報が見当たらない。で、この二つとも、まったく役に立たないから腹が立つ。Feedsフォルダの削除やフィードのエクスポート/インポートは何回やったことか。あげくは、一気にインポートするのがマズいのかと一個一個追加したりしてみたり。まったく、ほんとに、これっぽっちも役に立たなかった。

X61s上の自分のアカウントは、Windows転送ツールでアカウント情報をAlezoからコピってきたものだ。なら、新規にアカウントを作り、まっさらなプロファイルから始めれば、フィードも自動更新されるかもしれない。なんとも根拠薄弱な仮説を立てて、あれこれアカウントを作ったりして実験を繰り返すも、まったく更新される気配はない。が、この一連の作業をしているうちに、UACで使うために用意した Administratorsに属する管理者アカウントではフィードが更新されていることを発見。おいおい、フィードの自動更新には特権がいるのか? とどんどん後ろ斜め向きな仮説を積み上げていくことに。もちろん、特権持ってるアカウントを新規に作っても、自動更新されたりはしなかったので、この仮説は全否定されることになるのであるが。

そんな無駄な努力を繰り返していた今日の朝、なんの気なしに検索していて、「Windows Vistaでフィードが更新されなくなったときは」てなタイトルのBlogを発見。MS RSS BlogのFeeds not updating?の紹介である。要は、msfeedssync がきちんと起動されないからというもの。各種操作方法が載っていることもあり、これがビンゴな情報だった。

自アカウントでschtasks /queryを実行しても、User_Feed_Synchronization-{SID?}は現れてこない。管理者アカウントで試すと「次回の実行時刻」とともに現れる。で、その時刻になるのを自アカウントで待ち、イベントログを調べると、

ログの名前:       Microsoft-Windows-TaskScheduler/Operational
ソース:           Microsoft-Windows-TaskScheduler
日付:             2008/03/27 8:04:59
イベント ID:      332
タスクのカテゴリ: 起動条件が満たされていません。ユーザーがログオンしていません
レベル:           警告
キーワード:         
ユーザー:         SYSTEM
コンピュータ:     nanaca.noroi.jp
説明:
起動条件が満たされたときにユーザー "nanaca\[管理者ID]" がログオンしていなかったため、タスク スケジューラはタスク "" を起動しませんでした。ユーザー操作: ユーザーがログオンしていることを確認するか、ユーザーがログオフしているときに起動を許可するようにタスクの定義を変更します。

てなものを発見(このイベントログ、ローカル>アプリケーションとサービスログ>Microsoft>Windows>TaskScheduler>Operationalにある。XPと違ってVistaにはイベントログが山のようにある。こんなの探し出すのは素人にゃ無理だろう。)。きっちり5分おきに出ている。これが原因だ。

MS RSS Blogに書かれていたのとは違う原因だが、タスクスケジューラの不具合でmsfeedssync.exeが実行されないが故に、フィードが更新されていかないという部分は同じである。

管理者アカウントでのフィードの自動更新を止めると、このエラーは発生しなくなった。その状態で、自アカウントから

msfeedssync disable
msfeedssync enable

を行うと、schtasksの出力にUser_Feed_Synchronization-{SID?}が現れた。5分後のスケジュール実行もエラーはなく、そのまま「次回の実行時刻」まで待っていると、きっちりフィードが更新されるようになった。万歳!

たぶん、こうなれば、管理者アカウント側でフィードの自動更新を元に戻しても大丈夫だろう。きっと「なにか」が引っかかってたのだ。でもまぁ、管理者アカウントではフィードは読まないので元には戻さないけど。

どうでもいいことだが、上のイベントログを見てわかるとおり、この作業は朝の9時前までやっていた。なんせ「次の更新時刻」まで待たないと直ったかどうか判別がつかないから、なんだかんだ試してるうち時間が過ぎてったのだ。もちろん会社は遅刻である。

ちなみに、会社のXPでの原因は、MS RSS Blogに書かれていたものとほぼ同じだった。schtasksでエントリは出てくるものの、「状態」欄にエラーが出ていた。こちらは、msfeedssyncのdisable/enableでは直らなかったため、いったんスケジュールエントリを、schtasks /Delete /TN タスク名で削除した後、msfeedssync enableで正しくスケジュールされるようになった。これまためでたしめでたしである。

ところで、フィードの更新はIE7とは別のmsfeedssyncが行うため、IE7が起動されてなくても、サイドバーの「フィードヘッドライン」は更新されていく。なるほど、確かにこうなってる方が便利だよな。ちょっとだけ納得。けど、こんな不具合が高い確率で発生する以上、実装方法は見直すべきだろう。

0 件のコメント:

コメントを投稿