首页 / WINDOWS / windows服务程序的编写
windows服务程序的编写
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了windows服务程序的编写,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2918字,纯文字阅读大概需要5分钟。
内容图文
![windows服务程序的编写](/upload/InfoBanner/zyjiaocheng/974/735376c91c9c4873b85bddab4ad4a4c4.jpg)
服务编写
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\n", 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\n");
}
// 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
打开服务管理器 services.msc
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
内容总结
以上是互联网集市为您收集整理的windows服务程序的编写全部内容,希望文章能够帮你解决windows服务程序的编写所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。