启动隐藏的 C++ 程序

Posted

技术标签:

【中文标题】启动隐藏的 C++ 程序【英文标题】:Starting a hidden C++ program 【发布时间】:2011-11-30 19:42:24 【问题描述】:

我正在使用 Visual Studio 2010 创建一个 C++ 程序,该程序应该在我的机器后台运行。

因此,当我启动它时,我不应该在它运行时看到 CMD 屏幕。我怎样才能做到这一点?我必须使用 Win32 API 还是普通的 C++ 程序就足够了?

请注意,我的程序根本没有 GUI。

【问题讨论】:

我之前问过***.com/questions/3875995/… 它可能需要一些特定于 Windows 的 API - 我不知道哪个(仅使用 Linux 并了解 Posix,但不了解 Win32)。 【参考方案1】:

使用 WinMain() :

#include <windows.h>

int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev,LPSTR cmd,int show)

  // program starts here
  return 0;


// int main()  <-- remove main() 

然后确保您的项目设置已设置为构建“Win32”程序而不是“控制台”程序。

编辑:正如@Sehe 指出的那样,winMain 可能不是必需的,尽管我不太确定这个选项在哪里。

【讨论】:

使用 WinMain 与此无关。只需将子系统选项更改为 Win32 即可。 @sehe:如果在 Visual Studio 中这样做,默认入口点将更改为 WinMain。 @sehe 你的建议是错误的。这将解决:error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup 哦,我是老派 :) 我使用 EDITBIN /SUBSYSTEM:WINDOWS test.exe(或者,实际上,通常将该选项直接传递给链接器 (CL) @FailedDev:两种方式存在。什么是正确的取决于上下文。我将减少索赔:WinMain 没有必然与此有任何关系:)【参考方案2】:

作为服务运行See here.

【讨论】:

【参考方案3】:

在 Windows 下运行的没有“面孔”(例如,根本没有用户界面)的程序通常被实现为 Service。

【讨论】:

【参考方案4】:

在 windows 中,Daemon 程序被实现为Services。

【讨论】:

【参考方案5】:

只需使其成为 GUI 应用程序而不是命令行应用程序。右键项目 -> 属性 -> 配置属性 -> 链接器 -> 系统 -> 子系统 -> Windows (/SUBSYSTEM:WINDOWS)。

【讨论】:

【参考方案6】:

您可以作为 Windows 进程(不附加到控制台)运行,但永远不要创建窗口。主要区别在于WinMain 的签名和编译器的标志。

转到文件 -> 新建项目,选择标准的 Windows 应用程序,然后删除除 WinMain 之外的所有内容。

【讨论】:

以上是关于启动隐藏的 C++ 程序的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 C++ 中创建隐藏的 txt 文件?

如何隐藏在 Qt 应用程序中打开的 Windows 终端?

OS X - 如何检测应用程序何时在登录时以隐藏状态启动?

启动画面应用程序并隐藏操作栏

在 C++ 中隐藏敏感字符串的技术

拨打密码时启动隐藏的应用程序