Windows Services的安装部署 三种方法总结


Windows服务的安装方法总结

 

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

百度经验:jingyan.baidu.com

一、第一种安装方法

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

创建项目1

创建windows服务项目

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


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

安装服务配置

打开Service1.cs视图界面

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

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

serviceProcessInstaller1

serviceInstaller1


选中serviceProcessInstaller1组件,查看属性,设置accountLocalSystem


选中serviceInstaller1组件,查看属性

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

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

设置Description,添加服务描述

安装服务1

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

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


输入 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


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

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

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

卸载服务1

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

 

第二中安装方法

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

 

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

文件中的内容书写如下:

 

@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

 


 

 

 

@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.csService1.cs,其中 program.cs这个文件不用动,里面已自动生成好了。我们在Service1.cs里增加所要的操作,里面有两个重写方法 OnStart OnStopOnStart方法表示服务启动的操作,OnStop表示服务停止的操作,下面写了一个简单示例 :当服务启动后,调用远程一个WebServiceHello函数,并把返回的值写入到一个文件中。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.安装程序

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


 

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


 

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

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

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值