C#中级-Windows Service程序安装注意事项_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#中级-Windows Service程序安装注意事项

C#中级-Windows Service程序安装注意事项

 2017/12/9 16:25:36  airforce094  程序员俱乐部  我要评论(0)
  • 摘要:一、前言这周除了改写一些识别算法外,继续我的Socket服务编写。服务器端的Socket服务是以WindowsService的形式运行的。在我完成WindowsService编写后,启动服务时总是出现错误,这里我总结下如何安装、启动及排查故障。二、正文先说说WindowsService的安装,这是最基础的。当你编写完WindowsService后,通常要执行一段脚本,脚本与WindowsService应用在同一目录下:%SystemRoot%\Microsoft
  • 标签:程序 Windows C# Service 注意事项 安装 事项

一、前言

      这周除了改写一些识别算法外,继续我的Socket服务编写。服务器端的Socket服务是以Windows Service的形式运行的。

     在我完成Windows Service编写后,启动服务时总是出现错误,这里我总结下如何安装、启动及排查故障。

 

二、正文

     先说说Windows Service的安装,这是最基础的。当你编写完Windows Service后,通常要执行一段脚本,脚本与Windows Service应用在同一目录下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe UpdaterService.exe //UpdaterService为Service应用程序
Net Start SocketService //SocketService为Service名称
sc config SocketService start = auto
pause

 

      当脚本执行时出现服务启动失败(1053-服务没有及时响应启动或控制请求)时,说明你的应用有问题了。

      首先要检查下Windows Service应用的dll是否完整,有没有遗漏。

      然后如果是编译成功的,看下自己的Service代码是否运行在一个线程里:

using System;
using System.IO;
using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;

namespace UpdaterService
{
    public partial class SocketService : ServiceBase
    {
        Thread threadforwork = null;
        public SocketService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            if (threadforwork == null)
            {
                threadforwork = new Thread(p =>
                {
                    try
                    {
                        //Your Service 
                    }
                    catch (Exception ex)
                    {
                        //Log Here
                    }
                });
                threadforwork.IsBackground = true;
                threadforwork.Start();
            }      
        }

        protected override void OnStop()
        {
            if (threadforwork?.ThreadState == ThreadState.Running)
            {
                threadforwork.Abort();
            }
        }
    }
}

         

         顺利安装完Windows Service后如果需要卸载则,执行另一脚本,同样卸载脚本与Windows Service应用也在同一目录下:

net stop SocketService
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u UpdaterService.exe
pause

       

       如果你想删除这个Windows Service应用所在目录时,正常情况下是可以完全删除的。

       但是有时候却不能完全删除,提示你当前程序被占用,无法删除。这种情况一般发生在安装服务成功,启动服务失败的时候,你去卸载就不能完全卸载干净。

       你需要运行命令行去删除干净:

sc queryex ServiceName
//这时会显示服务的PID
taskkill /PID ServicePID /f

       当命令行显示已成功删除PID之后,你就可以删除应用所在目录了。

 

三、结语

      这周科目二考试居然挂了,平时练得各种顺利,进考场有点懵,居然在倒车入库就屁股顶线两次,真是神奇!奇怪的是,挂了之后心情却异常的好,感觉整个人都突然好了。前几周睡眠不太好,总失眠。挂了之后居然每天都睡的很香,在公司吃饭胃口也好了很多,可能这是命中注定的事吧。在线升级程序也快搞完了,可以做压力测试了。下次定能在神明的保佑下考过科目二!阿门,阿弥陀佛,阿拉胡阿克巴!

 

发表评论
用户名: 匿名