【Windows Service】Windows Service在Visual Studio中安装、调试

目录结构:

contents structure [-]

  1. 创建Windows服务
  2. 配置
  3. 安装Windows服务
  4. 在Visual Studio中调试
  5. 常见问题

最近写了一个TCP连接的程序,由于这种通信协议不同于HTTP协议,因此还不能部署到网站上面,于是就用到了Window服务。接下面笔者介绍一下在Visual Studio中如何安装、调试Windows服务。笔者的Visual studio版本为2012,window版本为win7。

1.创建Windows服务

这时候点击“启动”按钮,会提示我们启动失败。

这因为Windows服务不能像普通窗口程序那样启动,接下来就安装服务。

2.配置

在Service1.cs上右键,选择“查看设计器”,

然后再在上面的空白处,右键选择“添加安装程序”,

这时候,Visual Studio就会自动为我们生成一个ProjectInstaller.cs文件,接下来,右键ProjectInstaller.cs,选择“查看设计器”,就可以看到如下的界面,

可以看到两个控件,点击右击第一个控件,打开属性设计器,将其中的Account设置为LocalSystem(本地服务),

接下来,右击上面的第二个控件,打开属性界面,设置ServiceName,和将其中的StratType设置为Automatic,

接下来,为了测试需要,笔者写一些测试代码:

   public partial class Service1 : ServiceBase
    {
        private readonly Timer _MyTimer;
        public Service1()
        {
            InitializeComponent();
            _MyTimer = new Timer(10*1000); //10秒钟启动一次
            _MyTimer.Elapsed += _MyTimerElapsed;
        }

        protected override void OnStart(string[] args)
        {
            _MyTimer.Start();
        }

        protected override void OnStop()
        {
            _MyTimer.Stop();
        }
        internal void _MyTimerElapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                //添加往C盘新建一个文本文件的程序
                try
                {

                    string logFileName = @"C:\\log.txt"; // 文件路径

                    FileInfo fileinfo = new FileInfo(logFileName);

                    using (FileStream fs = fileinfo.OpenWrite())
                    {

                        StreamWriter sw = new StreamWriter(fs);

                        sw.WriteLine("=====================================");

                        sw.Write("添加日期为:" + DateTime.Now.ToString() + "\r\n");

                        sw.WriteLine("=====================================");

                        sw.Flush();

                        sw.Close();
                    }

                }

                catch (Exception ex)
                {

                    //  ex.ToString();

                }

            }
            catch (Exception ex)
            { }
        }
    }

上面的代码,笔者写到Service1.cs类中,该类是Visual Sudio在启动的时候,自动为我们创建好的类文件。观察这个类文件,可以发现,该类继承了ServiceBase,ServiceBase是服务类的基类,也就是说想要创建服务,必需继承这个类,ServiceBase中有两个方法比较常用,分别为OnStart()和OnStop(),顾名思义,OnStart方法在服务启动的时候调用,OnStop方法在服务停止的时候调用。

在测试代码写好后,我们就可以点击 生成》生成解决方案,如果后需修改了,那么需要点击重新生成解决方案:

在解决方案生成好后,接下来就是安装Windows服务了。

3.安装Windows服务

找到上面项目中 bin\debug 目录下生成的exe文件,这里笔者的位置为  D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

然后在打开cmd,进入到.net对应版本的目录中,这里笔者的版本为4.0,可以通过查看 C:\Windows\Microsoft.NET\Framework ,目录下的版本信息,一般情况下,最高版本为当前版本。

在CMD中进入到对应的版本中,

然后通过Installer.exe进行安装,安装的时候,需要指定生成了服务exe文件的位置,比如:

InstallUtil.exe D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

如果想要卸载,只需要在InstallUtil.exe后面加上/u就可以了,比如:

InstallUtil.exe /u D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

服务安装好后,就可以启动服务了。

按下“Win+R”打开运行界面框,然后输入services.msc,进入到服务界面,找到自己对应的服务,启动。

在上面的OnStart方法中,我们在C盘下面打印了日志,接下来,打开上面的C盘下面的log.txt,

可以看到日志已经成功打印了。

到这里为止,一个Window Server的服务程序,就完成了,接下来,笔者介绍如何在Visual Studio中调试Windows服务程序。

4.在Visual Studio中调试

Windows服务的调试和普通程序也不一样,

首先在代码设置断点,在上面的_MyTimerElapsed方法中添加Debugger.Launch()方法即可。

这里可以重新生成一下解决方案,然后选择  调试》附加到进程

如果没有,刷新一下就出来了。

接下来,重启一下服务,就可以正常调试了。

5.常见问题

如果安装windows服务的时候,出现报错securiy Exception,那么应该以管理员的身份启动窗口。

