启动隐藏的 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++ 程序的主要内容,如果未能解决你的问题,请参考以下文章