天天看點

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

  public static extern void CloseServiceHandle(IntPtr SCHANDLE);

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

  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;

      }

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

   else

    return false;

繼續閱讀