4

特定のユーザーのローカル アプリケーション データ フォルダーを取得する良い方法を探しています。そのユーザーのログインの詳細を入力する必要はありません。

SHGetFolderPath()は、ローカル appdata フォルダーを取得するユーザーのアクセス トークンを受け入れることができますが、アクセス トークンを取得するには、ユーザーのパスワードを提供する必要があります。また、ドキュメントによると、これは <= Windows 2000 ではサポートされていません。

レジストリ キーHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell フォルダーには、現在のユーザーのローカル appdata フォルダーの場所を含む AppData 値が含まれています...したがって、特定のユーザーの HKCU ハイブを技術的にマウントできます。この値にアクセスします。ただし、Microsoft はこのキーの使用を強く推奨していないようで、不正確な場合もあると聞いています。

皮肉なことに、Windows では、Explorer を開いて正しい場所を参照するだけで、管理者アカウントは任意のユーザーの appdata フォルダー内のすべてのデータに簡単にアクセスして変更できますが、簡単な方法はないようです。特定のユーザーの appdata フォルダーの場所をプログラムで取得します。

他に選択肢はありますか?現時点では、レジストリへのアクセス (gasp) が最良の選択肢のように思えますが、可能であれば、Microsoft によって推奨されていない公式のものを使用したいと考えています。

任意の提案をいただければ幸いです。

4

1 に答える 1

4

AFAIKトークンなしでこれを行う方法は文書化されていませんが、最善の策は次のとおりです。

  1. プロファイルを見つけます: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList (Win9x では %windir%\Profiles)
  2. のAdjustTokenPrivilegesSE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (9x では USER.DAT)
  4. Query ...\CurrentVersion\Explorer\User Shell Folders

チェックする正しいレジストリ キーは、シェル フォルダーではなくユーザー シェル フォルダーであることに注意してください (パスを展開する必要がある場合もあります)。詳細については、シェル フォルダー キーの長く悲しい物語を参照してください。

また、可能であれば、データを programfiles または common フォルダーに保存し、各ユーザーのプログラムを初めて実行するときにプロファイルにコピーする必要があることも指摘したいと思います。

于 2009-07-03T18:13:08.380 に答える