【发布时间】: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