DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VistaでExeと同じ場所に設定ファイル保存

環境/言語:[Windows Vista]
分類:[.NET]

こんにちは。

プログラムを作っていて
設定をExeと同一の場所にファイルで保存しようとしています。

その時、
確か、WindowsVistaだと、C:\Program Files以下の場所に書き込むことができなかったと記憶しています。

それがUACが働いている時だけそうなのか
OSがVistaの時には無条件にC:\Program Files以下に書き込めないのかは、わかっていません。

そこでExeと同一の場所に設定ファイルを書きこみたいという
利便性も考慮して、
OSのバージョンと、書きこむ場所もみて次のような
コードをかきたいのです。

SaveFileName = 保存先
IF [SaveFileName が C:\ProgamFiles以下] then

    IF [OSがVista以降] then
    (もしくはUACが有効なら)

        SaveFileNameの文字列のC:\Program Files\を
        C:\Users\[ユーザ]\AppData\Roaming\ に書き換える

    End If
End If

Windows 7 も見越してコードを書きたいので
この場合に、IFに入れるべき適切な記述を教えてください。

OSの挙動についても、私の理解が間違っているかもしれません。

アドバイスください。

よろしくお願いします。
あれ?
Vista でもユーザが新規作成/変更するひな形ファイルを Program Files\アプリケーション フォルダ\templates\ (templates フォルダはインストーラに作成させる) に保存させていますが、どんな環境でも問題は起きていませんよ。

■No24173に返信(FutoNekoさんの記事)
> 確か、WindowsVistaだと、C:\Program Files以下の場所に書き込むことができなかったと記憶しています。
>
> それがUACが働いている時だけそうなのか
> OSがVistaの時には無条件にC:\Program Files以下に書き込めないのかは、わかっていません。
■No24174に返信(ざこびっちさんの記事)
> Vista でもユーザが新規作成/変更するひな形ファイルを Program Files\アプリケーション フォルダ\templates\ (templates フォルダはインストーラに作成させる) に保存させていますが、どんな環境でも問題は起きていませんよ。
インストラがtemplatesフォルダのUACを変更しているというわけではない?

はやり
>設定をExeと同一の場所にファイルで保存しようとしています。
はあまり好ましくないのでしょう。
ユーザ単位の設定であれば、Vistaでもそれ以前のOSでも、ユーザ用の設定フォルダに設定ファイルを置くようにすべきです。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39582&forum=7
も参考にしてみてください。
んーーと、
ユーザ用の設定フォルダがexeの下にないと
DropBoxやUSBメモリ対応を考えたソフトの場合、不便なのです。
C:\Users\[ユーザ]\AppData\Roaming\
あたりはできることなら使いたくないのです。(VistaでUACの場合は仕方なく使います)

行儀が悪くても、OSに従いたくもないので回避策を教えていただけたら
と思っています。


インストーラもどちらかというと使いたくありません。
Program Files以下に配置されたとしても
exe配下のフォルダを自分のアプリ側でUAC変更できるのなら
その方法でもいいかも。と考えています。


■No24175に返信(Blueさんの記事)
> はやり
> >設定をExeと同一の場所にファイルで保存しようとしています。
> はあまり好ましくないのでしょう。
> ユーザ単位の設定であれば、Vistaでもそれ以前のOSでも、ユーザ用の設定フォルダに設定ファイルを置くようにすべきです。
>
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39582&forum=7
> も参考にしてみてください。

情報ありがとうございます。読んでみます。
リンク先もその先も見てきましたが、現状でうまくいっていることとユーザというものが存在するので、このままいっちゃいます。


■No24176に返信(FutoNekoさんの記事)
> んーーと、
> ユーザ用の設定フォルダがexeの下にないと
> DropBoxやUSBメモリ対応を考えたソフトの場合、不便なのです。
> C:\Users\[ユーザ]\AppData\Roaming\
> あたりはできることなら使いたくないのです。(VistaでUACの場合は仕方なく使います)
>
> 行儀が悪くても、OSに従いたくもないので回避策を教えていただけたら
> と思っています。
>
>
> インストーラもどちらかというと使いたくありません。
> Program Files以下に配置されたとしても
> exe配下のフォルダを自分のアプリ側でUAC変更できるのなら
> その方法でもいいかも。と考えています。
>
>
> ■No24175に返信(Blueさんの記事)
>>はやり
>>>設定をExeと同一の場所にファイルで保存しようとしています。
>>はあまり好ましくないのでしょう。
>>ユーザ単位の設定であれば、Vistaでもそれ以前のOSでも、ユーザ用の設定フォルダに設定ファイルを置くようにすべきです。
>>
>>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39582&forum=7
>>も参考にしてみてください。
>
> 情報ありがとうございます。読んでみます。
>
■No24173に返信(FutoNekoさんの記事)
> 確か、WindowsVistaだと、C:\Program Files以下の場所に書き込むことができなかったと記憶しています。
Vistaだけではありません。
XPであっても、ユーザの権限次第でProgram Filesに書き込むことができない等、あり得ます。

> そこでExeと同一の場所に設定ファイルを書きこみたいという
> 利便性も考慮して、
インストール形式にしない、Program Filesに配置しないということで、ドキュメント・説明等でカバーしてはいかがでしょうか。

# 設定ファイルがexeと同一のフォルダにある時点でマルチユーザを想定しない仕組みであるため、
# 他のユーザと共同で使うProgram Filesに配置するべきではない。
# ユーザの独自のフォルダ以下にあるべき?

> SaveFileName = 保存先
> IF [SaveFileName が C:\ProgamFiles以下] then
Program FilesがC:\だとは言い切れません。

■No24175に返信(Blueさんの記事)
> インストラがtemplatesフォルダのUACを変更しているというわけではない?
ACL(Access Control List)ですね。
ACLとUACは異なりますので、ご注意下さい。

DOBON.NET | プログラミング道 | プログラミング掲示板