Vistaでドライブレターがないボリューム上のファイルがインデックスに登録されない

2008/03/09 | ラベル: , , | 0 コメント | このエントリーを含むはてなブックマークを表示

Windows Vista には Windows デスクトップ サーチ の機能が統合されていて、様々なファイルの検索が可能になっている。デフォルトでは Users フォルダとオフラインフォルダがインデックス登録され、検索可能になっている。

だけど、なぜか自分のドキュメントフォルダに保存したPDFファイルがインデックスに登録されない。Administratorのドキュメントはちゃんと登録されている。インデックス対象の選択画面を開くと、なぜか自分のデータフォルダだけ表示されないではないか。。。どうやら、ジャンクションフォルダはインデックスの対象外っぽい。そういう仕様なんだろう。

なぜジャンクションになってるか

自分はデータ領域をシステムドライブと分けたいという性分なので、Documents and Settings フォルダを移動せずに別のドライブにマウントする方法 の手順で自分のデータ領域(C:\Users\xxx)を別ボリュームに分けた。dirコマンドで見てみると、C:\Users\xxx はジャンクションになっている。

ドライブレターをつけてみた

試しにデータ領域にしているボリュームにドライブレターを付けると(Uドライブとした)、インデックス対象の選択画面にはそのボリュームが見えるようになる。マウントポイントである C:\Users\xxxはやっぱり見えない。インデックス対象としてUドライブを選択してインデックスを再構築すると、ファイルがインデックス登録されるようになった。しかーし、UドライブとC:\Users\xxxと、2重で登録されてしまう。ださい。。。Uドライブをインデックス対象から外したり、Uドライブのドライブレターを外すと、やっぱりインデックス登録されない。

シンボリックリンクにしてみた

Vista では正式にシンボリックリンクに対応したということなので、ボリュームのマウントをやめて、C:\Users\xxx を Uドライブへのシンボリックリンクにしてみた。すると、Uドライブをインデックスの対象から外した状態でも、C:\Users\xxx以下のファイルがインデックスに登録されるようになった。でも、今度はインデックス対象を選択する画面で自分のデータフォルダだけでなくUsersフォルダ全部が見えなくなってしまった。。。orz

一応インデックス登録されるようになったし、ファイルの読み書きやアプリの利用など通常利用に問題はなさそうなので、しばらくこれで使ってみるか。。。

ちなみに、Vista でシンボリックリンクを作成するには mklink コマンドを使う。

Documents and Settings フォルダを移動せずに別のドライブにマウントする方法

| ラベル: , | 0 コメント | このエントリーを含むはてなブックマークを表示

データ領域をシステムドライブと別にしたいという人は結構いるんじゃないかと思う。自分もDocuments and Settingsフォルダの場所を変更する を参考にしてDドライブに移している。Documents and Settings フォルダ(名前長いよ。。。)は Vista では Users フォルダに名前が変更されている。うん、短くていいね:-)

しかし上記の手順で Documents and Settings フォルダを別ドライブにすると、不具合が出るアプリもある。自分は Windows Media Player がエラーで使えなくなった。DRM関連の設定がレジストリにバイナリ値として「C:\Documents and Settings\...」と設定されていたためだ。念のためレジストリはチェックしていたのだけど、バイナリ値は検索に引っかからなかった。

他にも、Google Earth は Documents and Settings が Cドライブにあるものとして作られているのか、使うたびに Cドライブに Documents and Settings フォルダが作成されてしまっていた。
※今では解消している模様。

さて、これらの問題も変更前のパス( C:\Documents and Settings )でもアクセスできれば解消できると思われる。パスは変更せず、実際のデータは別のドライブに保存される。

方法

  1. ディスクを追加するなどして、Cドライブ以外のボリュームを用意する。NTFSでフォーマットする。
  2. Documents and Settingsフォルダの場所を変更する を参考にして、「C:\aaa」など適当な場所に一時的に移動する。データ領域として使いたいボリュームはまだここで使わないように。
  3. 「C:\aaa」にちゃんと移動できたことを確認したら、Documents and Settings フォルダを空にする。
  4. コントロールパネル -> コンピュータの管理 -> ディスクの管理 を開く。
  5. データ領域として使いたいボリュームを右クリックして「ドライブ文字とパスの変更」を選び、空にした「C:\Documents and Settings」フォルダにマウントする。
  6. 「C:\Documents and Settings」フォルダに書き込みができることを確認したら、「C:\aaa」に変更した Documents and Settings を再度「C:\Documents and Settings」に戻す。

