C# 操作windows服务[启动、停止、卸载、安装]
主要宗旨:不已命令形式操作windows服务
static void Main(string[] args)
{
var path = @"E:\开发辅助项目\WCF\WCF.Test\WCF.Test\bin\Debug\WCF.Test.exe";
var serviceName = "WCF_TestService";
HandleService hs = new HandleService();
//启动服务
hs.StartService(serviceName);
//停止服务
hs.StopService(serviceName);
//卸载服务
hs.DeleteService(path);
//安装服务
hs.InstallService(path);
Console.ReadKey();
}
操作类
public class HandleService
{ /// <summary>
/// 获取服务
/// </summary>
/// <param name="serviceName">服务名</param>
/// <returns></returns>
public ServiceController GetService(string serviceName)
{
try
{
//可以获取所有的服务
//ServiceController[] service = ServiceController.GetServices(); //无法打开计算上的服务控制管理器。
//ServiceController[] service = ServiceController.GetServices(serviceName);
//if (service.Length <= 0) return null; ServiceController service = new ServiceController(serviceName);
return service;
}
catch (Exception ex)
{
return null;
}
} /// <summary>
/// 安装服务
/// </summary>
/// <param name="path">路径</param>
public void InstallService(string path)
{
try
{
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = path;
myAssemblyInstaller.Install(null);
myAssemblyInstaller.Commit(null);
myAssemblyInstaller.Dispose(); }
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
} /// <summary>
/// 启动服务
/// </summary>
/// <param name="serviceName">服务名</param>
public void StartService(string serviceName)
{
try
{
var service = GetService(serviceName);
if (service == null)
{
Console.Write($"windows上不存在{serviceName}服务!");
return;
}
if (service.Status == ServiceControllerStatus.Paused ||
service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(, , ));
}
Console.WriteLine($"{serviceName}已经启动");
}
catch (Exception)
{ throw;
}
} /// <summary>
/// 停止服务
/// </summary>
/// <param name="serviceName">服务名</param>
public void StopService(string serviceName)
{
try
{
var service = GetService(serviceName);
if (service == null)
{
Console.Write($"windows上不存在{serviceName}服务!");
return;
}
if (service.Status == ServiceControllerStatus.Running ||
service.Status == ServiceControllerStatus.PausePending || service.Status == ServiceControllerStatus.StartPending)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(, , ));
}
Console.WriteLine($"{serviceName}已经停止");
}
catch (Exception)
{ throw;
}
} /// <summary>
/// 卸载服务
/// </summary>
/// <param name="path"></param>
public void DeleteService(string path)
{
try
{
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = path;
myAssemblyInstaller.Uninstall(null);
myAssemblyInstaller.Dispose();
Console.WriteLine("卸载服务成功!");
}
catch (Exception ex)
{
Console.WriteLine("卸载服务失败");
} } }
C# 操作windows服务[启动、停止、卸载、安装]的更多相关文章
- C#通过SC命令和静态公共类来操作Windows服务
调用的Windows服务应用程序网址:http://www.cnblogs.com/pingming/p/5115304.html 一.引用 二.公共静态类:可以单独放到类库里 using Syste ...
- c# 通过Windows服务启动外部程序
1. 新建一个Windows服务应用程序 创建项目——>Visual C# 左侧的"+"——>Windows ——>Windows 服务(右侧模板)——>输 ...
- C#.NET 操作Windows服务承载WCF
Windows服务的制作.安装可以参考这篇: C#.NET 操作Windows服务(安装.卸载) - runliuv - 博客园 (cnblogs.com) 本篇会在这个解决方案基础上,继续修改. 一 ...
- MongoDB做为一项windows服务启动
MongoDB做为一项windows服务启动 Windows版本安装 MongoDB的官方下载站是http://www.mongodb.org/downloads,可以去上面下载最新的对应版本,有32 ...
- 玩转Windows服务系列——Windows服务启动超时时间
最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 ...
- cmd命令行和bat批处理操作windows服务(转载)
一.cmd命令行---进行Windows服务操作 1.安装服务 sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srv ...
- 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...
- Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- Linux Oracle服务启动&停止脚本与开机自启动[转]
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
随机推荐
- 使用SpringSocial开发QQ登录
⒈编写QQ用户对应的数据结构 package cn.coreqi.social.qq.entities; /** * 封装QQ的用户信息 */ public class QQUserInfo { /* ...
- 拦截RESTful API并做相应处理的方式
⒈使用Filter(过滤器) package cn.coreqi.security.filter; import org.springframework.stereotype.Component; i ...
- python中“*”、"*args"、"kwargs"三种用法
参考链接:https://www.cnblogs.com/cwind/p/8996000.html 注意的是: (1)"*"符号的用法很类似C++中的指针,针对列表; (2)&qu ...
- dubbo源码分析10——服务暴露1_export()方法分析
ServiceConfig类中的export()方法,是dubbo服务暴露的入口方法,被触发的时机有两个: 1. spring容器初始化完成所有的bean实例后,通过事件机制触发 2. 实现Initi ...
- python练习实例
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile","w") fh.writ ...
- 题解-PKUWC2018 Slay the Spire
Problem loj2538 Solution 在考场上当然要学会写暴力,考虑如果手上已经有了\(a\)张攻击牌和\(b\)张强化牌: 首先强化牌会在攻击牌之前用(废话),其次要将两种牌分别从大往小 ...
- 发布自己的类库到NuGet
NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...
- 023_nginx跨域问题
什么是跨域? 使用js获取数据时,涉及到的两个url只要协议.域名.端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题.例如客户端的域名是www.redis.com.cn,而请求的域名是w ...
- T-SQL GROUP BY子句 分组查询
SQL Server GROUP BY子句与SELECT语句协作使用,以将相同的数据分组. GROUP BY子句位于SELECT语句中的WHERE子句之后,位于ORDER BY子句之前. 语法 以下是 ...
- GIT入门文档
集中式(SVN): 集中式版本控制系统,版本库是集中存放在中央服务器的,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器. 集中式版本控制系 ...