-
bzzz © (23.09.09 06:36) [0]Есть задача, программно получить путь до папки Application Data для пользователя LocalService?
Для текущего пользователя это можно сделать вот так:
PItemID : PItemIDList;
ansiSbuf : array[0..MAX_PATH] of char;
AppData : String;
SHGetSpecialFolderLocation( Handle, CSIDL_APPDATA, PItemID );
SHGetPathFromIDList( PItemID, @ansiSbuf[0] );
AppData := ansiSbuf;
А как сделать тоже самое для пользователя LocalService? -
clickmaker © (23.09.09 13:04) [1]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
-
__Алексей__ (23.09.09 17:56) [2]Вот так:function GetSpecialFolderPath(FolderID: Cardinal): string;
(* CSIDL_PERSONAL, { My Documents }
CSIDL_APPDATA, { Application Data, new for NT4 }
CSIDL_LOCAL_APPDATA, { non roaming, user\Local Settings\Application Data }
CSIDL_INTERNET_CACHE,
CSIDL_COOKIES,
CSIDL_HISTORY,
CSIDL_COMMON_APPDATA, { All Users\Application Data }
CSIDL_WINDOWS, { GetWindowsDirectory() }
CSIDL_SYSTEM, { GetSystemDirectory() }
CSIDL_PROGRAM_FILES, { C:\Program Files }
CSIDL_MYPICTURES, { My Pictures, new for Win2K }
CSIDL_PROGRAM_FILES_COMMON, { C:\Program Files\Common }
CSIDL_COMMON_DOCUMENTS, { All Users\Documents }
CSIDL_FLAG_CREATE, { new for Win2K, or this in to force creation of folder }
CSIDL_COMMON_ADMINTOOLS, { All Users\Start Menu\Programs\Administrative Tools }
CSIDL_ADMINTOOLS); { <user name>\Start Menu\Programs\Administrative Tools }
*)
var S: PChar;
T, F: Cardinal;
begin
T := 0; F := 0;
GetMem(S, Max_Path);
try
SHFolder.SHGetFolderPath(0, FolderID, T, F, S);
result := s;
finally
FreeMem(S, Max_Path);
end;
end;
Использую для обмена настройками сервиса и консоли. Общая папка для всех пользователей. Ваш случай с LocalService и есть такой случай.