Windows服务的安装方法总结



 



C#创建Windows服务与安装-图解



百度经验:jingyan.baidu.com



一、第一种安装方法



使用.net framework自带的安装服务的程序进行安装



创建项目1



创建windows服务项目

windows上部署grafana windows部署服务怎么用_windows services

右键点击Service1.cs,查看代码, 用于编写操作逻辑代码



windows上部署grafana windows部署服务怎么用_windows services_02




代码中OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回

安装服务配置



打开Service1.cs视图界面

windows上部署grafana windows部署服务怎么用_asp.net_03

在视图内右键-->添加安装程序



windows上部署grafana windows部署服务怎么用_批处理_04

项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件



serviceProcessInstaller1



serviceInstaller1



windows上部署grafana windows部署服务怎么用_批处理文件_05




选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem



windows上部署grafana windows部署服务怎么用_asp.net_06




选中serviceInstaller1组件,查看属性



设置ServiceName的值, 该值表示在系统服务中的名称



设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动



设置Description,添加服务描述



windows上部署grafana windows部署服务怎么用_asp.net_07



安装服务1



点击 开始,运行中输入cmd,获取命令提示符



win7需要以管理员的身份启动,否则无法安装



windows上部署grafana windows部署服务怎么用_批处理_08




输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319回车



切换当前目录,此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例如果是.net framework2.0则需要输入cd C:\Windows\Microsoft.NET\Framework\v2.0.50727



windows上部署grafana windows部署服务怎么用_windows services_09






输入InstallUtil.exe E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe回车



说明:E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe表示项目生成的windowsservice主输出文件位置



windows上部署grafana windows部署服务怎么用_asp.net_10

打开服务,就可以看到已经安装的服务了



windows上部署grafana windows部署服务怎么用_windows上部署grafana_11



卸载服务:1



卸载很简单,打开cmd, 直接输入 sc delete WinServiceTest便可



 



第二中安装方法



使用windows批处理方法进行安装



 



1.服务项目完成之后,在服务解决方法中建立一个windows批处理文件命名为:InstallService.bat



windows上部署grafana windows部署服务怎么用_批处理文件_12



文件中的内容书写如下:



 



@echooff



 



 



echo--------------------------------------------------------------



echo-          开始安装服务         -



echo--------------------------------------------------------------           



pause



 



 



set appdir=%cd%\SimulateHexiaoWindowsService.exe



 



setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727



cd/d %Addr%



installutil.exe %appdir%



 



IFERRORLEVEL 255 GOTO Label255



IFERRORLEVEL 254 GOTO Label254



IFERRORLEVEL 1 GOTO Label1



GOTOLabel0



 



:Label255



echocommands to be executed at errorlevel 255



GOTOEnd



 



:Label1



echocommands to be executed at errorlevel 1



GOTOEnd



 



:Label0



echo--------------------------------------------------------------



echo-          成功安装服务



echo-------------------------------------------------------------- 



pause



 



:End



 



 



 



1.      新建一个卸载服务的windows批处理文件 命名为:



UnInstallService.bat



 

windows上部署grafana windows部署服务怎么用_批处理_13






 



 



 



@echooff



 



 



echo--------------------------------------------------------------



echo-         开始卸载服务



echo--------------------------------------------------------------           



pause



 



 



setappdir=%cd%\SimulateHexiaoWindowsService.exe



 



setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727



cd/d %Addr%



installutil.exe /u %appdir%



 



IFERRORLEVEL 255 GOTO Label255



IFERRORLEVEL 254 GOTO Label254



IFERRORLEVEL 1 GOTO Label1



GOTOLabel0



 



:Label255



echocommands to be executed at errorlevel 255



GOTOEnd



 



:Label1



echocommands to be executed at errorlevel 1



GOTOEnd



 



:Label0



echo--------------------------------------------------------------



echo-         成功卸载服务



echo-------------------------------------------------------------- 



pause



 



:End



 



注意:此处需要注意的同样如一方法中所说,如果创建的服务项目框架是.Net framework 2.0的则要把批处理文件中的设置改为setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727如果是.Netframework 4.0的话,这要修改为set Addr=C:\Windows\Microsoft.NET\Framework\v4.0.30319,本质上该方法和第一种方法是一样的。



 



三、使用vs的安装项目的安装方法来安装



 



     1.创建window服务项目



首先我们建一个window服务项目 :解决方案(右击)——>增加 ——>新建项目——>项目类型选择Windows——>模板选择Windows服务



 



      2.编写Window服务程序



创建后会生成两个文件 Program.cs和Service1.cs,其中 program.cs这个文件不用动,里面已自动生成好了。我们在Service1.cs里增加所要的操作,里面有两个重写方法 OnStart和 OnStop,OnStart方法表示服务启动的操作,OnStop表示服务停止的操作,下面写了一个简单示例 :当服务启动后,调用远程一个WebService的Hello函数,并把返回的值写入到一个文件中。code如下:



