
在做好一个WPF的程序后,有时候想让它的部分功能以服务的形式安装到Windows系统中,然后以Windows服务的方式运行,而图形界面仅作该服务的配置用途。在此记录一下开发的步骤以备忘。
上面程序中,Main()里决定了,如果程序是带w、/w或者-w参数启动的,那么让它以服务的方式运行,否则调用UIMode()进入图形界面非服务模式。
26 在解决方案浏览器上点右键在d出菜单中点“属性Properties”,在d出的项目的属性里,将入口点改成Program类如下图:
至此,改装就完成了,只需要将服务妥妥地安装好就行了,注意启动命令要带参数w、/w或者-w。
达叔傻乐( darwinzuo@163com )
系统服务跟以下的注册表几个项目相关:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services
我们完全可以找到在系统服务中已注册的服务的键值来依样画葫芦。
在以上任何注册表列中添加一个新项:
名字是你想要添加系统服务的名字,比如Backdoor。
在BACKDOOR项下新建一个字符串,数值名称Displayname 数值数据为要添加服务的
名称Backdoor。
方法一:使用windows自带的命令sc\x0d\使用sccreate方法创建。\x0d\如:sccreateCaptureScreenbinpath=F:\zwmei-project\decklink-learning\OutputBitmap\Debug\OutputBitmapexetype=ownstart=autodisplayname=Screen_Capture\x0d\其中CaptureScreen为服务名,可以在系统服务中找到,(通过在命令行运行servicesmsc打开系统服务)。binpath为你的应用程序所在的路径。displayname为服务显示的名称,这个在注册表中可以找到,(通过在命令行中输入regedit打开注册表,在HKEY_LOCAL_MACHINE--SYSTEM--CurrentControlSet下找到你的服务显示名)\x0d\注意:在sc命令中,=号前面不能有空格,而=号后面必须有一个空格,切记。另外要以管理员的身份打开命令行。\x0d\这种方法不一定能成功,如果你的exe不符合服务的规范,可能会启动失败。下面我们讨论第二种方法\x0d\方法二:在第一种方法失败的情况下,我们可以使用instsrvexe和srvanyexe两个小工具为我们分忧解难\x0d\我们可以在官网下载instsrvexe和srvanyexe然后放到自己的文件夹中,可以将文件夹放入C盘。下面我们开始注册服务。\x0d\已管理员的身份运行命令行,首先进入工具所在的文件夹,如:c:\tools。\x0d\执行c:\toolsinstsrvexeServerNamesrvanyexe\x0d\这样我们就创建了一个名为ServerName的srvany的服务,那么我们自己的exe该放在哪呢。下面我们打开注册表\x0d\找到ServiceName这个服务,然后右键新建项,名称为Parameters。单击该项,然后在右边新建两个字符串值。第一个名为Application,值为:应用程序路径,如:c:\myAppexe。第二个名为AppDirectory,值为:应用程序所在目录,如:c:\。\x0d\接下来我们进入系统服务,找到ServiceName这个服务,双击进入它的属性。设置允许与桌面交互。然后启动服务。\x0d\至此我们完成了将exe注册为服务的过程。\x0d\下面我们分析一下:\x0d\instsrvexe可以创建和删除服务,然而如果没有srvanyexe的参与,创建的服务可能无法启动。那么srvanyexe做了些什么呢,启动服务后我们可以在任务管理器中找到我们的服务,然后右击服务,选择转到进程,(如果进程中没有任何项被选中,则点击下面的显示所有用户进程,然后重新选择转至进程),我们看到的是srvanyexe,而不是我们自己的exe。原来我们的exe成为了它的一个子项,由srvanyexe帮助启动。
如果你的程序不复杂的话,直接将exe方案改成WindowsService项目呗!
要不就新建一个WindowsService项目,在代码里调用你编译好的exe,每次启动服务项目时就自动去启动exe程序
首先,去下载一个叫rktoolsexe的工具(我提供个下载地址Windows 2003 Resource Kits),下载完后安装该资源包,里面有个instsrvexe和srvanyexe的工具,就能够将普通进程转化为系统服务。
其次,进入控制台程序(运行->cmd),键入:instsrv 服务名 "程序路径",成功后就能够在系统服务中查找到该服务了,并尝试启动该服务,启动失败的话继续往下看。
然后,进入注册表(运行->regedit),找到HKEY_LOCAL_MACHINESYSTEMControlSet001Services服务名,将ImagePath的值指向srvanyexe的路径,同时新建项Parameters,并在其中新建字符串application,将application的值指定为原程序路径。
(如需要删除服务,只需要将注册表中HKEY_LOCAL_MACHINESYSTEMControlSet001Services服务名删除即可)
下面写个简单列子(服务名:test,程序路径:c:appexe)
1下载rktoolsexe,并安装;
2进入控制台,键入instsrv test "c:appexe";
3进入注册表,找到HKEY_LOCAL_MACHINESYSTEMControlSet001Services est,
将ImagePath值指向srvanyexe的路径,
新建项Parameters,并新建字符串application,同时将值设为c:appexe;
4启动服务。
以上就是关于给WPF程序添加以Windows服务的方式运行的功能全部的内容,包括:给WPF程序添加以Windows服务的方式运行的功能、如何在XP中把程序添加到服务中、如何将应用程序exe注册成服务,直接从后台运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)