BDE,Windows 7和UAC

时间:2011-03-21 21:32:50

标签: delphi uac delphi-5 bde

我有一个用Delphi 5编写的非常旧的应用程序在一些使用BDE的客户中运行。现在,一些使用Windows Vista和7的用户已经尝试了多用户访问的一些问题。我认为这些问题与net。和.lck文件的位置有关。所以问题是在Windows Vista和7下使BDE进行配置以避免权限和UAC冲突的正确方法是什么?

3 个答案:

答案 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安装程序忘记的权限),您只需以管理员身份运行您的应用程序即可。

您有几个选择:

  1. 告诉用户右键单击并每次选择Run As Administrator
  2. 转到程序的“兼容性”选项卡,然后选中Run this program as an administrator(效果与1相同)
  3. 转到该计划的兼容性标签,Run this program in compatibility mode Windows XP(效果与2相同)
  4. 创建一个清单MyApp.exe.manifest并添加requestedExecutionLevel requireAdministrator(效果与3相同)
  5. 换句话说:您的应用程序,就像现在一样,需要管理员才能运行 - 所以只需以管理员身份运行它。

    另一方面,您可以进行几个简单的更改,并且您的应用程序不再需要以管理员身份运行;你让这个世界成为全人类更美好的地方!