一、通过InstallUtil.exe安装、卸载、启动、停止Windows Service  

  方法一

  1.以管理员身份运行cmd

  2.安装windows服务

    切换cd C:\Windows\Microsoft.NET\Framework\v4.0.30319(InstallUtil.exe的路径下,注意InstallUtil.exe的版本号需要和项目的版本号相同)

  3.安装windows服务

    InstallUtil.exe D:\SimpleService\SimpleService\bin\Debug\SimpleService.exe(项目的路径)

(安装过程中出现的错误:Window Service Install "帐户名无效或不存在,或者密码对于指定的帐户名无效。" 解决方法:填用户名时,要在前面加上 .\)

  4.启动windows服务

    net start Servive1(服务名称)

  5.卸载windows服务

    InstallUtil.exe /u D:\SimpleService\SimpleService\bin\Debug\SimpleService.exe

  方法二  

  1、找到 Installutil.exe 文件,并把它复制到 D:\SimpleService\SimpleService\bin\Debug\目录

  2、现在 Installutil.exe 程序在 D:\SimpleService\SimpleService\bin\Debug 目录下,需要通过cmd命令 "cd" 切换到该目录下。

  3、安装服务:
    installutil.exe SimpleService.exe

  4、卸载服务:
    installutil.exe SimpleService.exe

、通过代码模拟InstallUtil.exe安装、卸载、启动、停止Windows Service

  1、Program.cs中的代码

using System.ServiceProcess;

namespace MyWindowsService
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main(string [] args)
{
const string SERVICE_NAME = "MyWindowsService";
if (args.Length>&&(args[].ToLower()=="-install"||args[].ToLower()=="-i"))
{
if (!ServiceIsExisted(SERVICE_NAME))
{
System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { string.Concat(SERVICE_NAME,".exe")});
ServiceController c = new ServiceController(SERVICE_NAME);
c.Start();
}
}
else if(args.Length>&&(args[].ToLower()== "-uninstall" || args[].ToLower()=="-u"))
{
if (ServiceIsExisted(SERVICE_NAME))
{
System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/u", string.Concat(SERVICE_NAME, ".exe")});
}
}
else
{
ServiceBase[] ServicesToRun= { new Service1() };
ServiceBase.Run(ServicesToRun);
}
}
/// <summary>
/// 判断是否了安装该服务
/// </summary>
/// <param name="svcName"></param>
/// <returns></returns>
private static bool ServiceIsExisted(string svcName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (string.CompareOrdinal(s.ServiceName,svcName)==)
{
return true;
}
}
return false;
}
}
}

  2、管理员身份打开命令提示符

  3、切换到exe所在的目录,如下图

  4、安装服务

    MyWindowsService  -i

  其中MyWindowsService是服务名称,-i是安装服务的命令符号,可以看一下program.cs的代码就明白了。

  5、卸载服务

    MyWindowsService  -i

  其中MyWindowsService是服务名称,-u是卸载服务的命令符号,可以看一下program.cs的代码就明白了。

三、通过SC命令安装、卸载、启动、停止Windows Service

  1、安装Windows service

    sc create service1 binPath= "D:\SimpleService\SimpleService\bin\Debug\ SimpleService.exe"

    其中:service1 为创建的服务名,binPath后面是运行exe文件的所在路径

  2、配置服务    

    sc config service1 start= AUTO    (自动)

    sc config service1 start= DEMAND  (手动)

    sc config service1 start= DISABLED(禁用)

    其中service1是创建的服务名

  3、开启服务

    net start service1

    其中service1是创建的服务名

  4、关闭服务    

    net stop service1

    其中service1是创建的服务名

  5、删除服务

    sc delete service1

    其中service1是创建的服务名

四、批处理

(新建一个txt文件,自己命名,把后缀改为.bat文件)

  1、创建、配置、开启服务