如果安装Windows服务的时候,出现System.ComponentModel.Win32Exception,那么是因为在Visual Studio中设置serviceProcessInstaller1时候,没有把Account设置为LcoalSystem.

时间: 2024-10-26 18:59:32

【Windows Service】Windows Service在Visual Studio中安装、调试的相关文章

Visual Studio中安装viemu后,vim vax 快捷键大全

高效率移动 在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面VIM就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但VIM的强大之处在于他的命令行模式!你会发现,在你越来越了解VIM之后,你就会花越来越少的时间使用插入模式了. 使用 h,j,k,l 使用VIM高效率编辑的第一步,就是放弃使用箭头键.使用VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间.当你在命令模式时,你可以用h,j,k,l来分别实现左,下,

android for vs (一)visual studio 中安装 android 开发环境

一.安装 vs 2010 vs 2010 可以到 Microsoft 的官网去下载,vs2015 版本居说也可以进行 android 开发.但目前只有预览版,且安装 xamarin 成功后无法集成至 vs2015,所以选择了 vs2010 二.安装 jdk.android sdk.xamarin 这方面的文章也很多,xamarin 是在线下载安装配置包的模式,但要连接至国外站点,基本上是安装失败的.可以参考下面文章进行手动安装和破解 http://www.cnblogs.com/zjoch/p/

在visual studio中可以调试运行PYTHON,强大,具体做法就是下载一个PTVS(Python tool for visual studio)

最近编写chromium代码,发现内部用了python作为工具做开发,于是得知有如此插件 安装PTVS后,vs调试python和C++代码一样,可以设置命令参数,调试时候,可以看变量值等等... 而且F5,F10,F11...快捷键保持 具体http://pytools.codeplex.com/

在Visual Studio中调试C/C++ mexFunction文件

C/C++ MEX文件:也称为MEX源码文件,就是就是普通的fortran/C/C++文件,只是其中定义了一个mexFunction的接口,用于和MATLAB通讯,使用mex()函数可以将其编译为MATLAB MEX文件.至于如何书写mex源码文件,您可以看下MATLAB的帮助文档! MATLAB MEX文件:也称为MEX二进制文件,是一种动态链接库,可以在MATLAB像普通函数一样直接调用或运行,windows平台下的扩展名为mexw32或者mexw64.使用mex()可以将MEX源码文件编译

Visual Studio 中的 .NET Framework 类库

Visual Studio 中的 .NET Framework 类库 .NET Framework 类库由命名空间组成.每个命名空间都包含可在程序中使用的类型:类.结构.枚举.委托和接口. 当您在 Visual Studio 中创建 Visual Basic 或 Visual C# 项目时,已经引用了最常用的基类 DLL(程序集).但是,如果您需要使用尚未引用的 DLL 中的类型,则需向此 DLL 添加引用.有关更多信息,请参见添加和移除引用. 以下主题提供了下列信息: 每个功能区域的最重要命名

在Visual Studio中入门F#

写在前面的话 个人由某方面的兴趣需要学习 F#,网络上有关F#的中文资料很少,微软官方有很不错的文档,但是很可惜的是绝大部分的章节都是英文的.个人是一位.NET爱好者,想自己将 F# 的官方文档翻译出来,算是为了自己喜欢的 .NET 做一些贡献. 原文链接 Getting started with F# in Visual Studio 在这篇文章中 安装 F# 创建一个控制台应用程序 编写您的代码 运行您的代码 使用 F# Interactive 在 Visual Studio IDE 中支持

[转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是微软自己的一个开源社区,里面聚集了很多开源的项目,那么我们如何才能把自己的开源项目放到这上面呢? 在继续阅读本文前,请确定您已经在 Visual Studio 中安装了 Git 相关的扩展程序,并且大

在Visual Studio 中调试 Javascript

在上一篇文章中,我们介绍了如何在IE中调试Javascript代码,这一篇内容主要介绍在Visual Studio中调试Javascript. Javascript的调试分为主动调试和被动调试,主动调试指的是开发人员在代码中启动调试,并添加断点来监视代码的执行,而被动调试指的是在代码中出现错误以后,浏览器自动的进入调试状态,开发人员可以进行代码的调试工作. IE 浏览器默认没有开启被动调试,需要我们开启被动调试的功能,在Internet 选项中: 取消这两项的勾选,这样就可以在代码出现错误的时候

对 Visual Studio 中的Resharper禁用对某种文件的检测

原因:在Visual Studio中安装Reshaper后,就会对各种文件进行代码检测,但是因为Reshaper更新的速度不是很及时,所以有时会对Visual Studio中某些新功能误断,导致Coding时各种红哗哗的错误 例如: 因为Reshpaer对Razor中inject标识的误判,所以各种提示错误,这时可以想到的就是单独对cshtml关闭Reshaper 具体操作如下 菜单>Reshaper>Options… 然后展开Code Inspection 在Elements to skip