るなおーびっと!

LocalLowのパスを取得する方法

2019/08/12 10:20 投稿

  • タグ:
  • 雑記
  • プログラミング

Vista以降のWindowsの%UserProfile%\AppData下にある。

  • Local
  • LocalLow
  • Roaming

それぞれの役割は以下サイトの通り。
http://var.blog.jp/archives/78945670.html

Localは%LocalAppData%、Roamingは%AppData%と環境変数が用意されているのに対して、LocalLowはありません。

以下の方法は、AppDataやLocalやLocalLowやRoamingの場所を変えようとしたら変えられるため、必ずしもそこにあるとは限らないので非推奨な方法である。
%UserProfile%\AppData\LocalLow
%AppLocalData%\..\LocalLow
etc...

コマンドプロンプトで適切なLocalLowの場所を取得するのは一手間かかるが、レジストリの値を参照すれば良い。
キー: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
名前: {A520A1A4-1780-4FF6-BD18-167343C5AF16}

FOR /F "TOKENS=1,2,*" %%I IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "{A520A1A4-1780-4FF6-BD18-167343C5AF16}"') DO IF "%%I"=="{A520A1A4-1780-4FF6-BD18-167343C5AF16}" SET LOCALAPPDATALOW=%%K
echo %LOCALAPPDATALOW%

なお、HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Foldersには
名前: !Do not use this registry key
データ: Use the SHGetFolderPath or SHGetKnownFolderPath function instead
という値が存在しており、つまりどういうことかというと、「このレジストリキーの値を使用しないで下さい。SHGetFolderPathまたはSHGetKnownFolderPath関数を使用してください。」と言うこと。
プログラムで取得する場合は、Windows APIのSHGetFolderPath(XP以前にもある関数)またはSHGetKnownFolderPath(Vista以降に追加された新しい関数)関数を使って取得するのが、最も正しい手段である。
ただし、LocalLowを取得する場合は、Vista以降に追加されたSHGetKnownFolderPathを使用する必要があり、第1引数(REFKNOWNFOLDERID rfid)に FOLDERID_LocalAppDataLow を渡せば取得できる。
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath
https://docs.microsoft.com/ja-jp/windows/win32/shell/knownfolderid

.NET Frameworkの場合、特殊フォルダを取得するメソッドは存在するものの、LocalLowは取得できないので、Windows APIを呼ぶ必要がある。
以下のサイトはC#で取得する例。
https://stackoverflow.com/questions/4494290/detect-the-location-of-appdata-locallow


コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事