delphi - 启动终端程序,但在终端关闭后让它继续运行 - Lazarus 或 Delphi

标签 delphi background terminal lazarus freepascal

前言:我在 Windows 7 上使用 Lazarus 1.2.6 和 Freepascal 2.6.4,我的解决方案必须基于此 - 而不是 C 或 C++。不过,如果存在类似的东西,我可以使用 Delphi。

问题:我希望创建一个小程序,最好从命令行启动,但随后只需在后台运行,而不需要明显打开控制台应用程序。

我正在努力找出实现这一目标的最佳方法。

我读到this linkthis linkthis C based examplethis Linux example但正如一位用户指出的那样“如果您不需要控制台应用程序,就不要制作一个”,这就引出了一个问题:还有其他方法吗?如果您不需要 GUI,并且不需要控制台,我认为还有另一种方法可以创建静默程序,然后启动它,然后让它在后台运行?大概是作为一项服务或类似的服务?

或者,我想到的另一种方法是创建一个包含我的程序函数的库(当然,它在编译时生成 DLL),在 DLL 末尾导出这些函数,然后从单独的终端调用它们我假设我可以关闭该应用程序,但从 DLL 调用的函数可能会继续运行?换句话说 - 两个程序 - 一个终端程序启动另一个不可见程序,然后关闭启动程序?这可能或推荐吗?

最佳答案

I've written about this topic before ,但不是专门针对 Delphi 或 Free Pascal。

使用{$APPTYPE GUI}指令告诉编译器生成GUI应用程序而不是控制台应用程序。您通常会将其放在主项目文件顶部附近,即 program 语句所在的位置。当您使用该指令时,程序既不会继承其父级的控制台,也不会创建新的控制台。如果您实际上并不需要 GUI,则不要显示任何窗口;如果您有控制台应用程序,操作系统会自动为您创建控制台,因为 "consoleness" is a property of the EXE file .

使用单独的程序和 DLL 不会达到您想要的效果。正如您已经知道的,函数会阻塞调用者,直到它们返回。因此,当宿主程序调用你的DLL函数时,它会等到它返回才退出。 DLL 不是一个单独的程序;而是一个独立的程序。如果没有主机,它就无法运行。 (使用单独的线程也不起作用,因为当主线程终止程序时,它会销毁所有其他线程,无论它们是否已完成。)

关于delphi - 启动终端程序,但在终端关闭后让它继续运行 - Lazarus 或 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282665/

相关文章:

delphi - 有限元Delphi库

R语言——定时器

java - 如何在不影响原始 JPanel 的情况下更改 JPanel 属性?

php - 提供代码接收和别名

bash - Hyperledger Fabric 设置下载特定平台二进制文件权限错误 OSX

python - 在尝试无效命令时,终端中的 Ctrl+C 生成 python 回溯

delphi - 文件的十六进制 View

delphi - 如何在 Vista Aero 下以编程方式禁用窗口动画?

delphi - 已排序的TStringList,排序是如何工作的?

html - 如何在图像上方的 HTML/CSS 中创建水平导航?