2008/08/22(Fri)キーボードだけでアプリを昇格 on Vista

2008/08/22 13:44 Software::Windows
Vista発売当初から、「あれ?」と思っていたことなのだが、アプリケーションを昇格状態で起動するのって、わざわざショートカットを右クリックして、"管理者として実行する..."を選ぶしか方法がないのかなぁ、キーボードだけで起動する方法無いのかなぁ、と思っていたのだが、たまたま調べて発見した。

cmd_from_startmenu.png


Vista新設のこのスタートメニューのテキストボックスに目的のアプリを入力(例えばcmd)し、Ctrl+Shift+Enterを押すと……


昇格ダイアログが開いて、Alt+Cを押せば昇格したアプリを立ち上げられる。
おぉ、こりゃ便利。


が、問題はクラシックメニューにしてるとこのテキストボックスが出ない&Win+Rで出現するダイアログではCtrl+Shift+Enterが有効でないようなので、まだ何か探さないとなぁ……というところである。
runas /trustlevel:0x20000とかじゃあ昇格できないしなぁ…。

2008/08/22(Fri)バッチファイルTips "%~dp0"

2008/08/22 13:20 Software::Windows
Windowsには、ちょっとした処理をやらせるのに便利なバッチファイルというのがあるが、VistaからのUAC(ユーザーアカウント制御)で困っていた点があった。

というのが、VistaでUACがONの場合にシステムフォルダのような昇格が必要なフォルダへの書き込みを行った場合、
  • 昇格しないとカレントディレクトリは実行位置だが、書き込めない
  • 昇格すると、カレントディレクトリが強制的にC:\Windows\System32になる
という点である。

カレントディレクトリが分からないとなぜ困るかというと、カレントディレクトリにあるファイルを特定のフォルダへコピーさせるのが厄介だからである。

で、色々探してたら、いいコマンドがあった。
cd /d %~dp0
詳細部を説明していくと
cd
Change Directoryコマンド
/d
現在のドライブ名も一緒に変更する(これが無いとドライブを跨いだcdが不可能)
%0
%1, %2, %3...で第1, 2, 3,...引数を取得できるように、%0で実行パスが取得できる
~dp
dでカレントドライブ、pでカレントディレクトリ、~で""を削るという指定。~が無かった場合、中途半端に"が残ったりするので。*1


というわけで、バッチファイルの先頭には
@echo off
cd /d %~dp0

からはじめる癖をつけようか…。

参考元:な○の 屋: Vista エピソード その1

*1 : %1で受け取ったディレクトリにa.txtを作りたい場合、%1a.txtとすると、"C:\abc\"a.txtという風になる可能性がある。これを防ぐため、%~1a.txtとすれば、C:\abc\a.txtとなる。