我有一个用Delphi 5编写的非常旧的应用程序在一些使用BDE的客户中运行。现在,一些使用Windows Vista和7的用户已经尝试了多用户访问的一些问题。我认为这些问题与net
。和.lck
文件的位置有关。所以问题是在Windows Vista和7下使BDE
进行配置以避免权限和UAC冲突的正确方法是什么?
答案 0 :(得分:6)
除上述答案外,您还需要确保.net和.lck文件位于Windows 7下的用户特定目录中,具体为:
C:\Users\{User Name}\AppData\Local\{Your Company Name}\{Your Application Name}
这些是当前用户始终完全控制的唯一文件夹。
您可以使用以下代码获取此文件夹:
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;
然后将{Your Company Name}
和{Your Application Name}
附加到返回的值。您需要包含ShlObj单元。
答案 1 :(得分:4)
我记得的一件事就是将Session配置为将这类文件放在普通用户具有写权限的文件夹中。
根据我的记忆,属性
Session.PrivateDir
Session.NetFileDir
是相关的。
正确的位置取决于并发访问,您要连接的数据库,数据位置 - 如果是paradox或dbf-,以及是否使用缓存更新。
我维护一个最初在D4中编写的应用程序,现在很少需要用D2007编译,并且在vista +上使用它的特殊配置和需求(没有paradox / dbf)。
答案 2 :(得分:0)
如果您不想在BDE的默认安装中解决安全漏洞(正如其他答案所述 - 授予BDE安装程序忘记的权限),您只需以管理员身份运行您的应用程序即可。
您有几个选择:
Run As Administrator
。Run this program as an administrator
(效果与1相同)Run this program in compatibility mode
Windows XP
(效果与2相同)MyApp.exe.manifest
并添加requestedExecutionLevel
requireAdministrator
(效果与3相同)换句话说:您的应用程序,就像现在一样,需要管理员才能运行 - 所以只需以管理员身份运行它。
另一方面,您可以进行几个简单的更改,并且您的应用程序不再需要以管理员身份运行;你让这个世界成为全人类更美好的地方!