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

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

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

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

【问题讨论】:

标签: c++ windows visual-studio-2010


【解决方案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 之外的所有内容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-29
            • 1970-01-01
            • 2011-10-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多