如何安装一个Windows服务?
如何卸载一个Windows服务?
如何使用参数控制服务的运行方式?
本文主要讨论上面三个问题。因为在我们开发完一个服务之后,我们需要把它安装在不同的环境中,以及如何卸载它。
在某些时候,我们还想快速运行和调试一下程序。这些都是我们开发人员所面临的问题,通过本文,我们就会知道这些答案。
如何安装一个Windows服务?
使用cmd命令行:
sc create MyService binPath="%~dp0WindowsSvcDemo.exe"
通过上面命令就可以创建MyService windows服务了。运行结果如下:
打开Services窗口,我们就可以在服务列表里面找到刚刚创建的MyService服务了,我们可以启动和停止服务。
对于cmd命令行语句,我们可以保存在install.bat文件里面,然后提交到git中管理。
如何卸载一个Windows服务?
使用cmd命令行:
sc delete MyService
无论MyService服务是正在运行还是停止状态,这个命令都可以执行成功,区别是服务如果正在运行,这个服务不会被立刻删除掉,而是在这个服务停止的时候,自动从服务列表中删除。
对于cmd命令行语句,我们可以保存在uninstall.bat文件里面,然后提交到git中管理。
如何使用参数控制服务的运行方式?
我们console类型的程序一般有一个Program类,并包含一个Main函数,它的签名如下:
static void Main(string[] args);
我们可以通过判断主函数的参数,来快速调试一些不同case。
代码大致可以这样写:
var engineMode = IsEngineMode(args);
var consoleMode = IsConsoleMode(args);
if (engineMode)
{
RunEngineMode(Container);
return;
}
if (consoleMode)
{
RunConsoleMode(servicesToRun);
}
else
{
ServiceBase.Run(servicesToRun);
}
思路很简单就是通过主函数的输入参数来运行不同的分支代码。对于这一段实例代码,它想表达的是,一共有三种方式来运行这个程序:
1. engineMode
2. consoleMode
3. windows服务
对于使用windows服务的方式,本文前面的内容已经讲过了,那如何使用engineMode或consoleMode方式来运行程序呢?
我们假设主函数的参数传入的是engine,那就按照engineMode方式运行;主函数的参数传入的是console,那就按照consoleMode方式运行。
如果是这样的话,使用下面的cmd命令行就可以按照engineMode方式运行:
WindowsSvcDemo.exe -engine
把命令保存在engine.bat文件里面,然后提交到git中管理。
使用下面的cmd命令行就可以按照consoleMode方式运行:
WindowsSvcDemo.exe -console
把命令保存在console.bat文件里面,然后提交到git中管理。
本文回顾:
安装一个Windows服务
卸载一个Windows服务
使用参数控制服务的运行方式
cmd命令行保存到bat文件