C# windows服务:

第一种 :通过cmd命令安装、卸载、启动和停止Windows Service(InstallUtil.exe)

步骤:

1。运行--〉cmd:打开cmd命令框

2。在命令行里定位到InstallUtil.exe所在的位置

InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft.NET/Framework/v2.0.50727里面,所以你要在cmd里通过cd定位到该位置(cd C:/Windows/Microsoft.NET/Framework/v2.0.50727)

3。操作命令:

1). 安装服务命令:在命令行里输入下面的命令:

InstallUtil.exe Path/WinServiceName.exe

其中Path表示ServiceName.exe所在的位置,回车即可

2). 启动服务命令

net start ServiceName

ServiceName是真正的Service的名称(ServiceBase.ServiceName),跟.exe的名称可能一样,也可能不一样。如果不清楚,就到已安装的服务里面找到你的服务,右键属性里面看服务名称

3). 停止服务命令

net stop ServiceName

4). 卸载服务命令:在命令行里输入下面的命令:

InstallUtil.exe /u Path/WinServiceName.exe

其中Path表示ServiceName.exe所在的位置,回车即可

使用VS调用InstallUtil.exe工具,输入参数:
安装:D:\GCAMS\Code\PublicClass\SaveLogWindowsService\bin\Debug\SaveLogWindowsService.exe

启动:cmd--》net start ServiceName或者打开服务管理界面,选择需要启动的服务,右击启动服务

卸载:/U D:\GCAMS\Code\PublicClass\SaveLogWindowsService\bin\Debug\SaveLogWindowsService.exe

创建安装bat文件

安装Socket服务(Server).bat

@echo on
color 2f
mode con: cols=80 lines=25
echo 请按任意键开始安装SocketServer后台服务...
pause
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe SocketWindowsService.exe
rem net start SocketServer
sc start SocketServer %1
pause

创建安装bat文件

卸载Socket服务(Server).bat

@echo on
color 2f
mode con: cols=80 lines=25
echo 请按任意键开始卸载SocketServer后台服务...
pause
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe -u SocketWindowsService.exe
pause

  