/// <summary>
        /// 服务启动的操作
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)  
         {
             Start ();
         }

         /// <summary>
        /// 服务停止的操作
        /// </summary>
        protected override void OnStop()
         {
             try
            {
                 ThreadHello.Abort();

                 Flag = false;

                 System.Diagnostics.Trace.Write("线程停止");
             }
             catch (Exception ex)
             {
                 System.Diagnostics.Trace.Write(ex.Message);
             }
         }

         private Thread ThreadHello;

         private void Starto()
         {
             try
            {
                 // 标准形式
                
                 //ThreadStart NewThreadStart = new ThreadStart(VoidName);
                 //Thread NewThead = new Thread(NewThreadStart);
                 //NewThead.Start();

                ThreadHello = new Thread(new ThreadStart(Hello));
                 ThreadHello.Start();
                 System.Diagnostics.Trace.Write("线程任务开始");
             }
             catch (Exception ex)
             {
                 System.Diagnostics.Trace.Write(ex.Message);
                 throw ex;
             }
         }

         private void Hello()
         {
             while (Flag)
             {
                 localhost.AdvService la = new WindowsService1.localhost.AdvService();
                 try
                {
                     string helloname = la.Hello("Andy"); // 调用远程WebService中的方法
                    writeInLog(helloname, false);   // 把调用返回的数据写入到文件中
                }
                 catch (Exception ex)
                 {
                     System.Diagnostics.Trace.Write(ex.Message);
                     throw ex;
                 }

                 Thread.Sleep(5000);
             }
         }

         /// <summary>
        /// 写入文件操作
        /// </summary>
        /// <param name="msg">写入内容</param>
        /// <param name="IsAutoDelete">是否删除</param>
        private void writeInLog(string msg, bool IsAutoDelete)
         {
             try
            {
                 string logFileName = @"E:\Sample\PG_Sample\log.txt"; // 文件路径
                FileInfo fileinfo = new FileInfo(logFileName);
                 if (IsAutoDelete)
                 {
                     if (fileinfo.Exists && fileinfo.Length >= 1024)
                     {
                         fileinfo.Delete();
                     }
                 }
                 using (FileStream fs = fileinfo.OpenWrite())
                 {
                     StreamWriter sw = new StreamWriter(fs);
                     sw.BaseStream.Seek(0, SeekOrigin.End);
                     sw.WriteLine("=====================================");
                     sw.Write("添加日期为:" + DateTime.Now.ToString() + "\r\n");
                     sw.Write("日志内容为:" + msg + "\r\n");
                     sw.WriteLine("=====================================");
                     sw.Flush();
                     sw.Close();
                 }
             }
             catch (Exception ex)
             {
                 ex.ToString();
             }
         }



例子很简单,方便理解,上面通过线程,每5秒执行一次操作,到这里,我们的服务以及服务实现的功能就已经写好了,下面怎么让客户端安装我们的服务呢?这里才是我写这篇文章的目的!先要增加一个安装程序类,切换到视图窗口,右击——>增加安装程序,便会增加一个程序安装类文件ProjectInstaller.cs。



这里serviceProcessInstaller1和 serviceInstaller1有几个重要属性要设置,serviceInstaller1中的StartType要设置成Automatic,表示随机启动,ServiceName表示服务名称,Description表示服务的描述, DisplayName表示显示名称。serviceProcessInstaller1中的Account要设置成LocalSystem,表示本地系统帐号








       3.安装程序



       安装程序制作:解决方案(右击)——>增加 ——>新建项目 ——>项目类型选择安装和部署——>  模板选择安装项目  如图 :




windows上部署grafana windows部署服务怎么用_批处理_14

 

    创建后,安装项目(右击)——>视图 ——>文件系统如图:



 

windows上部署grafana windows部署服务怎么用_windows上部署grafana_15


由于我们是安装服务,就不需要用户桌面和程序菜单了,直接应用程序文件夹(右击)——>增加 ——>项目输出 入图 :


windows上部署grafana windows部署服务怎么用_windows services_16

windows上部署grafana windows部署服务怎么用_windows services_16


上面有两点需要注意 ,一 项目选择中选择要安装的服务, 二 项目选择下面要选择主输出,选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作,这里我们增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) ——>视图 ——> 自定义操作 如图


windows上部署grafana windows部署服务怎么用_asp.net_18


上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)——>增加自定义操作,会弹出一个对话 如图:


windows上部署grafana windows部署服务怎么用_批处理_19


选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:


windows上部署grafana windows部署服务怎么用_windows services_20


这里 Arguments里输入 /u 表示卸载命令相当于InstallUtil.exe /u 服务路径  ,到这里 ,我们的安装程序就已经制作好了,生成安装程序项目,将会生成 setup.exe和 setup.msi安装文件,拷贝到客户端,点击setup.exe就像安装其他windows程序一样安装我们的服务


 

windows上部署grafana windows部署服务怎么用_windows services_21