俺#

新潟市でIT業を営むおっさんのブログ。

Windows VistaでDrag&Dropできない問題の回避方法

Vistaドラッグアンドドロップ対応のソフトなのに、ドロップしても無視される場合があるのに気づいた。ちゃんと調べてたわけではないが「管理者として実行」するとできなくなる場合が多い。一部そうでなくても出来ないソフトもあるのだが(そのソフトは拙作なのでバグかもしれん(苦笑

で、何が困ったかって、Vistaでうまく動かすことが出来た光学ディスクライティングソフト「PlexTools2」と「DragonDropCD+DVD4」がどちらも「ドロップしないとファイルが登録できない」仕様なのである。しかも、どちらも「管理者として実行」してあげないと動かない。つまり、ソフトは起動するのにファイルが登録できなので焼けない、という状況である。

セキュリティのために「管理者として実行」したプロセスへのメッセージ送信が抑制されているのか、単にあるレイヤで「空間」が異なるために通信自体が不可能なのか、いずれにしてもVista対応の壁が結構厚い。セキュリティを重視したのだろうが、UACに関連する非互換性についてMSはホントに思い切ったものだ(^^;

さて、上記の推察から「explorer.exe」とライティングソフトを両方を「管理者として実行」し、同じ「空間」で動かしてあげればなんとかなるような気はする。だが、explorer.exeはログオン時から起動してるし「管理者で実行」オプションも有効に出来ない。そこで、またまたバッチファイルの登場。

前準備として、「フォルダオプション」で「新しいウィンドウを別のプロセスで開く」(のような字面のオプション(^^;)を有効にする。これによりexplorer.exeのプロセスが複数存在できるようになる。次に、以下のようなバッチファイルを作る。

cd /d "C:\Program Files\(使用するソフトのフォルダ)"
start (使用するソフト).exe
explorer.exe (開きたいフォルダのパス)

で、最後にこのバッチファイルを「管理者として実行」する。すると、期待通り同じ「空間」でexplorer.exeと使いたいプログラムが実行されたのか、めでたくドラッグアンドドロップができるようになる。もちろん、バッチファイルで開いた新しいウィンドウ(=新しいexplorer.exeのプロセス)からしかドラッグできない。

ちなみに、explorer.exeだけをバッチファイルで起動して、ソフトを別途「管理者として実行」しても、ドラッグアンドドロップできなかった。必ずセットで起動する必要があるので、やはり「空間」的な問題のようだ。プロセスの親子関係がないと、お互い別の「空間」になってしまうのかも。このへんの仕組みは、ちょっと詳細を調べてみるか。

まぁ、これでUAC回避に関するテクニックは出揃った感がある。ヤレヤレだ。今のところVista正式対応ソフトはウィルス対策の1本だけだが、Vista環境もなんとか開発用マシンとして普段使いできそうになった。あとはソフト側が対応されるのを待って、順次アップデートしていこう。あ、自分で作ってるソフトも対応しなきゃ〜(笑