zoukankan      html  css  js  c++  java
  • windows服务程序的编写

    服务编写
    https://blog.csdn.net/lanuage/article/details/77937407

    #include <windows.h> 
    #include <stdio.h>
    #include <stdlib.h>
    #include <tchar.h>
    #define SERVICE_NAME "SDK_Service"
    
    SERVICE_STATUS ServiceStatus;
    SERVICE_STATUS_HANDLE hServiceStatusHandle;
    void WINAPI service_main(int argc, char** argv);
    void WINAPI ServiceHandler(DWORD fdwControl);
    
    TCHAR szSvcName[80];
    SC_HANDLE schSCManager;
    SC_HANDLE schService;
    int uaquit;
    FILE* log;
    
    DWORD WINAPI srv_core_thread(LPVOID para)
    {
        int i = 0;
        for (;;)
        {
            if (uaquit)
            {
                break;
            }
            fprintf(log, "srv_core_thread run time count:%d
    ", i++);
            Sleep(5000);
        }
        return NULL;
    }
    
    void WINAPI ServiceHandler(DWORD fdwControl)
    {
        switch (fdwControl)
        {
        case SERVICE_CONTROL_STOP:
        case SERVICE_CONTROL_SHUTDOWN:
            ServiceStatus.dwWin32ExitCode = 0;
            ServiceStatus.dwCurrentState = SERVICE_STOPPED;
            ServiceStatus.dwCheckPoint = 0;
            ServiceStatus.dwWaitHint = 0;
            uaquit = 1;
            //add you quit code here
            if (log != NULL)
                fclose(log);
            break;
        default:
            return;
        };
        if (!SetServiceStatus(hServiceStatusHandle, &ServiceStatus))
        {
            DWORD nError = GetLastError();
        }
    }
    
    void WINAPI service_main(int argc, char** argv)
    {
        ServiceStatus.dwServiceType = SERVICE_WIN32;
        ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
        ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;
        ServiceStatus.dwWin32ExitCode = 0;
        ServiceStatus.dwServiceSpecificExitCode = 0;
        ServiceStatus.dwCheckPoint = 0;
        ServiceStatus.dwWaitHint = 0;
        hServiceStatusHandle = RegisterServiceCtrlHandler(_T(SERVICE_NAME), ServiceHandler);
        if (hServiceStatusHandle == 0)
        {
            DWORD nError = GetLastError();
        }
        //add your init code here
        log = fopen("c:\test.txt", "w");
        //add your service thread here
        HANDLE task_handle = CreateThread(NULL, NULL, srv_core_thread, NULL, NULL, NULL);
        if (task_handle == NULL)
        {
            fprintf(log, "create srv_core_thread failed
    ");
        }
    
        // Initialization complete - report running status 
        ServiceStatus.dwCurrentState = SERVICE_RUNNING;
        ServiceStatus.dwCheckPoint = 0;
        ServiceStatus.dwWaitHint = 9000;
        if (!SetServiceStatus(hServiceStatusHandle, &ServiceStatus))
        {
            DWORD nError = GetLastError();
        }
    
    }
    //do not change main function
    int main(int argc, const char *argv[])
    {
        SERVICE_TABLE_ENTRY ServiceTable[2];
    
        ServiceTable[0].lpServiceName = _T(SERVICE_NAME);
        ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)service_main;
    
        ServiceTable[1].lpServiceName = NULL;
        ServiceTable[1].lpServiceProc = NULL;
        // 启动服务的控制分派机线程
        StartServiceCtrlDispatcher(ServiceTable);
        return 0;
    }

    编译生成exe
    用命令启动 (其实是可以双击运行的)
    这么要注意是目录路径这个问题windows目录向来就是恶心的我换了路径就行了。
    我放在F:下
    管理员运行cmd
    windows服务程序的编写
    打开服务管理器 services.msc
    windows服务程序的编写
    windows服务程序的编写
    windows服务程序的编写

    https://blog.csdn.net/Fei_Liu/article/details/73395233
    https://blog.csdn.net/qq_32688731/article/details/78323565
    https://blog.csdn.net/u010499449/article/details/56671118
    https://blog.csdn.net/fin86889003/article/details/26255387#
    https://blog.csdn.net/flyingleo1981/article/details/53525194

    转载于:https://blog.51cto.com/haidragon/2372225

  • 相关阅读:
    redis分布式锁练习【我】
    自己写了个简单的redis分布式锁【我】
    高并发下的幂等策略分析
    Unity原厂讲师大解密
    Unity3D 多人协作开发 环境搭建 笔记(场景合并)
    Uni2D Unity4.3 2D Skeletal Animation
    2D Skeletal Animation Ready
    Unity Editor类常用方法
    右键菜单 GenericMenu
    Unity Editor Toolbar 编辑器扩展
  • 原文地址:https://www.cnblogs.com/twodog/p/12134989.html
Copyright © 2011-2022 走看看