VS2013创建Windows服务与调试服务

摘要:
编写安装和卸载脚本,并将它们放在bin/debug或bin/Release文件夹中。实际上,该脚本主要通过installutil安装和卸载服务。exe,这里很少涉及批处理命令。

1、创建Windows服务

VS2013创建Windows服务与调试服务第1张

VS2013创建Windows服务与调试服务第2张

VS2013创建Windows服务与调试服务第3张

说明:

  

 a)Description 服务描述,直接显示到Windows服务列表中的描述;

  b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;

  c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识。

VS2013创建Windows服务与调试服务第4张

单击“serviceProcessInstaller1”,在其属性窗口中设置Account帐号方式,建议为LocalService(当然也可以Account属性改为 LocalSystem,这样,不论是以哪个用户登录的系统,服务总会启动)。

编写安装和卸载脚本,并将放在bin/debug或bin/Release文件夹下。

安装脚本

%SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe %~dp0exe程序的名称.exe
Net Start 服务名称
sc config 服务名称 start= auto
pause

这里注意,在exe程序的名称前面有 %~dp0 这是代表当前位置

服务名称 对应 上面我们创建服务时ServerName的名称

卸载脚本

%SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe /u %~dp0exe程序的名称.exe
pause

同时还要注意一下,本人用的.NET4.0的版本,所以Microsoft.NETFrameworkv4.0.30319installutil.exe 这一段要根据你机器安装.NET的版本来定。

其实脚本主要是通过installutil.exe 来进行安装和卸载服务的,同时此处涉及的批处理命令不多。

2、调试windows服务

在项目中不用启动windows服务项目,而是直接附加进程来进行调试。

VS2013创建Windows服务与调试服务第5张

VS2013创建Windows服务与调试服务第6张

在可用进程中,查找到你刚才通过脚本安装的服务就可以了。 

 再发一个写入服务代码的Demo

public partial class MMSServer : ServiceBase
    {
        private Timer time = new Timer();
        public MMSServer()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
#if DEBUG
            if (!Debugger.IsAttached)
                Debugger.Launch();
            Debugger.Break();
#endif
            WriteLog("服务启动,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
");
            time.Elapsed += new ElapsedEventHandler(MethodEvent);
            time.Interval = 3 * 1000;
            time.Start();
        }

        protected override void OnPause()
        {
#if DEBUG
            if (!Debugger.IsAttached)
                Debugger.Launch();
            Debugger.Break();
#endif
            WriteLog("服务暂停,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
");
            base.OnPause();
        }
        protected override void OnContinue()
        {
#if DEBUG
            if (!Debugger.IsAttached)
                Debugger.Launch();
            Debugger.Break();
#endif
            WriteLog("服务恢复,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
");
            base.OnContinue();
        }

        protected override void OnShutdown()
        {
            WriteLog("计算机关闭,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
");
            base.OnShutdown();
        }

        private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            time.Enabled = false;
            string result = string.Empty;
            try
            {
                //.........
                result = "执行成功,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
";
            }
            catch (Exception ex)
            {
                result = "执行失败,原因:" + ex.Message + "
";
            }
            finally
            {
                WriteLog(result);
                time.Enabled = true;
            }
        }
        protected override void OnStop()
        {
#if DEBUG
            if (!Debugger.IsAttached)
                Debugger.Launch();
            Debugger.Break();
#endif
            WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
");
        }
        /// <summary>
        /// 日志记录
        /// </summary>
        /// <param name="logInfo"></param>
        private void WriteLog(string logInfo)
        {
            try
            {
                string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\Logs";
                if (!Directory.Exists(logDirectory))
                {
                    Directory.CreateDirectory(logDirectory);
                }
                string filePath = logDirectory + "\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                File.AppendAllText(filePath, logInfo);
            }
            catch
            {

            }
        }
    }

免责声明:文章转载自《VS2013创建Windows服务与调试服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Epson爱普生墨仓式打印复印机L4156电脑端无线wifi连接安装记录FFM下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VS调试问题整理 :无法在Web服务器上启动调试。您不具备调试此应用程序的权限...

ASP.NET调试问题整理   问题祥述:    调试asp.net项目时出现如下的问题:   "无法在web服务器上启动调试.你不具备调试此应用程序的权限,此项目的URL位于Intenet区域..."      出现这个错误的原因不详,但可能是因为安装了IE7.0,在VS2003.net中来调试C#写的ASP.net程序,启动时会出现这个错误,不...

一起谈.NET技术,给大家分享两款正在使用的reflector插件 狼人:

  推荐两款神器:Deblector和reflexil   Deblector   它的名字是Debug 和 reflector 两个单词的结合。就是用来调试的。 简单的说,它可以像ide一样启动调试进程,或者Attach到一个运行中的进程,并调试他们,设置断点,单步运行,查看变量等等。 它不需要pdb文件,也不会像reflector pro的调试插件一样...

Debug与Release版本的区别

  Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。    Debug版本包括调试...

使用sublimeserver启动本地服务器进行调试

最近在做前后端分离的项目,访问后台接口的时候会产生跨域问题,修改了相关配置解决了跨域问题,但是配置中只对开发环境进行了设置,没有设置生产环境,为了验证生产环境确实无法访问后台接口遂npm run build之后把index.html页面通过本地服务器启动一下,总之说了这么多,总结起来也就一句话,我想要弄一个本地服务器... 之前使用过sublime的本地服...

Linux程序调试GDB——数据查看

查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的。这个一般是通过查看调用栈信息来看的。在gdb中,查看调用栈的命令是backtrace,可以简写为bt。 (gdb) bt#0 pop () at stack.c:10#1 0x080484a6 in main () at main.c:12 也可以通过info stack命令实现类似的功能...

LLDB调试基本使用

  在平时开发中,我们可能需要调试某些东西,比如查看给服务器发请求时传过去的参数,如果不适用LLDB的话我们用的最多的就是通过NSLog方式去打印,但现在我们可以精简这个步骤,那就是使用LLDB调试命令.   Xcode从4.0开始编译器开始改用LLVM,相应的调试器也从gdb改为LLDB。而从 Xcode5.0开始所有工程也被自动设置为使用LLDB。  ...