您的位置:首页 > 编程语言 > C#

vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动

2009-03-13 22:42 766 查看
一、安装服务:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