【Windows系统】windows服务

这篇具有很好参考价值的文章主要介绍了【Windows系统】windows服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务安装与卸载

通过代码启动。

第一步、创建服务

BOOL Install()
{
    //打开服务控制管理器
    hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
 
    //创建服务
    SC_HANDLE hService = ::CreateService(hSCM,
                                    szServiceName,
                                    szServiceName,
                                    SERVICE_ALL_ACCESS,
                                    SERVICE_WIN32_OWN_PROCESS,
                                    SERVICE_AUTO_START,
                                    SERVICE_ERROR_NORMAL,
                                    szFilePath,
                                    NULL,
                                    NULL,
                                    _T(""),
                                    NULL,
                                    NULL);
 
    ::CloseServiceHandle(hService);
    ::CloseServiceHandle(hSCM);
}

第二步、主函数ServiceMain()

调用 RegisterServiceCtrlHandler 来注册服务的控制函数, 这里要设置status.dwControlsAccepted 为 SERVICE_ACCEPT_STOP,否则你不能控制服务状态。

void WINAPI ServiceMain()
{
    // Register the control request handler
    status.dwCurrentState = SERVICE_START_PENDING;
    status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制
 
    //注册服务控制
    hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceCtrl);
 
    if (hServiceStatus == NULL)
    {
        LogEvent(_T("Handler not installed"));
        return;
    }
 
    SetServiceStatus(hServiceStatus, &status);
 
    status.dwWin32ExitCode = S_OK;
    status.dwCheckPoint = 0;
    status.dwWaitHint = 0;
    status.dwCurrentState = SERVICE_RUNNING;
 
    SetServiceStatus(hServiceStatus, &status);
 
    //主要业务
    Work();
 
    //
    status.dwCurrentState = SERVICE_STOPPED;
    SetServiceStatus(hServiceStatus, &status);
    LogEvent(_T("Service stopped"));
}

第三步、服务控制函数

服务调用RegisterServiceCtrlHandler或者RegisterServiceCtrlHandlerEx函数来注册它的服务控制函数ServiceCtrl()。

void WINAPI ServiceCtrl(DWORD dwControl)
{
    switch (dwControl)
    {
    case SERVICE_CONTROL_PAUSE:
        ServiceStatus.dwCurrentState = SERVICE_PAUSED;
        break;
 
    case SERVICE_CONTROL_CONTINUE:
        ServiceStatus.dwCurrentState = SERVICE_RUNNING;
        break;
 
    case SERVICE_CONTROL_STOP:
    case SERVICE_CONTROL_SHUTDOWN:
        ServiceStatus.dwCurrentState = SERVICE_STOPPED;
        ServiceStatus.dwCheckPoint = 0;
        ServiceStatus.dwWaitHint = 0;
        SetServiceStatus(hStatus, &ServiceStatus);
        return;
 
     default:
        break;
    }
     
    // 重设服务状态
    SetServiceStatus(hStatus, &ServiceStatus);
    return;
}

第四步、卸载

BOOL Uninstall();
{
    //打开服务控制管理器
    SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
 
    //打开服务
    SC_HANDLE hService = OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);
 
    //停止服务
    ControlService(hService, SERVICE_CONTROL_STOP, &status);
 
    //删除服务
    DeleteService(hService);
 
    …
}

服务安装成功

1、输入services.msc,启动 服务。

【Windows系统】windows服务

2、任务管理器,查看进程信息。服务一般都是以SYSTEM权限运行。

【Windows系统】windows服务

3、服务安装成功后,注册表位置

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XxxService

【Windows系统】windows服务

参考

  通过sc指令创建和删除服务参考:

​​​​​​【Windows脚本】服务的创建和删除_sunriver2000的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-499199.html

到了这里,关于【Windows系统】windows服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包