2

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

4

3 回答 3

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;

然后将 and 附加{Your Company Name}{Your Application Name}返回的值。您需要包含 ShlObj 单元。

于 2011-03-21T22:31:18.907 回答
4

我记得的一件事是配置会话以将此类文件放在普通用户具有写入权限的文件夹中。

据我记得,属性

Session.PrivateDir
Session.NetFileDir

是相关的。

正确的位置将取决于并发访问、您要连接的数据库、数据位置(在悖论或 dbf 的情况下)以及您是否使用缓存更新。

我维护了一个最初用 D4 编写的应用程序,现在在很少需要时使用 D2007 编译,它在 vista+ 上运行良好,使用它的特定配置和需求(没有悖论/dbf)。

于 2011-03-21T21:47:18.440 回答
0

如果您不想解决 BDE 默认安装中的安全漏洞(正如其他答案所提到的 - 授予 BDE 安装程序忘记的权限),您可以以管理员身份运行您的应用程序。

你有几个选择:

  1. Run As Administrator告诉用户每次右键单击并选择。
  2. 转到程序的兼容性选项卡,并检查Run this program as an administrator(与1相同的效果)
  3. 转到程序的兼容性选项卡,然后Run this program in compatibility modefor Windows XP(与 2 的效果相同)
  4. 创建一个清单MyApp.exe.manifest并包含requestedExecutionLevelof requireAdministrator(与 3 的效果相同)

换句话说:您的应用程序,就目前而言,需要管理权限才能运行 - 所以只需以管理员身份运行它。

另一方面,您可以进行一些简单的更改,您的应用程序将不再需要以管理员身份运行;你让世界变得更适合全人类!

于 2011-07-12T18:23:41.257 回答