C#启用服务 关闭服务 安装服务 卸载服务 .

一.C#运用ProcessStartInfo安装服务,卸载服务,启用服务,关闭服务的操作!

.C#运用ProcessStartInfo安装服务,卸载服务,启用服务,关闭服务的操作!    
. /// <summary>
. /// 从CMD运行里面启用服务
. /// </summary>
. /// <param name="sender"></param>
. /// <param name="e"></param>
. protected void Button4_Click1(object sender, EventArgs e)
. {
. //开启服务
. ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe","/c net start 服务名");
. a.WindowStyle = ProcessWindowStyle.Hidden;
. Process process = Process.Start(a);
.
.
. }
. protected void Button5_Click1(object sender, EventArgs e)
. {
. //关闭服务
. ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe","/c net stop 服务名");
. a.WindowStyle = ProcessWindowStyle.Hidden;
. Process process = Process.Start(a);
.
.
. }
. protected void Button6_Click1(object sender, EventArgs e)
. {
. ProcessStartInfo a = new ProcessStartInfo(@"D://zhengxinle//xiangmu//NetView//NetView//Transmit.exe" ,"-install");
. Console.Write("安装服务成功");
. a.WindowStyle = ProcessWindowStyle.Hidden;
. Process process = Process.Start(a);
.}
.
. protected void Button7_Click1(object sender, EventArgs e)
. {
. ProcessStartInfo a = new ProcessStartInfo(@"D://zhengxinle//xiangmu//NetView//NetView//Transmit.exe" ,"-remove");
. Console.Write("卸载服务成功");
. a.WindowStyle = ProcessWindowStyle.Hidden;
. Process process = Process.Start(a);
.}

二.通过API函数加载

 

.using System.Configuration.Install;  
.using System.ServiceProcess;
.using System.Runtime.InteropServices;
.
.#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#安装程序路径.
. /// /// 服务名
. /// /// 服务显示名称.
. /// /// 服务安装是否成功.
. 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;
. }
. }
. ///
. /// 反安装服务.
. /// ///
. /// 服务名.

 三.加载一个程序集,并运行其中的所有安装程序。

.////////@@@是服务的名字   
. /// <summary>
. /// 用ServiceController启用服务
. /// </summary>
. /// <param name="sender"></param>
. /// <param name="e"></param>
. protected void Button5_Click(object sender, EventArgs e)
. {
. System.ServiceProcess.ServiceController myController =
. new System.ServiceProcess.ServiceController("@@@");
.
. ///ContinuePending 服务即将继续。这对应于 Win32 SERVICE_CONTINUE_PENDING 常数,该常数定义为 0x00000005。
. //Paused 服务已暂停。这对应于 Win32 SERVICE_PAUSED 常数,该常数定义为 0x00000007。
. //PausePending 服务即将暂停。这对应于 Win32 SERVICE_PAUSE_PENDING 常数,该常数定义为 0x00000006。
. //Running 服务正在运行。这对应于 Win32 SERVICE_RUNNING 常数,该常数定义为 0x00000004。
. //StartPending 服务正在启动。这对应于 Win32 SERVICE_START_PENDING 常数,该常数定义为 0x00000002。
. //Stopped 服务未运行。这对应于 Win32 SERVICE_STOPPED 常数,该常数定义为 0x00000001。
. //StopPending 服务正在停止。这对应于 Win32 SERVICE_STOP_PENDING 常数,该常数定义为 0x00000003。
.
. if (myController.Status.Equals(ServiceControllerStatus.Stopped)||myController.Status.Equals(ServiceControllerStatus.StopPending))
. {
. myController.Start();
. this.Button5.Text="关闭服务";
. Response.Write("<mce:script language=javascript><!--
.alert('开启');
.// --></mce:script>");
. }
. else
. {
. myController.Stop();
. this.Button5.Text="开启服务";
. Response.Write("<mce:script language=javascript><!--
.alert('关闭服务');
.// --></mce:script>");
. }
.
. }
.
.
.一、安装服务:
.
.private void InstallService(IDictionary stateSaver, string filepath)
.
. {
.
. try
.
. {
.
. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName");
.
. if(!ServiceIsExisted("ServiceName"))
.
. {
.
. //Install Service
.
. AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
.
. myAssemblyInstaller.UseNewContext = true;
.
. myAssemblyInstaller.Path =filepath;
.
. myAssemblyInstaller.Install(stateSaver);
.
. myAssemblyInstaller.Commit(stateSaver);
.
. myAssemblyInstaller.Dispose();
.
. //--Start Service
.
. service.Start();
.
. }
.
. else
.
. {
.
. if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
.
. {
.
. service.Start();
.
. }
.
. }
.
. }
.
. catch (Exception ex)
.
. {
.
. throw new Exception("installServiceError/n" + ex.Message);
.
. }
.
. }
.
.二、卸载windows服务:
.
. private void UnInstallService(string filepath)
.
. {
.
. try
.
. {
.
. if (ServiceIsExisted("ServiceName"))
.
. {
.
. //UnInstall Service
.
. AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
.
. myAssemblyInstaller.UseNewContext = true;
.
. myAssemblyInstaller.Path = filepath;
.
. myAssemblyInstaller.Uninstall(null);
.
. myAssemblyInstaller.Dispose();
.
. }
.
. }
.
. catch (Exception ex)
.
. {
.
. throw new Exception("unInstallServiceError/n" + ex.Message);
.
. }
.
. }
.
.三、判断window服务是否存在:
.
. private bool ServiceIsExisted(string serviceName)
.
. {
.
. ServiceController[] services = ServiceController.GetServices();
.
. foreach (ServiceController s in services)
.
. {
.
. if (s.ServiceName == serviceName)
.
. {
.
. return true;
.
. }
.
. }
.
. return false;
.
. }
.
.四、启动服务:
.
.private void StartService(string serviceName)
.
. {
.
. if (ServiceIsExisted(serviceName))
.
. {
.
. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
.
. if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
.
. {
.
. service.Start();
.
. for (int i = 0; i < 60; i++)
.
. {
.
. service.Refresh();
.
. System.Threading.Thread.Sleep(1000);
.
. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
.
. {
.
. break;
.
. }
.
. if (i == 59)
.
. {
.
. throw new Exception(startServiceError.Replace("$s$", serviceName));
.
. }
.
. }
.
. }
.
. }
.
. }
.
.五、停止服务:
.
. private void StopService(string serviceName)
.
. {
.
. if (ServiceIsExisted(serviceName))
.
. {
.
. System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
.
. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
.
. {
.
. service.Stop();
.
. for (int i = 0; i < 60; i++)
.
. {
.
. service.Refresh();
.
. System.Threading.Thread.Sleep(1000);
.
. if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
.
. {
.
. break;
.
. }
.
. if (i == 59)
.
. {
.
. throw new Exception(stopServiceError.Replace("$s$", serviceName));
.
. }
.
. }
.
. }
.
. }
.
. }
.
.
.注:手动安装window服务的方法:
.
.在“Visual Studio 2005 命令提示”窗口中,运行:
.
.安装服务:installutil servicepath
.
.卸除服务:installutil /u servicepath

 

posted @ 2012-03-21 22:51  摩根船长  阅读(754)  评论(0编辑  收藏  举报