Tengo una aplicación Delphi 6 que, como la mayoría de las aplicaciones de Windows, lee/escribe datos en la carpeta de "datos de la aplicación local" del usuario. Uso el código a continuación para determinar esa carpeta. Hasta ahora, ese código funcionaba para la mayoría de mis usuarios. He encontrado un usuario cuyo local de aplicación de datos no está en la carpeta esperada:Encontrar la carpeta de datos de la aplicación "verdadera" de un usuario de Windows?
C:\Users\Bob\AppData\Roaming\
Por lo general, la carpeta de datos de aplicación local declara que:
C:\Documents and Settings\Bob\Application Data\
Lo que es raro en la situación particular de este usuario es que varios las claves de registro que normalmente se encuentran en HKEY_LOCAL_MACHINE en realidad se encuentran en HKEY_CURRENT_USER. Se están ejecutando en Windows 7.
Por falta de una palabra mejor, ¿hay alguna forma de obtener los datos de aplicación "verdaderos" para un usuario para poder navegar mejor en esta situación? Si se trata de elegir inteligentemente entre las carpetas especiales CSIDL_APPDATA, CSIDL_COMMON_APPDATA y CSIDL_LOCAL_APPDATA, ¿cuál es la lógica para hacerlo? Como puede ver, estoy buscando una función multiuso que pueda eliminar la carpeta de datos de la aplicación correcta independientemente de la versión de Windows que esté ejecutando el usuario o la configuración específica de su PC.
Encontré esta publicación de Stack Overflow que parece tener la respuesta pero está usando la función de la biblioteca .NET y estoy usando Delphi 6. Si esta solución responde mi pregunta, ¿alguien me puede decir una forma rápida de replicarlo? en Delphi:
How can i get the path of the current user's "Application Data" folder?
// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;
@SertacAkyuz - Resultó que la verdadera causa del problema era que el usuario necesitaba instalar mi programa con derechos de administrador, algo que no ocurre en la mayoría de los sistemas del usuario. Para ser justos con aquellos que ya habían respondido la publicación original, revertí la publicación al formulario original y creé una nueva publicación para la nueva pregunta: http://stackoverflow.com/questions/12772615/why-is-my-delphi -6-program-triggering-a-request-for-admin-rights-upon-install-on –
¿Dónde está GetSpecialFolderLocation? (¿Qué unidad debo agregar a mi cláusula uses?) – cja