WindowsVista対応試験時の苦悩

WindowsVistaの後続OS「Windows 7」の発売予定日が2009年10月22日となったそうで、私のような末端プログラマにとって、それほどうれしくない日が近づいています。
というのも、既存アプリケーションの新OS対応試験を行わなければならないためです。

ということで、今回は以前行った既存アプリケーションのVista対応試験についてのことを書き留めておこうと思います。


既存アプリケーションをVistaにも対応させたいということで、Vista上でアプリケーション試験を一から全て行います。
Vistaは、Home Basic、Home Premiumなどとエディションの数が全部で6個もあり、それら全てで試験を行えという指示です。

途中までは問題がでなかったので、このまま何事もなく試験を終えられるのかなと思っていた矢先、うまく動かないところを発見してしまいました。

アプリケーションで作成したはずのファイルが、指定したフォルダに存在しない。
ドラックアンドドロップがうまくいかない。

まずはこの辺の問題が上がってきました。
さらに、「アプリケーション起動時に『ユーザーアカウント制御』ダイアログが必ず出力されてしまう」といったことも問題と取られ、これについても解決方法を探さなければなりません。

ということで、早速マイクロソフトのサイトに行って、Vistaに関するドキュメントをダウンロードし読み始めます。
http://download.microsoft.com/download/3/4/4/3448ddf3-ca22-45bd-9984-1237e8ed0019/Windows_Vista_application_compatibility_paper.doc


まず①の問題は、Vistaの新機能である「File and Registry Redirection」が原因でした。
Vistaの場合、例え管理者権限でOSにログインしても、アプリケーション実行時は権限を一般ユーザ権限まで下げるそうです。
その場合、アクセス権が制限され、一般ユーザ権限ではアクセスできないフォルダが出てきます。
こうなると、管理者権限で動作することを前提としたアプリケーションは正常に動作してくれません。
その対応のためかVistaは、アクセス権がないフォルダに対してアプリケーションが書き込み処理をした場合、「File and Registry Redirection」機能が勝手に動きます。

これは書き込み権限の無いフォルダやレジストリへの書き込みを、ユーザーごとの領域にリダイレクトするという機能です。

つまり、ファイルの保存先をVistaが勝手に変えてしまっていたのです。

この問題は、Program Filesファルダの下位層フォルダをデフォルトのファイル保存先としてしまったため起きてしまったことです。
通常、何らかのファイルの保存先デフォルトフォルダはマイドキュメントの下位層にするべきであり、Program Filesフォルダの下位層フォルダをデフォルトフォルダとしてしまったことがそもそもの原因です。

ですのでこれは「Vistaのせい」というより、「アプリケーションの仕様の問題」と言えます。


次に、②のドラックアンドドロップができないという問題についてです。
エクスプローラからアプリケーションにドラッグアンドドロップしても成功してくれず、これについてもいろいろ調べてたんですが、どうやら権限が異なるアプリケーション間のドラックアンドドロップはできない仕様になっているようです。

つまり、一般ユーザ権限で実行しているエクスプローラから、管理者権限で実行しているアプリケーションへのドラックアンドドロップはできないということです。

よく考えたら自然なことなのですが、XP以前のOSではOSログイン後に実行権限が異なるアプリケーションが起動されるなんてことはありませんので、なかなか原因をつかめずまいってました。

そして最後に、「アプリケーション起動時に『ユーザーアカウント制御』ダイアログが必ず出力されてしまう」という件についてです。

試験したアプリケーションを、普通に起動させただけで(エグゼをダブルクリック)、必ずユーザアカウント制御ダイアログが出力されてしまいます。
他のアプリケーションも同じなのかを確かめてみたのですが、ユーザアカウント制御ダイアログが出力されることはありませんでした。

意図してないのになぜ勝手にダイアログが出力されるのか?
これは、Vistaはアプリケーションの起動前に実行に必要な権限をチェックする機能があるようで、その機能に引っかかっているからダイアログが勝手に上がってしまうということのようです。

ユーザアカウント制御ダイアログを表示させないようにするためにどうしたらいいか、かなり悩んだんですが、この件については正直お手上げでした。

確かにそのアプリケーションはドライバを操作する処理など、かなりハードウェアよりの処理を含んでいたので、Vistaのチェック機構に引っかかってもおかしくないと言えました。

むしろ、そういう処理が含まれているためユーザアカウント制御ダイアログが出力されてしまうのは、チェック機構を設けているVista上で動作させる以上仕方のないこと、と捉えても良いのではないか…。

最終的に、ユーザアカウント制御ダイアログが出力されてしまう件については、仕様ということで終えました。


このようにVistaにはかなり苦しめられました。
そもそもエディションをなぜあんなに細かく分けているのか、理解にし難いところがあります。
Windows7も6個のエディションが発売されるそうで、
この変な慣習は今後廃止してほしいです。