【问题标题】:How to create always on process?如何创建始终在线?
【发布时间】:2020-01-07 05:54:36
【问题描述】:

情况:我们有一个备份服务器,硬盘空间可能会在 5 分钟内填满。

我想做什么?我正在尝试创建一个监控系统,该系统将每 2 到 3 分钟监控一次空间,如果可用空间小于 X GB,则会发送邮件。

问题:开发这样一个系统的最佳方法是什么?我的 EXE 将如何连续运行?它还应该在服务器启动时自动启动。

我将使用 C++

注意:请不要建议任何现有的监控服务/流程。我们需要为我们的框架开发这个。

** 更新: 这是我的代码:**


void  ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv)
{
    WinService WinService_o;

    gSvcStatusHandle = RegisterServiceCtrlHandler(
        SVCNAME,
        ServiceControlHandler);

    if (!gSvcStatusHandle)
    {
        WinService_o.SvcReportEvent( (LPTSTR) TEXT("RegisterServiceCtrlHandler"));
        return;
    }

    gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
    gSvcStatus.dwServiceSpecificExitCode = 0;

    WinService_o.ReportServiceStatus(SERVICE_START_PENDING, NO_ERROR, 3000);

    WinService_o.PerformService(dwArgc, lpszArgv);

}



int main(int argc, char* argv[])
{
    std::cout << "Hello!\n";

     WinService WinService_o;

     if (argc > 1)
     {
         if (strcmp(argv[1], "-install") == 0)
         {
             printf("Starting the installation process\n");

             WinService_o.DeleteSvc();
             WinService_o.SvcInstall();
             return 1; 

         }
     }


    SERVICE_TABLE_ENTRY DispatchTable[] = 
    {
        { (LPWSTR)SVCNAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
        { NULL, NULL }
    };


    if (!StartServiceCtrlDispatcherW(DispatchTable))
    {
        cout << "test";

        WinService_o.SvcReportEvent( (LPTSTR) TEXT("StartServiceCtrlDispatcher"));

    }

但是,它无法启动服务并出现以下错误。我可以看到事件的错误

StartServiceCtrlDispatcher 失败,出现 1063

有人可以帮忙吗?

【问题讨论】:

  • 嗨,很抱歉告诉你,堆栈溢出不是这样工作的。我们将帮助您解决明确的编码问题。但是我们不能告诉你在这个过于宽泛的问题上该怎么做。你不能指望我们做你的工作。
  • 我可以给出的一个答案是在连续运行部分...使用while(true) 循环。也许你也应该看看sleep

标签: c++ service windows-services


【解决方案1】:

当您将其标记为 时,您回答了自己的问题:

Windows 服务是后台服务进程,由服务控制管理器在基于 Windows NT 的操作系统上运行,类似于守护程序或 UNIX 服务。

将您的应用编写为服务。服务在后台运行,即使没有用户登录,也可以设置为随操作系统自动启动。您所要求的正是服务非常适合的那种情况。

有关更多详细信息和完整的 C/C++ 示例,请参阅 MSDN 上的 ServicesService Programs

【讨论】:

  • @John 这不是建议。这是您正在寻找的正确解决方案
猜你喜欢
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多