如何创建始终在线的过程?

How to create always on process?

本文关键字:在线 过程 何创建 创建      更新时间:2023-10-16

情况:我们有一个备份服务器,HDD空间可能会在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 processn");
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

有人可以帮忙吗?

当你把它标记为Windows服务时,你回答了你自己的问题:

Windows 服务

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

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

有关更多详细信息和完整的 C/C++ 示例,请参阅 MSDN 上的服务和服务程序。