安装服务和卸载服务采用process启动命令行的方式。启动服务和停止服务用到了 System.ServiceProcess.ServiceController这个类。
 
程序是这样运行的,首先启动服务和停止服务会去判断服务是否存在,根据的是服务名称,而这个名称我卸载App.config文件下,通过appsettings加key和value,程序在load事件里读取这个名称,如果不存在,就不执行相应功能。
 
当这个服务存在了之后,在去判断服务所处的状态,
if (star_service.Status != ServiceControllerStatus.Running &&
star_service.Status != ServiceControllerStatus.StartPending)
满足这个条件,才能启动服务。
 
停止服务满足这样的条件:
if (star_service.Status == ServiceControllerStatus.Running),就会执行停止服务的代码。
 
安装与卸载,是通过这个工具:InstallUtil.exe,这个工具需要根据服务所对应的.net framework版本来确定 。
 
如果是3.5及以下的版本要使用这个文件夹下的:C:\Windows\Microsoft.NET\Framework\v2.0.50727
 
如果是4.0及以上的版本写的服务要用这个文件夹下的:C:\Windows\Microsoft.NET\Framework\v4.0.30319
 
下面给出封装的命令行,只需传个服务所在路径就可以了。
 private string excuteCmd(string strCMD)
{ Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
//这里根据需要安装服务的框架版本不同,路径也不同,我的是.net3.5的
p.StartInfo.WorkingDirectory = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727"; //p.StartInfo.CreateNoWindow = true;
//p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.Start();//启动程序 p.StandardInput.WriteLine(strCMD);
p.StandardInput.AutoFlush = true;
p.StandardInput.WriteLine(" exit");
p.StandardInput.AutoFlush = true; //获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd();
//等待程序执行完退出进程
p.WaitForExit();
p.Close(); return output;
}
在给个启动服务的代码:

private string excuteCmd(string strCMD)
{ Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
//这里根据需要安装服务的框架版本不同,路径也不同,我的是.net3.5的
p.StartInfo.WorkingDirectory = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727"; //p.StartInfo.CreateNoWindow = true;
//p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.Start();//启动程序 p.StandardInput.WriteLine(strCMD);
p.StandardInput.AutoFlush = true;
p.StandardInput.WriteLine(" exit");
p.StandardInput.AutoFlush = true; //获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd();
//等待程序执行完退出进程
p.WaitForExit();
p.Close(); return output;
} 在给个启动服务的代码: private void btn_startService_Click(object sender, EventArgs e)
{
if (!IsServerExists(serviceName))
{
MessageBox.Show("未找到配置文件写的服务:" + serviceName);
return;
}
bool isStarted = false;
ServiceController star_service = new ServiceController(serviceName);
if (star_service.Status != ServiceControllerStatus.Running &&
star_service.Status != ServiceControllerStatus.StartPending)
{
star_service.Start();
//这里是看80s内,服务是否启动完毕
for (int i = 0; i < 80; i++)
{
star_service.Refresh();
System.Threading.Thread.Sleep(1000);
if (star_service.Status == ServiceControllerStatus.Running)
{
isStarted = true;
break;
}
if (i == 79)
{
isStarted = false;
}
}
}
else
{
MessageBox.Show("服务已经启动或被暂停");
return;
}
if (isStarted)
{
MessageBox.Show("服务启动完成!");
}
else
{
MessageBox.Show("服务未在80秒内启动起来,请到服务里去手动启动");
} }
卸载服务:
string strCMD = @"InstallUtil.exe /u " + txt_filePath.Text;
string output = excuteCmd(strCMD);
安装服务:

string strCMD = @"InstallUtil.exe " + txt_filePath.Text;

string output = excuteCmd(strCMD);

代码下载

InstallService.zip