@echo.服务启动......
@echo off
@sc create test1 binPath= "C:\Users\Administrator\Desktop\win32srvdemo\win32srvdemo\Debug\win32srvdemo.exe"
@net start test1
@sc config test1 start= AUTO
@echo off
@echo.启动完毕!
@pause

  2、关闭服务

@echo.服务关闭
@echo off
@net stop test1
@echo off
@echo.关闭结束!
@pause

  3、删除服务

@echo.服务删除
@echo off
@sc delete test1
@echo off
@echo.删除结束!
@pause

Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式的更多相关文章

  1. 手把手教用C#编写Windows服务 并控制服务 安装、启动、停止、卸载

    Windows服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动, ...

  2. Windows 64下elasticsearch-1.7.1集群 安装、启动、停止

    elasticsearch-1.7.1 (es Windows 64) 安装.启动.停止的详细记录 https://blog.csdn.net/qq_27093465/article/details/ ...

  3. 【转】monkeyrunner学习总结二:连接、安装、启动

    一.获取packageName与startActivity 前置条件:已成功安装配置SL4A并连接PC调试(参见:monkeyrunner学习总结一:环境搭建:http://www.amsoft.cn ...

  4. Windows Service 学习系列(一):建立简单的Windows service

    参考:https://www.cnblogs.com/cncc/p/7170951.html 一.开发环境 操作系统:Windows 7 X64 开发环境:VS2017 编程语言:C# .NET版本: ...

  5. WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】

    http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...

  6. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  7. windows服务安装卸载

    到C盘下找到对应的开发VS的installutil.exe文件,复制到程序的执行文件(*.exe)相同目录下在开始程序中找到VS命令提示工具 转到程序的执行文件(*.exe)目录下 C:\>cd ...

  8. c#创建windows服务(代码方式安装、启动、停止、卸载服务)

    转载于:https://www.cnblogs.com/mq0036/p/7875864.html 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NE ...

  9. Windows Server 2012之活动目录域服务的卸载

    Windows Server 2012之活动目录域服务的卸载 2012-07-11 06:27:35 标签:Windows Server 2012 活动目录域服务 卸载 原创作品,允许转载,转载时请务 ...

随机推荐

  1. Python爬虫入门教程 12-100 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  2. C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  3. Node.js 中的 stream

    什么是 stream Stream 借鉴自 Unix 编程哲学中的 pipe. Unix shell 命令中,管道式的操作 | 将上一个命令的输出作为下一个命令的输入.Node.js stream 中 ...

  4. C++中 引用&与取地址&的区别

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  5. 使用mpvue开发小程序教程(四)

    在上一章节中,我们将vue-cli命令行工具生成的代码骨架中的src目录清理了一遍,然后从头开始配置和编写了一个可以运行的小程序页面,算是正真走上了使用mpvue开发小程序的第一步.今天我们将进一步来 ...

  6. keepalived+双主实践HA

    工作不怎么忙,搞点儿开发吧差点儿事,就想着弄点儿架构的事儿.正好前段时间看过关于keepalived+双主实现高可用的文章,也恰好身边的朋友所在的公司也部分用这个架构.没什么事儿就搞搞吧,正好对比下M ...

  7. 基于open62541的opc ua 服务器开发实现(1)

    关于opcua的介绍这里就不多说了,相信大家大都有了一些了解,open62541是一个开源C(C99)的opc-ua实现,开源代码可在官网或github上下载. 话不多说,首先搭建一个opcua服务器 ...

  8. web进修之—Hibernate 关系映射(3)

    概述 Hibernate的关系映射是Hibernate使用的难点或者是重点(别担心,不考试哦~),按照不同的分类方式可以对这些映射关系做一个分类,如: 按对象对应关系分: 一对一 多对一/一对多 多对 ...

  9. 教你MySQL Binlog实用攻略

    本文由云+社区发表 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发 ...

  10. Connection 对象简介 方法解读 JDBC简介(四)

    通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接     Connection conn = DriverManager.getConnection ...