2011-08-04 17 views
1

私のプログラムでは、SHGetFolderPathを使用してAppDataパスを取得しています。しかし、私は、コンピュータ上の他のユーザーのAppDataパスを取得する必要があります。私がそれを行うと考えることができる唯一の方法は、現在のユーザーのパスを取得し、現在のユーザーの名前を他のユーザーの名前で置き換えることです。私はどのようにユーザーのリストを取得するのか分からない。多分もっと洗練された解決策があります。あなたが洞察力を持っているなら、私はそれを高く評価します。あなたの状況についてはC++他のユーザーのappdataパスを取得

+1

なぜそれが必要ですか?完全な特権で実行している場合(そしてそのために良い言い訳が必要な場合を除く)、これらのフォルダにアクセスすることはできません。 –

+0

私はこれを行う正当な理由は考えられません。それは非常に頑強に聞こえません。 –

+0

私の以前のバージョンでは、appdataにconfigファイルがありました。すべてのユーザーが保存を共有できるように、最新バージョンのProgram Filesに移動します。可能であれば(現在のユーザーの場合)権利がある場合は、すべてのユーザーに対してその操作を行いたいと思います。 – Lienau

答えて

1

は、私は、次のをお勧めします:

  1. はのAppData内の構成ファイルを保存し続けますが、CSIDL_COMMON_APPDATA(SHGetFolderPath)に保管してください。このAppDataはすべてのユーザーと共有されます。セットアッププログラム(または管理者ユーザー)は、「Everyone」に完全アクセス権を与えるプログラムの名前に基づいてこの場所にフォルダを設定できます(これはWindowsインストーラでは非常に簡単です)。そうすれば、どんなユーザーでもそれを読み書きすることができます。 "Program Files"のすべてが決して変更されるべきではありません。読み取り専用の実行可能ファイル、DLL、およびその他のリソースが含まれている必要があります。マイクロソフトでは、この場所への書き込みを長期間禁止しています。多くの管理者は、Program Filesでの定期的なバックアップ&の復元を必要とするカスタムユーザーデータに遭遇することはもう想定していません。

  2. ソフトウェアを実行すると、現在のユーザーのAppData(旧バージョンで保存されている)のデータをチェックし、マシンのAppData(上記の#1で説明)のデータとマージできます。ユーザーのデータを移行するには、そのユーザーとしてログインし、ソフトウェアを実行します。

他のユーザープロファイルからすべてのデータを収集していることに気付いているのは本当に素晴らしい方法ではありません。マイクロソフトがサポートしているものは何もありません(それはわかっています!)。

Program Files内のデータの格納について:http://msdn.microsoft.com/en-us/library/bb776776(VS.85).aspx "Program Filesフォルダの下にユーザーデータを格納しないでください。"同様のことを言う他の多くの参考文献があります。

関連する問題