(Vista)UACによりバッチファイルを管理者として実行するとパスが変わる
最近 Vista の UAC にほんとイライラさせられてる3流プログラマです。
ほんと、UAC は PG に対するいやがらせとしかとれませんね。

さて、今回はバッチファイルの実行パスに関する話です。
たとえば C:\testDir に battest.bat というバッチファイルが置いてあるとします。
中身はなんでもいいんですが、こんな感じで。

echo バッチテスト
pause

これを Vista で UAC 有効の状態でエクスプローラから普通に実行します。(一般ユーザ権限で実行される)
するとこんな感じになります。

C:\testDir>echo バッチテスト
バッチテスト

C:\testDir>pause
続行するには何かキーを押してください . . .

カレントディレクトリはちゃんとバッチファイルを起動したパス C:\testDir になってますね。

次にこのバッチファイルをエクスプローラから右クリック→管理者として実行 とします。
UAC の警告ダイアログがでるので実行を許可します。
すると

C:\Windows\system32>echo バッチテスト
バッチテスト

C:\Windows\system32>pause
続行するには何かキーを押してください . . .

となります。

カレントディレクトリが C:\Windows\system32 になっちゃってます。

おそらくUAC が有効だと cmd.exe に対して引数でバッチファイルを渡すという仕様なんでしょう。

このわけわかめな仕様によりバッチファイル内で相対パスでなんか処理するときにうまくいきません。

全く困ったもんです。


ついでにいうと下記画像のように UAC で保護されてるフォルダで新規作成メニューを表示してもフォルダしかないのも不便極まりないですね。
e0091163_152868.jpg


追記(2009/7/6):
コメントでご指摘いただいたように、バッチファイルの1行目に、

cd /d %~dp0

とすると、カレントディレクトリがバッチファイルの置いてあるパスになるようなので、これで問題解決です。
tetsu さん。有難うございました。
[PR]
by jehoshaphat | 2009-05-08 15:05 | 豆知識 | Trackback | Comments(2)
トラックバックURL : http://jehupc.exblog.jp/tb/10199825
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by tetsu at 2009-07-02 16:04 x
管理者で実行するバッチファイルの1行目には
おまじないのように
cd /d %~dp0
(~は半角のチルダです)
これを入れてます。
管理者以外で実行の時でも害はないので・・・
Commented by jehoshaphat at 2009-07-03 09:13
なるほど。
cd /d %~dp0 でバッチファイルの存在するディレクトリに移動できるんですね。知りませんでした。。。
貴重な情報ありがとうございます。助かりました。


<< (Ado.Net)DataSe... Google Desktop ... >>