【问题标题】:TOpenDialog hangs the program (but not during debug)TOpenDialog 挂起程序(但不是在调试期间)
【发布时间】:2017-11-24 13:51:17
【问题描述】:
  • 我使用的是 Delphi 7。
  • TOpenDialog.Execute 挂起程序,如果从独立启动 EXE。
  • 从 Delphi 7 执行项目时,它不会挂起。
  • 我添加什么都没关系,即使是一个带有按钮的空白项目 上面有 OpenDialog1.Execute 将导致单击时挂起。
  • 此问题是最近才出现的。 不久前编译的项目没有问题。
  • 我使用了相同的 Windows 安装(Windows 7 Ultimate 64bit)和 多年来一直使用相同的 Delphi 7。
  • 不久前编译的项目没有挂起。
  • 在 Delphi 10 中编译的来自 Delphi 7 的项目也会导致挂起。
  • 在 CLX 应用程序中不会发生这种情况,无论是调试还是独立。


以下是似乎导致挂起的示例:

procedure TForm1.Button1Click(Sender: TObject);
begin
 OpenDialog1.Execute;
end;


更新: 原因可能是“InitialDir”是桌面。例如,如果设置为 c:\,则不会发生。

【问题讨论】:

  • 在这里工作正常。您的设置有何不同。
  • 我认为我的设置不会影响它,因为它在 IDE 中可以正常工作。
  • 这对我来说很好用。我做的和你做的有什么不同?提示:您需要尝试提供minimal reproducible example
  • @Dave 或者只是坚持 madExcept 并使用 madTraceProcess。使用强大的调试工具让生活变得轻松很重要。
  • 所以当你说“最小、完整和可验证的例子是“OpenDialog1.Execute”,仅此而已。甚至不是分号。”

标签: delphi delphi-7


【解决方案1】:

要查看的另一件事是项目 -> 选项 -> 编译器消息(是否有任何未选中的?)如果是这样,则这些异常开始被 IDE 的内置调试器忽略。检查它们并运行,然后您可能会看到导致挂起的原因。

我唯一能够产生这种情况的是当我有一个缓慢或不存在的网络共享时......在 IDE 调试器期间它超时并继续运行,但是,独立它最终会超时,但是,很多更长。

(很可能是在您的项目 -> 选项屏幕中)。因为我做了大多数人从未做过的奇怪事情:-)(例如 sshfs 会导致这种情况)。

【讨论】:

    【解决方案2】:

    如果我想访问网络共享,我曾经在某些应用程序中遇到过这个问题。通过包含编译器开关

    {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
    

    我可以解决这个问题。另见this blogpost。但请注意,此开关有一些 restrictions

    作为Microsoft mentions,“Windows 2000 及更高版本、Windows 和控制台应用程序默认启用 /TSAWARE 选项”,这意味着每个 .NET 应用程序都默认打开此开关。

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多