删除Windows服务程序

//本程序用来删除windows服务

// 删除服务.cpp :

#include "stdafx.h"
#include <windows.h>
#include "winsvc.h"

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

using namespace std;

void InstallService( LPCTSTR lpszName, LPCTSTR lpszDescription, LPCTSTR lpszPath )
{
    SC_HANDLE    scm;
    scm    = OpenSCManager( 0, 0, SC_MANAGER_CREATE_SERVICE );
    if ( !scm )
        cerr << "in OpenSCMager: " << GetLastError() << endl;

    //安装服务
    cout << "开始注册服务..." << endl;

    SC_HANDLE    newService;
    newService    = CreateService( scm, lpszName, lpszDescription,
        SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
        SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
        lpszPath, 0, 0, 0, 0, 0 );

    if ( !newService )
        cerr << "In CreateService: " << GetLastError() << endl;
    else
        cout << "服务已经注册完毕..." << endl;

    CloseServiceHandle( newService );
    CloseServiceHandle( scm );

}


void RemoveService( LPCTSTR lpszName )
{
 SC_HANDLE scm;
 scm = OpenSCManager( 0, 0, SC_MANAGER_CREATE_SERVICE );
 if ( !scm )
        cerr << "in OpenSCMager: " << GetLastError() << endl;
 //安装服务
    cout << "开始删除服务..." << endl;

    SC_HANDLE        service;
    service    = OpenService( scm, lpszName, SERVICE_ALL_ACCESS | DELETE );
    if ( !service )
        cerr << "In OpenService:" << GetLastError() << endl;

    SERVICE_STATUS    status;
    BOOL            isSuccess    = QueryServiceStatus( service, &status );
    if ( !isSuccess )
        cerr << "In QueryServiceStatus: " << GetLastError() << endl;

    if ( status.dwCurrentState!=SERVICE_STOPPED ){

        cout << "停止服务..." << endl;

        isSuccess    = ControlService( service, SERVICE_CONTROL_STOP, &status );
        if ( !isSuccess )
            cerr << "In ControlService: " << GetLastError() << endl;
        Sleep( 500 );

    }

    isSuccess    = DeleteService( service );
    if ( !isSuccess )
        cerr << "In DeleteService: " << GetLastError() << endl;
    else
        cout << "服务已经被删除..." << endl;

    CloseServiceHandle( service );
    CloseServiceHandle( scm );
}

//启动服务
void StartService( LPCTSTR lpszName )
{

    SC_HANDLE    scm = NULL, service = NULL;

    scm    = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if ( !scm ){

        cerr << "Error Openning SCManager" << endl;
        return;

    }


    service    = OpenService( scm, lpszName, SERVICE_ALL_ACCESS );
    if ( !service ){

        cerr << "Error Openning " << lpszName << "Service" << endl;
        return;

    }

    if ( StartService( service, 0, NULL ) ){

        cout << "启动服务成功..." << endl;
       
    }

    CloseServiceHandle( service );
    CloseServiceHandle( scm );

}

//
//停止服务
void StopService( LPCTSTR lpszName )
{
    SC_HANDLE    scm = NULL, service = NULL;

    scm    = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if ( !scm ){

        cerr << "Error Openning SCManager" << endl;
        return;

    }


    service    = OpenService( scm, lpszName, SERVICE_ALL_ACCESS );
    if ( !service ){

        cerr << "Error Openning " << lpszName << "Service" << endl;
        return;

    }

    SERVICE_STATUS    status;
    ControlService( service, SERVICE_CONTROL_STOP, &status);

    CloseServiceHandle( service );
    CloseServiceHandle( scm );

}

 

int main(int argc, char* argv[])
{
 int        nChoice = 0;

    while ( nChoice != 5 ){

        cout << "请选择操作( 1 - 安装服务, 2 - 删除服务, 3 - 启动服务, 4 - 停止服务, 5 - 退出 ):";
        cin >> nChoice;

        switch ( nChoice ) {
        case 1:
            {

                char    szName[512]    = "";
                char    szDes[512]    = "";
                char    szPath[512]    = "";
                cout << endl << "输入服务名称: ";
                cin >> szName;

                cout << endl << "输入服务描述: ";
                cin >> szDes;

                cout << endl << "输入服务文件路径: ";
                cin >> szPath;

                InstallService( szName, szDes, szPath );
                break;

            }
        case 2:
            {

                char    szName[512]    = "";
                cout << endl << "输入服务名称: ";
                cin >> szName;

                RemoveService( szName );
                break;

            }
        case 3:
            {

                char    szName[512]    = "";
                cout << endl << "输入服务名称: ";
                cin >> szName;

                StartService( szName );
                break;

            }
        case 4:
            {

                char    szName[512]    = "";
                cout << endl << "输入服务名称: ";
                cin >> szName;

                StopService( szName );
                break;

            }
        }

    }
    return 0;
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值