第二种:使用WindowsServiceHelper类进行安装

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceProcess;
using System.Collections;
using Microsoft.Win32;
using System.Configuration.Install; namespace OperationWinService
{
public static class WindowsServiceHelper
{
#region 已封装Window服务
private static string ServerName = ConfigurationManager.AppSettings["WinServiceName"].ToString();
private static string ExecuteName = ConfigurationManager.AppSettings["ExecuteName"].ToString();
/// <summary>
/// 安装服务
/// </summary>
/// <param name="NameService">Windows服务显示名称</param>
/// <returns>存在返回 true,否则返回 false;</returns>
public static bool InstallService()
{
bool flag = false;
if (!IsServiceIsExisted())
{
try
{
string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
string serviceFileName = location.Substring(, location.LastIndexOf('\\') + ) + ExecuteName + ".exe"; //测试用的绝对路径
//string serviceFileName = @"F:\CM.WebSite\KJLMDemo\bin\Debug\KJLMDemo.exe";
InstallMyService(null, serviceFileName);
flag = true;
}
catch(Exception ex)
{
flag = false;
LogHelper.WriteLog(typeof(WindowsServiceHelper), "InstallService执行错误:" + ex.Message); } }
else
{
flag = true;
LogHelper.WriteLog(typeof(WindowsServiceHelper), "InstallService执行配置服务名称不存在");
}
return flag;
} /// <summary>
/// 卸载服务
/// </summary>
/// <param name="NameService">Windows服务显示名称</param>
/// <returns>存在返回 true,否则返回 false;</returns>
public static bool UninstallService()
{
bool flag = false;
if (IsServiceIsExisted())
{
try
{
string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
string serviceFileName = location.Substring(, location.LastIndexOf('\\') + ) + ExecuteName + ".exe";
//测试用的绝对路径
//string serviceFileName = @"F:\CM.WebSite\KJLMDemo\bin\Debug\KJLMDemo.exe";
UnInstallMyService(serviceFileName);
flag = true;
}
catch (Exception ex)
{
flag = false;
LogHelper.WriteLog(typeof(WindowsServiceHelper), "UninstallService执行错误:" + ex.Message);
}
}
else
{
flag = true;
LogHelper.WriteLog(typeof(WindowsServiceHelper), "UninstallService执行配置服务名称不存在");
}
return flag;
} /// <summary>
/// 检查Windows服务是否存在
/// </summary>
/// <param name="NameService">Windows服务显示名称</param>
/// <returns>存在返回 true,否则返回 false;</returns>
public static bool IsServiceIsExisted()
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName.ToLower() == ServerName.ToLower())
{
return true;
}
}
return false;
} /// <summary>
/// 安装Windows服务
/// </summary>
/// <param name="stateSaver">集合</param>
/// <param name="filepath">Windows服务程序文件路径</param>
private static void InstallMyService(IDictionary stateSaver, string filePath)
{
AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
AssemblyInstaller1.UseNewContext = true;
AssemblyInstaller1.Path = filePath;
AssemblyInstaller1.Install(stateSaver);
AssemblyInstaller1.Commit(stateSaver);
AssemblyInstaller1.Dispose();
} /// <summary>
/// 卸载Windows服务
/// </summary>
/// <param name="filePath">Windows服务程序文件路径</param>
private static void UnInstallMyService(string filePath)
{
AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
AssemblyInstaller1.UseNewContext = true;
AssemblyInstaller1.Path = filePath;
AssemblyInstaller1.Uninstall(null);
AssemblyInstaller1.Dispose();
} /// <summary>
/// 判断某个Windows服务是否启动
/// </summary>
/// <param name="serviceName">Windows服务显示名称</param>
/// <returns>bool</returns>
public static bool IsServiceStart()
{
bool bStartStatus = false; ServiceController psc = new ServiceController(ServerName); try
{
if (!psc.Status.Equals(ServiceControllerStatus.Stopped))
{
bStartStatus = true;
} return bStartStatus;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
} } /// <summary>
/// 修改服务的启动项 2为自动,3为手动
/// </summary>
/// <param name="startType">2为自动,3为手动</param>
/// <param name="serviceName">Windows服务显示名称</param>
/// <returns>bool</returns>
public static bool ChangeServiceStartType(int startType, string serviceName)
{
try
{
RegistryKey regist = Registry.LocalMachine;
RegistryKey sysReg = regist.OpenSubKey("SYSTEM");
RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet");
RegistryKey services = currentControlSet.OpenSubKey("Services");
RegistryKey servicesName = services.OpenSubKey(serviceName, true);
servicesName.SetValue("Start", startType);
}
catch (Exception ex)
{
return false;
}
return true; } /// <summary>
/// 启动服务
/// </summary>
/// <param name="serviceName">Windows服务显示名称</param>
/// <returns>bool</returns>
public static bool StartService()
{
bool flag = true;
try
{
if (IsServiceIsExisted())
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(ServerName);
if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
{
service.Start();
for (int i = ; i < ; i++)
{
service.Refresh();
System.Threading.Thread.Sleep();
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
break;
}
if (i == )
{
flag = false;
}
}
}
}
else
{
flag = false;
}
}
catch(Exception ex)
{
LogHelper.WriteLog(typeof(WindowsServiceHelper), "StartService执行错误:" + ex.Message);
}
return flag;
} /// <summary>
/// 停止服务
/// </summary>
/// <param name="serviceName">Windows服务显示名称</param>
/// <returns>bool</returns>
public static bool StopService()
{
bool flag = true;
try
{
if (IsServiceIsExisted())
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(ServerName);
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
service.Stop();
for (int i = ; i < ; i++)
{
service.Refresh();
System.Threading.Thread.Sleep();
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
break;
}
if (i == )
{
flag = false;
}
}
}
}
else
{
flag = false;
}
}
catch(Exception ex)
{
LogHelper.WriteLog(typeof(WindowsServiceHelper), "StopService执行错误:" + ex.Message);
}
return flag;
}
#endregion
}
}