winform——windows 服务的安装 卸载 启动 停止的更多相关文章

  1. 通过批处理进行Windows服务的安装/卸载&启动/停止

    安装服务 @echo off set checked=2 set PATHS=%~sdp0 echo 按任意键执行安装……? pause>nul if %checked% EQU 2 ( %PA ...

  2. Windows服务的安装卸载及错误查找

    @echo off echo 清理原有服务项. . . %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil /U D:\abc\te ...

  3. windows 服务的安装、启动、状态查询、停止操作c++实现

    具体的自己看看代码 粘贴复制即可使用 卸载也很简单自己查看MSDN 加上就是 #ifndef __SERVICEMANAGE_H__ #define __SERVICEMANAGE_H__ #incl ...

  4. windows服务,安装、启动、停止,配置,一个批处理文件搞定

    相对而言,还是比较通用的吧,如果哪位仁兄有更好的实现方式,或者发现有不足之处,还请多多指教.  @echo off echo.------------------------------------- ...

  5. WCF 下的windows服务的安装卸载

    安装:启动vs2010(如果是win2008要以管理员来启动)命令:installutil demo.exe 卸载:先在服务里停止这个服务,然后启动vs2010(如果是win2008要以管理员来启动) ...

  6. C# Windows服务创建安装卸载

    一.创建Windows服务 使用VS创建一个新的windows服务应用程序 创建完成之后 二.相关配置 修改Service1名称为StartService(可以不改,自行选择) 添加安装程序并修改配置 ...

  7. C#操作windows服务,安装、卸载、停止、启动

    public class ServiceUtil { private string _ServiceName = string.Empty; private string _AppName = str ...

  8. windows操作系统中安装、启动和卸载memcached

    今天总结一下如何在Windows操作系统中安装.启动和卸载memcached:下载地址: http://download.csdn.net/download/wangshuxuncom/8249501 ...

  9. 使用InstallUtil对Windows服务进行安装与卸载

    关于Visual Studio 2012中使用InstallUtil对Windows服务进行安装与卸载的文章,在MSDN中的http://msdn.microsoft.com/en-us/librar ...

  10. Windows Service的安装卸载 和 Service控制(转)

    Windows Service的安装卸载 和 Service控制 原文地址:http://www.cnblogs.com/Peter-Zhang/archive/2011/10/15/2212663. ...

随机推荐

  1. 【FAQ】运动健康服务端侧数据常见问题及解答

    目录 Q1:Health Kit开放的API是否支持同时获取多个华为手环的健康数据? Q2:当前通过Health Kit获取运动健康数据的功能是否免费? Q3:在联盟平台申请Health Kit权限, ...

  2. 宝塔面板配置MongoDB数据库

    1-安装MongoDB 在面板中的[软件商店]搜索MongoDB并安装,推荐下载4.x以上的版本(可视化工具MongoDB Compass对高版本兼容比较好). 下载完成后,可以点击[设置],[版本切 ...

  3. linux ssh连接

    前言 整理以前的随笔. 正文 首先更新源 sudo apt-get update 安装ssh服务 sudo apt-get install openssh-server 检测是否已启动 ps -e | ...

  4. JWT对SpringCloud进行认证和鉴权

    JWT(JSON WEB TOKEN)是基于RFC 7519标准定义的一种可以安全传输的小巧和自包含的JSON对象.由于数据是使用数字签名的,所以是可信任的和安全的.JWT可以使用HMAC算法对sec ...

  5. javascript现代编程系列教程之七——字符数据类型-字符集-编码解码-常用字符串处理方法(七)

    一.字符集 Unicode:Unicode 是一个字符集(Charset),包含了世界上所有的字符.每个字符在 Unicode 中都有其唯一对应的数字编号,这就是我们常说的 Unicode 码. UT ...

  6. seaJS简介

    所有版本的 zip 包请在这里下载:seajs/tags 解压后,目录说明如下: dist -- sea.js 等压缩好的文件,直接可用 docs -- 使用文档 lib -- 给 Node.js 用 ...

  7. Oracle with的重复使用(递归)

    Oracle with的重复使用(递归) 写力扣的时候学到了新的方法 Recursive WITH Clauses 通常来说如果直接使用with XXX as ()这种,是没发直接使用自身的数据的 例 ...

  8. Borůvka MST算法

    当我认为最MST(最小生成树)已经没有什么学的了,才发现世界上还有个这个kruskal和prim结合的玩意 Borůvka 运用并查集的思想,先将每一个初始点集初始化为有且只有自己的点集,然后每一次合 ...

  9. Javascript 机器学习的四个层次

    ​简介: Atwood定律说,凡是可以用Javascript实现的应用,最终都会用Javascript实现掉.作为最热门的机器学习领域,服务端是Python的主场,但是到了手机端呢?Android和i ...

  10. [FAQ] jQuery prop 与 attr 的区别

    .prop() 获取匹配的元素集中第一个元素的属性(property)值 或 设置每一个匹配元素的一个或多个属性. 当设置 selectedIndex, tagName, nodeName, node ...