用C#写了一个控制台程序,如何让它作为服务来运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C#写了一个控制台程序,如何让它作为服务来运行相关的知识,希望对你有一定的参考价值。
想让一个程序在启动系统的时候自动运行,你有什么好办法?添加到启动组?那如果别人删除掉就不管用了。如果你使用了windowsnt/2000/xp,就可以试试把这个程序添加为一个服务,这样只有拥有权限的人才可以更改服务,只要你设置好权限,就不用担心会被别人删除了。
要把应用程序添加为服务,你需要两个小软件:instsrv.exe和srvany.exe。
instsrv.exe可以给系统安装和删除服务,srvany.exe可以让程序以服务的方式运行。这两个软件都包含在windows
nt
resource
kit里。
把这两个程序保存在一个方便的位置,例如c盘根目录下。
我们举例来说明,把oe作为一个服务添加进windows
xp
professional操作系统中,并把这个服务命名为“mail”。
在运行中输入“cmd”,回车,打开命令行窗口,在提示符后面直接输入:“c:\instsrv.exe
c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而mail则是你想添加的服务名称。
运行regedit打开注册表编辑器,在hkey_local_machine\system\currentcontrolset\services下,找到刚才添加的mail,点击右键,新建一个键,命名为“parameters”,点击新建的parameters,并再次新建一个名称为“application”的子键,数据类型为“reg_sz”,数值为希望作为服务运行的程序的所在位置,如果你的windows系统安装在c盘下,那么oe的程序位置就是c:\program
files\outlook
express\msimn.exe
,把这个路径添入数值中。
到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在mail服务下建立一个名为description的子键,数据类型同样为reg_sz,数值可以写一些你对这个服务的描述,这个我们在后面可以看到。
接下来需要对服务做一些额外的设置,在运行中输入“services.msc”并回车,在列表中找到我们刚添加的mail服务,双击打开,来做详细的设置。
在“general”选项卡上,我们需要设置这个服务的运行方式,可以看见,作为一个服务,有“自动(automatic)”,“手动(manual)”和“禁止(disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。
注销一下看看。为了让你看清除,我们先打开oe,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是我们打开的oe,而用户名为“system”的就是我们添加的服务。
如果你玩够了,不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用instsrv.exe程序删除。方法是在命令行下输入“c:\instsrv.exe
remove”,然后回车就可以了。需要注意的是instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。 参考技术A 想让一个程序在启动系统的时候自动运行,你有什么好办法?添加到启动组?那如果别人删除掉就不管用了。如果你使用了Windows
NT/2000/XP,就可以试试把这个程序添加为一个服务,这样只有拥有权限的人才可以更改服务,只要你设置好权限,就不用担心会被别人删除了。
要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。
Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows
NT
Resource
Kit里。
把这两个程序保存在一个方便的位置,例如C盘根目录下。
我们举例来说明,把OE作为一个服务添加进Windows
XP
Professional操作系统中,并把这个服务命名为“Mail”。
在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\instsrv.exe
c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail则是你想添加的服务名称。
运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为“Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program
Files\Outlook
Express\msimn.exe
,把这个路径添入数值中。
到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述,这个我们在后面可以看到。
接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。
在“General”选项卡上,我们需要设置这个服务的运行方式,可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。
注销一下看看。为了让你看清除,我们先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是我们打开的OE,而用户名为“SYSTEM”的就是我们添加的服务。
如果你玩够了,不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\instsrv.exe
remove”,然后回车就可以了。 参考技术B 控制台程序和服务程序是两个概念
不过可以设置开机启动程序后隐藏,则该控制台程序会类似于服务程序运行。本回答被提问者和网友采纳 参考技术C 变成windows 服务。这儿有步骤:
http://blog.csdn.net/xiao_rory/article/details/7750767 参考技术D 创建windows服务应用程序
c# - 我如何让应用程序作为服务运行?
【中文标题】c# - 我如何让应用程序作为服务运行?【英文标题】:c# - how do i make application run as a service? 【发布时间】:2010-07-12 20:18:39 【问题描述】:我有一个需要作为服务运行的简单 c# 应用程序。如何让它作为服务而不是可执行文件运行?
【问题讨论】:
resources on creating a windows service using c#的可能重复 在这里我找到了分步说明:***.com/a/593803/7713750 【参考方案1】:Visual C# 2010 Recipies 中有一个示例,它将向您确切展示如何执行此操作,我已尝试使用 VS 2008 和 .NET 3.5。
就是这样:
-
在 Visual Studio 中创建一个新的“Windows 服务”应用程序
将应用程序的源代码移植到服务的执行模型中,也就是您的 Main 函数成为由计时器对象或类似内容触发的事件处理程序的一部分
将 Service Installer 类添加到您的 Windows 服务项目中 - 它看起来类似于下面的代码 sn-p:
[RunInstaller(true)]
public partial class PollingServiceInstaller : Installer
public PollingServiceInstaller()
//Instantiate and configure a ServiceProcessInstaller
ServiceProcessInstaller PollingService = new ServiceProcessInstaller();
PollingService.Account = ServiceAccount.LocalSystem;
//Instantiate and configure a ServiceInstaller
ServiceInstaller PollingInstaller = new ServiceInstaller();
PollingInstaller.DisplayName = "SMMD Polling Service Beta";
PollingInstaller.ServiceName = "SMMD Polling Service Beta";
PollingInstaller.StartType = ServiceStartMode.Automatic;
//Add both the service process installer and the service installer to the
//Installers collection, which is inherited from the Installer base class.
Installers.Add(PollingInstaller);
Installers.Add(PollingService);
最后,您将使用命令行实用程序来实际安装该服务 - 您可以在此处了解其工作原理:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d8f300e3-6c09-424f-829e-c5fda34c1bc7
如果您有任何问题,请告诉我。
【讨论】:
【参考方案2】:Visual Studio 中有一个名为“Windows Service”的模板。如果您有任何问题,请告诉我,我整天都在写服务。
【讨论】:
非常感谢乔纳森,我一定会接受你的【参考方案3】:有将 .net 应用程序作为 Windows 服务托管的开源框架。安装、卸载windows服务没有痛苦。它解耦得很好。请查看此帖Topshelf Windows Service Framework Post
【讨论】:
【参考方案4】:我想展示简单的方式来运行服务
如果你的服务没有停止或其他状态,首先你想要:
public static bool isServiceRunning(string serviceName)
ServiceController sc = new ServiceController(serviceName);
if (sc.Status == ServiceControllerStatus.Running)
return true;
return false;
接下来如果服务没有运行,你可以使用这个简单的方法
public static void runService(string serviceName)
ServiceController sc = new ServiceController(serviceName);
sc.Start();
【讨论】:
以上是关于用C#写了一个控制台程序,如何让它作为服务来运行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用c#和windows服务创建无敌的windows应用程序
我们如何判断C ++应用程序是否作为Windows服务启动?