zoukankan      html  css  js  c++  java
  • (25)C#windows服务

    http://www.cnblogs.com/knowledgesea/p/3616127.html

    http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html

     新建项目-Windows服务

     点击确认

    Service1.cs默认代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.ServiceProcess;
    using System.Text;
    
    namespace WindowsService1
    {
        public partial class Service1 : ServiceBase
        {
            public Service1()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
            }
    
            protected override void OnStop()
            {
            }
        }
    }

    Program.cs 默认代码

    using System;
    using System.Collections.Generic;
    using System.ServiceProcess;
    using System.Text;
    
    namespace WindowsService1
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            static void Main()
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
        }
    }

     生成下图

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

    会多出一个

    双击文件后右边视图产生两个控件

    ---------------------------------------------------------------------------  

    serviceInstaller1的属性

    Name:表示控件的名称

     Description:是安装后描述的名字

    DisplayName:显示的名称

    StartType

    表示服务的启动方式。默认为 Manual,指定在重新启动后服务将不会自动启动。Automatic:自动启动。Disabled:禁用

    设置 StartType 来指定该服务是在重新启动后自动启动,还是必须由用户手动启动。服务还可以被禁用,指定在启用以前不能被手动或以编程方式启动。

    ServiceName:指示系统用于标识此服务的名称。此属性必须与要安装的服务的 ServiceBase.ServiceName 相同

    GenerateMemberModifiers

    GenerateMember 属性指定 Windows 窗体设计器何时为组件生成成员变量。Modifiers 属性是指定给该成员变量的访问修饰符。如果 GenerateMember 属性的值为 false,则 Modifiers 属性没有效果。

     

    ServiceInstaller 属性详见

    https://msdn.microsoft.com/zh-cn/library/system.serviceprocess.serviceinstaller_properties(v=vs.80).aspx

    serviceProcessInstaller1的属性

     Account:获取或设置运行该服务应用程序时所使用的帐户类型

    LocalService:充当本地计算机上非特权用户的帐户,该帐户将匿名凭据提供给所有远程服务器。 

    NetworkService:提供广泛的本地特权的帐户,该帐户将计算机的凭据提供给所有远程服务器。 

    LocalSystem:服务控制管理员使用的帐户,它具有本地计算机上的许多权限并作为网络上的计算机。

    User:由网络上特定的用户定义的帐户。如果为 ServiceProcessInstaller.Account 成员指定 User,则会使系统在安装服务时提示输入有效的用户名和密码,除非您为 ServiceProcessInstaller 实例的 Username 和 Password 这两个属性设置值。

    我选的LocalSystem

     

    ServiceProcessInstaller属性详见

    https://msdn.microsoft.com/zh-cn/library/system.serviceprocess.serviceprocessinstaller_properties(v=vs.80).aspx

     

     

    安装卸载windows服务

    程序开发完成后编译,会在bin文件夹下找到对应工程名的exe文件

    双击运行弹出如下提示:

    意思就是不能直接安装此文件

    解决办法:

    假设把全部文件复制到E盘的WinService文件夹下 

    用微软的小工具来进行安装,安装.net后一般他会藏在C:WindowsMicrosoft.NETFrameworkv2.0.50727目录下

    InstallUtil.exe工具就是用来安装卸载用的,注意使用对应版本的installutil.exe工具

    方法一 通过Dos命令安装系统服务

    安装

    开始 运行输入 cmd 进入dos窗口

    进入目录

    cd C:WINDOWSMicrosoft.NETFrameworkv2.0.50727

    安装指令

    InstallUtil.exe   E:WinServiceiMES.WinService.M2R.exe

    卸载指令

    InstallUtil.exe  -U  E:WinServiceiMES.WinService.M2R.exe

    或者在cmd里直接输入  sc delete 服务名

    ***注意以上操作必须要已管理员身份运行


    方法二、批处理文件

     

     把方法一的安装指令和卸载指令各自复制的text文件,后面再加pause防止运行后窗口立即消失。

    在把后缀名改成cmd,放在和要执行的文件在同一个目录下

    同样要以右键管理员身份运行(貌似运行一次以后就可以双击了)

     

     

    安装后点击启动出现提示启动有停止的错误

     我出现这个的错误原因是。应该用iMES.WinService.M2R工程bin的下文件安装,由于 iMES.WinService.Thread的工程下引用了iMES.WinService.M2R这个工程下也生成了对应的程序。手误选到了Thread的工程下

    如果更改winService配置文件

    重新编译解决方案后,会生成.exe.config 后缀的文件,更改里面的数据后重启winService即可

     

     2019年7月重构了程序,从net2.0升级到4.6后,再安装时报这个错,原因是InstallUtil.exe用的还是2.0的

     找到 C:WindowsMicrosoft.NETFrameworkv4.0.30319 

    如果:

     不知道为什么再次执行就成功了??

    如果win服务启动后,立即关闭

    我改成了 C:WindowsMicrosoft.NETFramework64v4.0.30319 下的工具,并且程序编译程64位,属性中设置的之前首选平台32位

    遇到此错误,用管理员运行

    遇到此错误

    部署win服务时,经常会出现类似下面的错误,错误模块名称: KERNELBASE.dll。

    上次报这个错误是半个月前,由于再次出现了此错误,所以需要重视了,初步怀疑是应用程序无限循环读取config配置文件发生的错误。我部署了n套程序,只有这一套不小心把读取配置文件放到了while的死循环里

    配置文件是付给的静态变量,所有放里放外,对程序执行上没有影响,可能是短时间内无限读取文件累积到一定程度引发的此错误。修改一下,继续观察~

  • 相关阅读:
    C++学习之:括号匹配与栈的使用
    mooc网站以及学习资料收集
    android 获取字符串的方法
    androidStudio中如何加载字体资源?
    BluetoothGatt API
    Android 反编译工具简介
    BluetoothAdapter.LeScanCallback 参考文档
    openCV1
    Android客户端向服务器端发送数据的流程(1)
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/6160816.html
Copyright © 2011-2022 走看看