📜  c++ cmd 程序在后台运行 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:44.709000             🧑  作者: Mango

C++ CMD程序在后台运行

在编写C++程序时,我们经常需要在后台运行程序,以便程序一直运行而不影响用户界面的使用。本文将介绍如何使用C++在Windows平台下让程序在后台运行。

编码实现

下面的代码片段展示了如何让一个C++程序在Windows平台下在后台运行:

#include <windows.h>

int main()
{
    // 创建一个新的进程
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    ZeroMemory(&pi, sizeof(pi));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    CreateProcess(NULL, "你的程序名称.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

    // 关闭句柄
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}
代码说明

创建一个新的进程

我们使用CreateProcess函数创建了一个新的进程,这个函数有多个参数,具体如下:

  • lpApplicationName:要执行的可执行文件的名称(如果该参数为NULL,则需要在lpCommandLine参数中指定可执行文件名称);
  • lpCommandLine:要执行的命令行字符串;
  • lpProcessAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于设置新进程的安全性;
  • lpThreadAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于设置新进程中主线程的安全性;
  • bInheritHandles:指定是否将调用进程的所有句柄复制到新进程中;
  • dwCreationFlags:指定创建新进程的标志,比如DETACHED_PROCESS会将新进程设置为不需要控制台窗口;
  • lpEnvironment:指定新进程的环境块;
  • lpCurrentDirectory:指定新进程的当前工作目录(如果为NULL则使用调用进程的当前工作目录);
  • lpStartupInfo:指向STARTUPINFO结构的指针,该结构包含有关新进程的主窗口如何显示;
  • lpProcessInformation:指向PROCESS_INFORMATION结构的指针,该结构包含新创建进程的信息,如进程ID和主线程ID。

关闭句柄

在本例中,我们调用CloseHandle函数来关闭句柄。在Windows中,许多对象都是使用句柄来引用的,比如文件句柄、进程句柄、线程句柄等。在使用完这些对象后,我们需要调用CloseHandle函数来释放它们的引用。

结论

通过上述步骤我们就成功地让C++程序在Windows平台下在后台运行了。如果你想了解更多关于C++在Windows平台下的编程知识,建议参考微软官方文档,或者阅读《Windows核心编程》等专业书籍。