C#安装卸载服务

                                

 

这是一个安装和卸载服务的类,有兴趣可以看一下.

using System;
using System.Runtime.InteropServices;
namespace EAE.MyServiceInstaller
{

 class ServiceInstaller
 {
  #region Private Variables
  private string _servicePath;
  private string _serviceName;
  private string _serviceDisplayName;
  #endregion Private Variables
  #region DLLImport
  [DllImport("advapi32.dll")]
  public static extern IntPtr OpenSCManager(string lpMachineName,string lpSCDB, int scParameter);
  [DllImport("Advapi32.dll")]
  public static extern IntPtr CreateService(IntPtr SC_HANDLE,string lpSvcName,string lpDisplayName,
   int dwDesiredAccess,int dwServiceType,int dwStartType,int dwErrorControl,string lpPathName,
   string lpLoadOrderGroup,int lpdwTagId,string lpDependencies,string lpServiceStartName,string lpPassword);
  [DllImport("advapi32.dll")]
  public static extern void CloseServiceHandle(IntPtr SCHANDLE);
  [DllImport("advapi32.dll")]
  public static extern int StartService(IntPtr SVHANDLE,int dwNumServiceArgs,string lpServiceArgVectors);
  [DllImport("advapi32.dll",SetLastError=true)]
  public static extern IntPtr OpenService(IntPtr SCHANDLE,string lpSvcName,int dwNumServiceArgs);
  [DllImport("advapi32.dll")]
  public static extern int DeleteService(IntPtr SVHANDLE);
  [DllImport("kernel32.dll")]
  public static extern int GetLastError();
  #endregion DLLImport
//  ///
//  /// 应用程序入口.
//  ///
//
//  [STAThread]
//  static void Main(string[] args)
//  {
//
//   string svcPath;
//   string svcName;
//   string svcDispName;
//   //服务程序的路径
//   svcPath = @"d:/service/EAEWS.exe";
//   svcDispName="myEAEWS";
//   svcName= "myEAEWS";
//   ServiceInstaller c = new ServiceInstaller();
//   c.InstallService(svcPath, svcName, svcDispName);
//   Console.Read();
//
//  }

  ///
  /// 安装和运行
  ///
  /// 程序路径.
  /// 服务名
  /// 服务显示名称.
  /// 服务安装是否成功.
  public bool InstallService(string svcPath, string svcName, string svcDispName)
  {
   #region Constants declaration.
   int SC_MANAGER_CREATE_SERVICE = 0x0002;
   int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
   //int SERVICE_DEMAND_START = 0x00000003;
   int SERVICE_ERROR_NORMAL = 0x00000001;
   int STANDARD_RIGHTS_REQUIRED = 0xF0000;
   int SERVICE_QUERY_CONFIG = 0x0001;
   int SERVICE_CHANGE_CONFIG = 0x0002;
   int SERVICE_QUERY_STATUS = 0x0004;
   int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
   int SERVICE_START =0x0010;
   int SERVICE_STOP =0x0020;
   int SERVICE_PAUSE_CONTINUE =0x0040;
   int SERVICE_INTERROGATE =0x0080;
   int SERVICE_USER_DEFINED_CONTROL =0x0100;
   int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
    SERVICE_QUERY_CONFIG |
    SERVICE_CHANGE_CONFIG |
    SERVICE_QUERY_STATUS |
    SERVICE_ENUMERATE_DEPENDENTS |
    SERVICE_START |
    SERVICE_STOP |
    SERVICE_PAUSE_CONTINUE |
    SERVICE_INTERROGATE |
    SERVICE_USER_DEFINED_CONTROL);
   int SERVICE_AUTO_START = 0x00000002;
   #endregion Constants declaration.
   try
   {
    IntPtr sc_handle = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);
    if (sc_handle.ToInt32() != 0)
    {
     IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);
     if(sv_handle.ToInt32() ==0)
     {
      CloseServiceHandle(sc_handle);
      return false;
     }
     else
     {
      //试尝启动服务
      int i = StartService(sv_handle,0,null);
      if(i==0)
      {

       return false;
      }

      CloseServiceHandle(sc_handle);
      return true;
     }
    }
    else

     return false;
   }
   catch(Exception e)
   {
    throw e;
   }
  }
  ///
  /// 反安装服务.
  ///
  /// 服务名.
  public bool UnInstallService(string svcName)
  {
   int GENERIC_WRITE = 0x40000000;
   IntPtr sc_hndl = OpenSCManager(null,null,GENERIC_WRITE);
   if(sc_hndl.ToInt32() !=0)
   {
    int DELETE = 0x10000;
    IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
    if(svc_hndl.ToInt32() !=0)
    {
     int i = DeleteService(svc_hndl);
     if (i != 0)
     {
      CloseServiceHandle(sc_hndl);
      return true;
     }
     else
     {
      CloseServiceHandle(sc_hndl);
      return false;
     }
    }
    else
     return false;
   }
   else
    return false;
  }
 
 
 
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值