У меня есть приложение Delphi 6, которое, как и большинство приложений Windows, считывает/записывает данные в папку "данные локальных приложений" пользователя. Я использую код ниже, чтобы определить эту папку. До сих пор этот код работал для большинства моих пользователей. Я столкнулся с пользователем, чьи локальные данные приложения не находятся в ожидаемой папке:
C:\Users\Bob\AppData\Roaming\
Обычно локальная папка данных приложения разрешает:
C:\Documents and Settings\Bob\Application Data\
Что странно в этой конкретной ситуации, так это то, что несколько ключей реестра, обычно встречающихся в HKEY_LOCAL_MACHINE, фактически находятся в HKEY_CURRENT_USER. Они работают в Windows 7.
Из-за отсутствия лучшего слова, есть ли способ получить "истинные" данные приложения для пользователя, чтобы я мог лучше ориентироваться в этой ситуации? Если разумно выбирать между специальными папками CSIDL_APPDATA, CSIDL_COMMON_APPDATA и CSIDL_LOCAL_APPDATA, какова логика для этого? Как вы можете сказать, я ищу универсальную функцию, которая может искоренить правильную папку данных приложения независимо от версии Windows, на которой выполняется пользователь, или их конкретной конфигурации ПК.
Я нашел этот пост, который, кажется, имеет ответ, но он использует функцию из библиотеки .NET, и я использую Delphi 6. Если это решение отвечает на мой вопрос, может кто-то сказать мне быстрый способ его репликации Delphi:
Как я могу получить путь к "данным приложения" текущего пользователя? папка?
// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;