как найти папку MyMusic у других пользователей? - PullRequest
1 голос
/ 16 августа 2010

как найти папку MyMusic других пользователей?

Ответы [ 3 ]

5 голосов
/ 16 августа 2010

Вы можете использовать перечисление Environment.SpecialFolder вместе с Environment.GetFolderPath, чтобы получить доступ к «специальным» пользовательским папкам, например:

Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
1 голос
/ 16 августа 2010

Документированный способ сделать это - использовать SHGetFolderLocation и параметр hToken, проблема в том, что вам нужно имя пользователя и пароль для вызова LogonUser (вы также можете вызвать WTSQueryUserToken , если вы работаете как сервис, но это ограничивает вас активными в данный момент сессиями)

Теперь у вас есть недокументированные материалы :

  1. Найти профиль: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList (% windir% \ Профили на Win9x)
  2. AdjustTokenPrivileges для SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT на 9x)
  4. Запрос HKEY_USERS\{SIDYOUGOTFROMPROFILELIST}\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

Примечание. Для этого вам необходимо быть администратором, и это работает только для локальных учетных записей.

0 голосов
/ 16 августа 2010

Если учетная запись, под которой вы запускаете программу, имеет права администратора, вы не можете просто перейти к c:\Users\<UserName>\Music (это путь в Windows7).
Если вы ищете папки пользователей на другом компьютере, тогда это сложнее.

EDIT: Похоже, что есть способ сделать это, из MSDN :

HRESULT SHGetKnownFolderPath(
  __in   REFKNOWNFOLDERID rfid,
  __in   DWORD dwFlags,
  __in   HANDLE hToken,
  __out  PWSTR *ppszPath
);

Если rfid является KNOWNFOLDERID папки, которую вы ищете в случае My Music:

GUID{2112AB0A-C86A-4FFE-A368-0DE96E47012E}
Display NameMusicFolder 
Type PERUSER
Default Path: %APPDATA%\Microsoft\Windows\Libraries\Music.library-msCSIDL 
Equivalent None, new in Windows 7
Legacy Display Name Not applicable
Legacy Default Path Not applicable
...