C#安装卸载服务

摘要:
使用系统;使用System.Runtime.InteropServices;namespaceEAE.MyServiceInstaller{classServiceInstaller{#regionPrivateVariableprivatestring_servicePath;privatestriang_serviceName;privatestrang_serviceDi

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;
  }
 
 
 
 }
}

免责声明:文章转载自《C#安装卸载服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zabbix添加邮件方式报警并实现分组报警的功能C#操作Redis List 列表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

OpenFaceswap 入门教程(1):软件安装篇

---内容恢复的开始-在许多改变面貌的软件中,DeepFaceLab实际上是安装和使用最方便、更新最快的。然而,由于缺乏可扩展的界面,初学者可能很难入门。因此,今天我们将介绍OpenFaceSwap,一个非常直观和简单的换脸软件。该软件的安装和使用体验与Fakeap类似,但软件内核是“高级”的,因为Fakeap已经停止了很长时间,而OpenFaceSwap内...

故障排查:vsftpd无法用浏览器访问

CentOS6上设置的ftp服务器突然无法使用浏览器访问,但可以使用xftp等工具正常访问。据推测,阿里云的安全组设置之前已经过修改,这可能与1)修改vsftpd的配置,在被动模式下手动指定一个随机连接端口,并添加以下内容:passv_min_port=50000pasv_max_port=60000 02)如果只打开端口20和21,设置阿里云安全组控制端口...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...

利用油猴插件实现全网VIP视频免费看

利用油猴插件实现全网VIP视频免费看第一步:首先打开谷歌应用商店搜索tampermonkey安装这个插件第二步:在百度搜索框搜索油猴可以看到以下页面,点击进入。下载谷歌上网助手解压后,将后缀为crx的文件拖入即可。之后注册一个谷歌上网助手账后登录即可进入谷歌应用商店油猴插件...

nginx做本地目录映射

nginx做本地目录映射有时候需要访问服务器上的一些静态资源,比如挂载其他设备上的图片到本地的目录,而本地的目录不在nginx根目录下,这个时候就需要简单的做一下目录映射来解决,比如想通过浏览器http://ip/image/2016/04/29/10/abc.jpg访问到系统目录/image_data/2016/04/29/10/abc.jpg需要在ngi...

应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITYSYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520

此安全权限可以使用组件服务管理工具进行修改。根据APPID为{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}在注册表中找到HKEY_CLASSES_ROOTAppID{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}右键选择权限:加入SYSTEM用户并赋予完全控制权限:如果在注册表中没有权限添加用户,则需...