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

一、前言

     
下周除了改写一些分辨算法外,继续自己的Socket服务编写。服务器端的Socket服务是以Windows
Service的款型运行的。

     在我成功Windows
Service编写后,启动服务时连连出现错误,这里自己计算下什么样设置、启动及排查故障。

 

二、正文

     先说说Windows
瑟维斯的设置,那是最基础的。当你编写完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
瑟维斯应用也在平等目录下:

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之后,你就足以去除应用所在目录了。

 

三、结语

      前一周科目二考试竟然挂了,平常练得各个顺遂,进考场有点懵,居然在中转入库就屁股顶线三遍,真是神奇!奇怪的是,挂明白后心境却分外的好,感觉整个人都赫然好了。前几周睡眠不太好,总网瘾。挂了之后依然每一天都睡的很香,在店堂吃饭胃口也好了成百上千,可能这是命中注定的事啊。在线升级程序也快搞完了,可以做压力测试了。下次定能在神明的呵护下考过科目二!阿门,阿弥陀佛,阿拉胡阿克巴!

 

相关文章