3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

Vista UAC対応

Vistaから導入されたUACですが、ソフト開発者にとっては悩みの種です。

 

VSセットアッププロジェクトで作ったインストーラでもVista上で動かすと警告が出ます。

 

で、今回困ったのはデータファイルをすべてのユーザで共通に使えるようにするということです。

(データファイルは最初からインストーラに含まれています)

 

最初、データファイルの置き場所はアプリケーションフォルダ(デフォルトだとProgram Files配下)にしておいたのですが、UACにより、Program FilesやWindows配下は通常のアプリケーションからはアクセスできません。

(もしデータファイルがアプリケーション初期起動時に作るようなものだったらバーチャルストア(仮想フォルダ)に保存されることになるのでしょう)

 

アプリケーションを管理者権限で動かせば、どこでもアクセス可能なのですが、いちいちショートカットを右クリック→管理者として実行はめんどいものです。

特に、一般ユーザだと管理者のパスワードを要求されますし、管理者権限のユーザでも確認のダイアログが出てきます。

 

(実は普通にダブルクリックでも管理者として実行さえることが可能です。

プロジェクトのプロパティから「UAC設定の表示」で作成される app.manifest ファイルに下記の記述を追加するといいみたいです。

 

この場合でもダイアログの表示は出ます。ただ、ダブルクリック時に管理者として実行してくれるだけです。)

 

ということで、データの置き場所をすべてのユーザに見えるようにしなければなりません。

%ALLUSERSPROFILE%(VistaだとC:\ProgramData)に置こうとおもったのですが、ここもダメっぽいですね。

結局きれくないと知りつつもC:\にアプリケーション用のフォルダを作り、インストール時にそこにデータファイルを置くようにしました。

 

VistaUACなんとかならんですかね。

 

(ちなみに各ユーザで完全にデータを分ける場合はローカルのApplication Dataにデータを置いたのでいいみたいです。)

 

参考

Vista で動くプログラムを書くために ~UAC編~

管理者権限で実行する(マニフェスト)

 

追記 2009/4/27

%ALLUSERSPROFILE%(VistaだとC:\ProgramData)に置く方法ですが、最初に設定して後は違うユーザからでも読み込むだけなら問題ないようです。(Usersグループに読み込み権限はあるっぽいので。。)

この場合、ファイル作成時のユーザは所有者となるので、そのファイルに対してはフルコンらしいです。

逆にいうと、対象のファイルに権限さえあれば、UACのリダイレクトさせることなく、ファイルの更新ができるようです。

まあこれは机上の論理なんで実際はテストアプリケーション作ってみないとなんともいえません。暇あればテストしてみようかと思います。

このことに気付いたのはVista で動くプログラムを書くために ~UAC編~ の「All Users 用の更新対象データを無造作に設置しない」項目を読んでからでした。。