2009-06-29 12 views
3

特定のユーザーのローカルアプリケーションデータフォルダーを取得するには、そのユーザーのログイン詳細を入力する必要はありません。特定のユーザーのSHGetFolderPath()

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

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

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

他にもオプションがありますか?現在、レジストリにアクセスするのが最善の選択肢だと思われますが、私は公式のものを使用したいと思います。

何か提案がありがとうございます。

答えて

4

ありAFAIKトークンなしでこれを行うには、文書化の方法はありませんが、あなたの最善の策は、以下のとおりです。マイクロソフト\ Windows NTの\ CurrentVersionの\ ProfileListの(の%windir%は、\ HKLM \ソフトウェア:

  1. プロファイルを探しますWin9xの上の\プロファイル)SE_RESTORE_NAME
  2. RegLoadKeyにNTUSER.DAT(9xの上USER.DAT)
  3. クエリ... \ CurrentVersionの\ Explorerの\ユーザーシェルフォルダ
ため
  • AdjustTokenPrivileges

    チェックする正しいレジストリキーはユーザーシェルフォルダではなく、シェルフォルダである(そして、あなたがパスを展開する必要がある場合があります)ことに注意してください、私はまた、可能な場合は、あなたがすべきことを指摘したいの詳細

    ためThe long and sad story of the Shell Folders keyを見ますプログラムファイルまたは共通フォルダにデータを格納してから、各ユーザーのプログラムが最初に実行されるときにプロファイルにコピーしてください。

  • +0

    私はRegLoadKey()関数を見て、それを使用すると考えていました...しかし、当時私は馬鹿馬鹿しく遅く信頼できないことなく、私が望んでいたことをすることができるとは確信できませんでした。しかし、あなたの答えは私に実際にそれを試してみるインスピレーションを与えました。それは私がその仕事をすることができるように見えます...それはどちらかと思ったようにそれほど遅くはありません。 この機能が必要なクライアントにはうまくいきません。彼らは、AD /ターミナルサービスを使用する多くのコンピュータと、おそらくローミングするユーザープロファイルも持っています。 RegConnectRegistry()は後で便利になるかもしれません。 – beepboopbopbop

    +0

    RegLoadKeyの速度が問題の場合は、RegLoadKey呼び出しを保存するユーザーのSIDをHKEY_USERSで調べることはできますが、既に読み込まれているプロファイルに対してのみ機能します。 – Anders

    関連する問題