C++ 在后台运行程序 Windows 10

Posted

技术标签:

【中文标题】C++ 在后台运行程序 Windows 10【英文标题】:C++ run program in background Windows 10 【发布时间】:2019-09-23 13:05:48 【问题描述】:

我正在尝试在 Windows 10 中以 C++ 编写的后台运行可执行文件。该程序没有任何 GUI。我试过这个

window = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(window,0);

但是,尽管它在 Windows 7 上确实可以工作并打开并立即关闭控制台,并且可执行文件在后台运行,但在 Windows 10 上它会打开一个控制台并且控制台保持打开状态。如果我使用 run /B main.exe 运行 .exe,我必须保持控制台打开以使程序继续运行,如果我关闭 cmd 控制台执行将停止。

有没有办法以编程方式在后台运行文件?我知道我可以使用 vbscript 在后台运行它,但我想避免这种情况。

【问题讨论】:

您可以为应用程序明确地create a process。除非它包含显式显示控制台窗口的代码,否则不应显示 IIRC。 但这意味着必须编写 2 个程序,对吗?据我在文档中阅读,createprocessa 的输入参数要求我提供可执行文件的路径。我希望将所有这些都放在一个程序中,包括在后台运行的选项以及主程序的其余部分。 所以你有一个程序,它自己执行?没关系,您仍然可以使用CreateProcess 来执行您有路径的任何 程序,包括它自己。或者(并不真正知道您要解决的问题)也许您真正想要的是使用 threads 在“后台”运行程序的某些部分? CreateProcess() 具有隐藏它产生的进程的标志。如果您生成一个控制台应用程序,您可以告诉它隐藏创建的控制台窗口。您无需事后寻找窗口并手动隐藏它 @Hamperfait 你试过 FreeConsole() 吗?如果我在没有调试器的情况下启动它,控制台就会消失——从 Visual Studio 启动时仍然可见。所以它应该完成这项工作。我只有一个win10——所以我不知道别人的行为.. 【参考方案1】:

使用 FreeConsole(),您可以从控制台窗口中分离一个进程——这对我有用:

int main() 

   FreeConsole();
   while (1) ::Sleep(1000);
   return 0;

详细说明另见related Microsoft documentation

【讨论】:

能否把答案和源代码解释的更好,谢谢 我添加了一个指向 microsoft 文档的链接 -- 检查函数的文档以进一步阅读。 @LXG:文档引用了AttachConsole 的链接,其中解释了“...当附加到控制台的最后一个进程终止或调用 FreeConsole 时,控制台关闭”

以上是关于C++ 在后台运行程序 Windows 10的主要内容,如果未能解决你的问题,请参考以下文章

我启动windows任务管理器,发现有的程序明明没有运行,但是在进程里还是会有不少的程序?是后台吗?

C++:一直在机器上运行后台任务

在后台运行一个 gui 程序

在 Windows 10 移动版上运行的 Windows Phone 8.1 应用程序的后台计时器任务中没有网络

怎么关闭WPS2019后台的自动运行,是关了后台又自动运行

如何每小时在后台运行约 30 秒的进程(iphone 应用程序)