ドライブの関連付けでは引数に注意

ドライブの右クリック メニューに以下のような項目を作ったら、うまく動かなかった。

キー名 値の名前 値の種類 値のデータ
HKEY_CLASSES_ROOT\Drive\shell\foo\command (既定) REG_SZ foo.exe "%V"

例えばCドライブを右クリックして foo を選ぶと、コマンドラインはこうなる。

foo.exe "c:\"

すると main() 関数の仮引数はこうなる。

引数の番号 引数の値
argv[0] foo.exe
argv[1] c:"

\ の次にある文字がエスケープされて、パスが壊れちゃってるよ。 CommandLineToArgvW() を使ってもまっく同じ結果。

ドライブの関連付けでは、" で囲まない方がいいかもしれない。

フォルダにドライブをマウントした場合、パスにスペースが含まれる可能性があるが、実際にやってみるとフォルダの関連付けが使われるようなので問題ない(いや、それはそれで別の問題があるか?)。