c# 安装windows服务的更多相关文章

  1. 安装windows服务批处理代码

    批处理是DOS时代比较常用的方法之一,目前来说也是一种高效的方法,复制代码到文本文件中,保存并修改文件扩展名为“*.bat”. 安装windows服务批处理代码如下: @echo off set fi ...

  2. 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它

    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...

  3. .net安装windows服务配置文件config

    .net安装windows服务 : 在windows服务的项目(WindowsService1)代码文件中有一个app.config 配置文件,可以通过此文件进行时间等的更改而无需重新生成项目:那我们 ...

  4. .net安装windows服务和生产webservice

    安装windows服务 1.打开cmd对话框. 2.输入 cd WINDOWS\Microsoft.NET\Framework64\v2.0.50727\ 3.回车 4.输入InstallUtil.e ...

  5. TopSelf安装Windows服务提示:执行未经授权的操作。。

    在一个项目中用到了八九个服务,服务的执行时间也是五花八门,有的年末执行一次,有的月中执行一次,有的月末最后一天执行一次,有的月初连续执行5天, 有的每天晚上执行,...还好各个服务并没有严格的关联关系 ...

  6. mysql下载和安装Windows服务

    一.下载mysql:https://dev.mysql.com/downloads/mysql/,解压拷贝到D:\software\mysql-8.0.13-winx64 二.在D:\software ...

  7. 【C#】安装windows服务

    参考:http://blog.csdn.net ,http://blog.csdn.net/dyzcode 1.新建 visual studio insaller 项目2.添加 [文件系统]3.添加 ...

  8. 批处理安装Windows服务,提示"InstallUtil.exe"不是内部命令也不是外部命令解决方式

    今天在测试一个C#写的windows服务的时候,在用bat进行调用cmd安装的时候, cd C:\Windows\Microsoft.NET\Framework\v2.0.50727 InstallU ...

  9. MongoDB安装Windows服务

    由于官方下载较慢.这里提供一个个人百度共享网盘地址: http://pan.baidu.com/s/1mhHW0nI mongodb-win32-x86_64-3.2.3 使用以下命令将MongoDB ...

随机推荐

  1. Java 开源博客——B3log Solo 0.6.6 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版发布了!欢迎大家下载. 该版本引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也非常欢迎大家参与 ...

  2. Google VR技术大揭秘

    VR 虚拟现实(Virtual Reality)技术是一种能够创建和体验虚拟世界的计算机仿真系统.它利用计算机生成一种模拟环境.是一种多源信息融合的.交互式的三维动态视景和实体行为的系统仿真, 使用户 ...

  3. [React Router v4] Use the React Router v4 Link Component for Navigation Between Routes

    If you’ve created several Routes within your application, you will also want to be able to navigate ...

  4. .netcore consul实现服务注册与发现-单节点部署

    原文:.netcore consul实现服务注册与发现-单节点部署 一.Consul的基础介绍     Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分 ...

  5. Redis数据存储解决方案

    http://www.tuicool.com/articles/77nUZn 1.背景 1.1 Redis简介 官方网站: http://redis.io/ ,Redis是REmote DIction ...

  6. javascript中隐藏显示的样式表属性

    display属性 隐藏不占据位置 visibility属性 隐藏占据位置 //使用display的样式属性 隐藏 显示 //隐藏后不占据文档流位置 function showAddForm(){ v ...

  7. 结构体作为map的key或放入set中,需要重载<运算符

    结构体作为map的key或放入set中,需要重载<运算符,如下: typedef struct tagRoadKey{    int m_i32Type;    int m_i32Scale; ...

  8. 【Sliding Window】单调队列

    题目描述 给你一个长度为 N 的数组,一个长为 K 的滑动的窗体从最左移至最右端,你只能见到窗口的 K 个整数,每次窗体向右移动一位,如下表:

  9. Java SE学问Random

    这篇文章是在网络上的文章内容摘要学习以及自己的小练习,感谢您的无私分享. 昨天在项目中想使用几个随机数.结果使用Random时竟然出现随机数同样的情况.忍不住查了些资料. 现将代码总结例如以下: pa ...

  10. 回归(regression)的理解(regressor,回归子)

    1. 基本概念 回归(regression)是监督学习(given {(xi,yi)})的一个重要分类.回归用于预测输入变量(自变量,Xi)与输出变量(因变量,Yi) 之间的关系,特定是当输入变量的值 ...