【问题标题】:BDE, Windows 7 and UACBDE、Windows 7 和 UAC
【发布时间】:2011-07-20 00:47:18
【问题描述】:

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

【问题讨论】:

  • 告诉我们更多关于您遇到的问题。另外,您是否已将您的应用展示为不被虚拟化?
  • 关闭虚拟化后,当您的应用尝试写入它没有写入权限的文件夹时,您将开始收到错误消息。
  • 请您感到鼓舞,我们在美国有数千个工作站运行我们的 D7/BDE 应用程序。我们很大比例的用户已经迁移了 Windows 7,因此不存在以下答案不能解决的内在问题。 (很少,在开发机器上,我收到 BDE 内存共享错误。我记得,文档建议将 BDEAdmin 中的内存页面设置为“0BDE”(我怀疑这有点“尝试不同的东西”内存位置由 Borland 选择,没有实际意义。重新启动可以解决问题。)

标签: delphi uac delphi-5 bde


【解决方案1】:

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

据我所知,属性

Session.PrivateDir
Session.NetFileDir

是相关的吗?

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

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

【讨论】:

    【解决方案2】:

    除了上述答案之外,您还需要确保 .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 单元。

    【讨论】:

      【解决方案3】:

      如果您不想解决 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,并包含requireAdministrator的requestedExecutionLevel(效果与3相同)

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

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

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 2010-12-13
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2011-01-04
        • 2011-11-07
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多