1

可能是我很愚蠢,但是我在检测网络驱动器是否启动时遇到了问题,但只有在 IDE 中运行程序时——在 IDE 之外运行程序时,才能正确检测到网络驱动器。IDE 在 Windows 7 上运行良好。

虽然有问题的程序不同,但我可以通过创建一个新项目并将以下内容添加到 FormsOnActivate事件中来重现该问题:

var
  bRet: Boolean;
  LTemp2: string;
  LFreeSpace: Int64;
  LTotalSpace: Int64;
begin
  LTemp2 := 'T:\';
  bRet := GetDiskFreeSpaceEx(PAnsiChar(LTemp2), @LFreeSpace, @LTotalSpace, nil);
  ShowMessage('GetDiskFreeSpaceEx: Drive T: is up? '+BoolToStr(bRet, True));
end;

假设我有一个网络驱动器T:,如果我在 IDE 中运行程序,那么上面的总是返回 False,但是如果我从桌面快捷方式运行构建的程序,那么它返回 True。如果我在程序启动后通过单击按钮运行它,我会得到相同的行为。在根目录上做DiskSize()和给出相同的结果。FindFirst()

这是一个全新的 Windows 10 安装,而不是升级,它是 CodeGear 2007 的全新安装,并应用了所有补丁。我已尝试“以管理员身份运行”并将所有兼容模式恢复到 Windows 7。

我在做傻事吗?

4

1 回答 1

1

在 R. Hoek 的深刻见解之后,虽然它没有完全解决问题,但至少足以解决问题。顺便说一句,至少在我的情况下,我是否使用“以管理员身份运行”启动 Delphi 2007 并不重要。

我添加了一个连接到按钮的 TOpenDialog:一旦我运行它并在 T 上选择一个文件:然后 GetLogicalDrives() 工作正常。

所以我现在怀疑是我以管理员身份安装了 Delphi 2007 - 不知道如何,但我想我会重新安装所有东西。

即使这不能解决它,并且由于它只发生在 IDE 中而不是在生产使用中,我可以添加代码以在 GetLogicalDrives() 返回 4 时弹出 TOpenDialog。

诡异的。非常感谢大家。

顺便说一句,这个讨论的一个方面可能还不清楚:Delphi 2007 在用户帐户下运行(它可以毫无问题地看到网络驱动器) - 只有正在调试的程序看不到网络驱动器. 这就是使用 TOpenDialog 解决问题的原因(直到 Delphi 或计算机重新启动)。

于 2021-03-19T21:09:06.660 回答