BDE, Windows 7 y UAC
Pregunta
Tengo una aplicación muy antigua escrita en Delphi 5 que se ejecuta en algunos clientes que usa el BDE. Ahora algunos usuarios con Windows Vista y 7, habían experimentado algunos problemas con el acceso multiusuario. Creo que estos problemas están relacionados con la ubicación del net
.y .lck
archivos. Entonces, la pregunta es cuál es la forma correcta de confiar el BDE
¿En Windows Vista y 7 para evitar permisos y conflictos de UAC?
Solución
Además de la respuesta anterior, querrá asegurarse de que los archivos .NET y .LCK se encuentren en un directorio específico del usuario en Windows 7, específicamente:
C:\Users\{User Name}\AppData\Local\{Your Company Name}\{Your Application Name}
Esas son las únicas carpetas sobre las que el usuario actual siempre tendrá un control completo.
Puede obtener esta carpeta usando este código:
CSIDL_LOCAL_APPDATA = $001C;
function GetAppDataDirectory: AnsiString;
var
TempBuffer: array[0..MAX_PATH] of AnsiChar;
ResultLength: Integer;
begin
FillChar(TempBuffer,((MAX_PATH+1)*SizeOf(AnsiChar)),0);
ShlObj.SHGetSpecialFolderPathA(0,@TempBuffer,CSIDL_LOCAL_APPDATA,False);
ResultLength:=StrLen(pAnsiChar(@TempBuffer));
SetLength(Result,ResultLength);
Move(TempBuffer[0],pAnsiChar(Result)^,(ResultLength*SizeOf(AnsiChar)));
end;
y luego agregar {Your Company Name}
y {Your Application Name}
al valor devuelto. Deberá incluir la unidad Shlobj.
Otros consejos
Una de esas cosas que recuerdo es configurar la sesión para poner ese tipo de archivos en las carpetas donde un usuario normal tiene privilegios de escritura.
Por lo que recuerdo, las propiedades
Session.PrivateDir
Session.NetFileDir
Son los relevantes.
La ubicación correcta dependerá del acceso concurrente, la base de datos a la que se está conectando, la ubicación de los datos, en caso de paradoja o DBF's, y si usa actualizaciones en caché o no.
Mantengo una aplicación escrita originalmente en D4, ahora compilada con D2007 cuando rara vez se necesita y funciona bien en Vista+ usando esto con su configuración y necesidades particulares (sin paradoja/DBF).
Si no desea trabajar con los errores de seguridad en una instalación predeterminada del BDE (como se mencionan otras respuestas: otorgar permisos que el instalador de BDE olvidó), puede ejecutar su aplicación como un administrador.
Tienes pocas opciones:
- Dígale al usuario que haga clic con el botón derecho y seleccione
Run As Administrator
cada vez. - Vaya a la pestaña de compatibilidad del programa y verifique
Run this program as an administrator
(que tiene el mismo efecto que 1) - Vaya a la pestaña de compatibilidad del programa y
Run this program in compatibility mode
porWindows XP
(que tiene el mismo efecto que 2) - Crear un manifiesto
MyApp.exe.manifest
e incluir elrequestedExecutionLevel
derequireAdministrator
(que tiene el mismo efecto que 3)
En otras palabras: su aplicación, tal como está ahora, requiere acceso administrativo a la ejecución, así que simplemente ejecutarla como administrador.
Por otro lado puedes hacer un Pocos cambios simples y tu aplicación lo hará no más Necesita ejecutar como administrador; ¡Has hecho del mundo un lugar mejor para toda la humanidad!