これで OK、なはず。自分は試してないので、誰かやってみてください。(ぉぃ...)

一応、Vista で似た手順を踏んで C:\Users\test を別ボリュームにすることはできた。C:\Users フォルダ全体じゃないっす。ただちょっと弊害が残った。詳細別エントリで。。。↓

関連エントリ

body onload は使ってはいけない?

2008/03/08 | ラベル: , | 0 コメント | このエントリーを含むはてなブックマークを表示

独自の Windows Vista サイドバー ガジェットを作成する より引用。

JavaScript をかじったことがある方なら、"eval is evil" という言葉を耳にしたことがあるでしょう。ご存じない方は、まず Web で調べてから続きをお読みください。 eval を使用すべきでない理由をおわかりいただけたところで、ここではこの規則に修正を加えて、JavaScript のテキストを HTML 内の属性に配置すべきではないという規則と、setInterval や setTimeout に文字列を渡すべきではないという規則を付け加えたいと思います。JavaScript のテキストを配置してはいけない属性には、body onload 属性も含まれます。この属性は eval ステートメントと同じように内部で解釈されるからです。 "body onload がだめならどうやってコードを実行するんだ" とおっしゃる方もいるでしょう。そのような方には、window オブジェクトの onload イベントに関数をアタッチする習慣を付けることをお勧めします。次のコードは、onload イベントと onunload イベントへのアタッチの方法を示しています。

function pageLoad() {
    window.detachEvent(“onload”, pageLoad);
    window.attachEvent(“onunload”, pageUnload);
    //page initalization here
}

function pageUnload() {
    window.detachEvent(“onload”, pageUnload);
    //gadget is closing, clean up
}

window.attachEvent(“onload”, pageLoad);

正直「evalステートメントと同じように内部で解釈されるからです」というのもよく分からなかったけど、上記のように書くほうが良いお作法ってことですかね。アタッチする方法だと複数の関数をつけることもできる。上記コードはちゃんと後片付けもしている。なるほど。

Firefox や Opera では addEventListener、removeEventListener を使う。

if (window.addEventListener)
  window.addEventListener("load", pageLoad, false);
else if (window.attachEvent)
  window.attachEvent("onload", pageLoad);
else
  window.onload = pageLoad;

メール送信時にアドレスから表示名を取り除く拡張 Auto Address Cleaner

2008/02/18 | ラベル: | 38 コメント | このエントリーを含むはてなブックマークを表示
宛先メールアドレスから次の例のように表示名を取り除く Thunderbird 拡張 Auto Address Cleaner を作ってみた。
"雷鳥 太郎" <taro@example.com>

  ↓
taro@example.com
同様の拡張で AddressCleaner という拡張があるが、Auto Address Cleaner はメール作成中は表示名は消さず、送信時に表示名を取り除くようになっている。

AddressCleaner Auto Address Cleaner
  • アドレス入力時に自動で取り除く(auto_cleanを有効にした場合)
  • コンテキストメニューから手動で取り除く
  • メール送信時に自動で取り除く

Auto Address Cleaner は、表示名は自動で取り除きたいけど、メール作成中は宛先を間違えてないか確認しやすいように表示させておきたいというケースに向いている。
ダウンロードはこちらからどうぞ。: Auto Address Cleaner

なお、本家の AddressCleaner と同じ機能は実装してないので、必要なら併用してください。

お願い: 以下のリンクから Dropbox のアカウントを作ってくれると作者が喜びます。
https://db.tt/EBiogbwn

(補足)このエントリについて

以前このエントリーでは、「Plain Address」として公開していました。同名の拡張が既にあったこと、それなりに需要がありそうなことから名称を変更しました。(2008.5.1)