程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 淺談C#安裝服務和卸載服務

淺談C#安裝服務和卸載服務

編輯:C#入門知識

這是一個C#安裝服務和卸載服務的類,有興趣可以看一下.
[csharp] 
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   
//  ///    
//  /// C#安裝服務應用程序入口.   
//  ///    
//   
//  [STAThread]   
//  static void Main(string[] args)   
//  {   
//   
//   string svcPath;   
//   string svcName;   
//   string svcDispName;   
//   //C#安裝服務程序的路徑   
//   svcPath = @"d:\service\EAEWS.exe";   
//   svcDispName="myEAEWS";   
//   svcName= "myEAEWS";   
//   ServiceInstaller c = new ServiceInstaller();   
//   c.InstallService(svcPath, svcName, svcDispName);   
//   Console.Read();   
//   
//  }   
  
  ///    
  /// 安裝和運行   
  ///    
  /// C#安裝程序路徑.   
  /// 服務名   
  /// 服務顯示名稱.   
  /// 服務安裝是否成功.   
  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;   
  }   
 }   
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved