前言:我在 Windows 7 上使用 Lazarus 1.2.6 和 Freepascal 2.6.4,我的解决方案必须基于此 - 而不是 C 或 C++。不过,如果存在类似的东西,我可以使用 Delphi。
问题:我希望创建一个小程序,最好从命令行启动,但随后只需在后台运行,而不需要明显打开控制台应用程序。
我正在努力找出实现这一目标的最佳方法。
我读到this link和 this link和 this C based example和 this 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/