関連付けで環境変数を使う
関連付けでファイルを開こうと思ったら
指定されたデバイス、パス、またはファイルにアクセスできません。
アクセス許可がない可能性があります。
と言ってきやがる。
FileTypesMan *1 で見る限り、どこにも異常はない。面倒くさいがレジストリを直接見る。
C:\>reg query HKCR\txtfile\shell\open2\command
HKEY_CLASSES_ROOT\txtfile\shell\open2\command
(既定) REG_SZ %SystemRoot%\system32\NOTEPAD.EXE %1
デフォルトのverbはopen2にしてある。一見したところ、どこにも問題がないように見える(メモ帳の場合 %s は " で囲う必要がない)。そもそも Process Explorer *2 で見る限り、エラーメッセージを出しているのはメモ帳ではないようだ。
ちょっと他を見回してみると、すぐに気づいた。環境変数だ。ちゃんと展開させるには、 REG_SZ (文字列値)ではなく、 REG_EXPAND_SZ (展開可能な文字列値)にする必要がある。
C:\>reg add HKCR\txtfile\shell\open2\command /ve /t REG_EXPAND_SZ /d ^"%^SystemRoot%\system32\NOTEPAD.EXE^ %1"
値 は存在します。上書きしますか? (Yes/No) yes
この操作を正しく終了しました。