• 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:serviceEAEWS.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;
      }
     
     
     
     }
    }

  • 相关阅读:
    InfinityHook原理
    段描述符
    从零到一k8s(十)ipv4,ipv6 双网卡部署k8s
    python自动化测试工具selenium使用指南
    elementui去掉弹框的黑色罩子
    linuxjenkins安装
    pythonlogging模块记录日志
    redisredis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snap
    shell将文件上传至ftp
    git记录文档
  • 原文地址:https://www.cnblogs.com/skyay/p/13282254.html
Copyright © 2020-2023  润新知