c# windows服务程序

windows 窗体应用程序是在用户登录后才运行的。特别是对于服务器这种多用户系统,尽管设置了开机自启动,但是在程序运行过程中,运行改程序的用户被注销了,程序就关掉了。除非有人重新登录或服务器重启。

如果想要程序一直运行在服务器上,最好是把程序写成windows服务程序。这样程序会随着系统的自动启动而启动,自动关闭而关闭,不需要用户直接登录,直接开机就可以启动。

注意windows服务程序是没有界面的,所以要定义日志文件保存运行过程中出现的问题。如果用到了定时器也要是系统的定时器。

下面示例如何建windows服务程序,以VS2013为例:

1. 建立windows服务

看看VS都生成了什么

2. 重命名Service1,这个名称是以后运行的windows服务的名称,这里改成SQLServerSyncService.cs

打开SQLServerSyncService.cs,添加后台代码

namespace SQLServerSyncService
{
    public partial class SQLServerSyncService : ServiceBase
    {
        private System.Timers.Timer timer1;//系统定时器
        public int No = 0;

        public SQLServerSyncService()
        {
            InitializeComponent();
        }

        protected void timer1_Tick(object source, ElapsedEventArgs e)
        {
            timer1.Stop();
            int timek = 0;
            OperatorDatatable test = new OperatorDatatable();

            if (test.sw != null)
            {
                test.sw.WriteLine("第" + (No + 1).ToString() + "次同步数据库错误信息:");
            }
            DateTime time1 = DateTime.Now;
            try
            {
                if (test.ReadDataFromDatabase())
                {
                    test.WriteDataToDatabase();
                    bool flag = false;
                    do
                    {
                        flag = test.DeleteSyncData();
                        Thread.Sleep(1000);
                    } while (!flag);
                }
            }
            finally
            {
                test.DisposeAllResource();
                test.CloseServer();
                test.SaveLogFile();
                DateTime time2 = DateTime.Now;
                timek = (time2 - time1).Hours * 3600 + (time2 - time1).Minutes * 60 + (time2 - time1).Seconds;
            }
            No++;
            timer1.Start();
        }

        protected override void OnStart(string[] args)
        {
            timer1 = new System.Timers.Timer();
            timer1.Elapsed += new ElapsedEventHandler(timer1_Tick);
            string timestr = XMLConfig.GetValue("appSettings", "add", "SyncInterval", "value");//同步时间间隔
            timer1.Interval = (int)(float.Parse(timestr) * 60 * 1000);
            timer1.AutoReset = true;//设置是执行一次(false)还是一直执行(true)
            timer1.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
        }

        protected override void OnContinue()
        {//服务恢复时
            timer1.Enabled = true;
        }

        protected override void OnStop()
        {
            timer1.Enabled = false;
        }
    }
}

3.添加安装程序,主要是为了设置windows服务程序,也可以自己写代码实现,但是何必呢。

右键

会出现两个组件

右键serviceInsraller1,选择属性,将ServiceName的值改为SQLServerSyncService。(此名称是以后服务的名称)

右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。

生成解决方案,最后把生成的exe程序拷贝到方便记的目录。次目录是后续安装生成的服务的路径。

4.安装该服务程序。 打开VS开发人员命令提示工具,注意要以管理员的身份运行,否则会报错:Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security

输入命令InstallUtil.exe C:\Server\SQLServerSyncService.exe, 回车

5.服务程序安装好了,启动就好了

在上面的VS开发人员调试工具或者DOC下面输入services.msc,回车弹出服务对话框,找到我们的服务程序,启动就可以了



时间: 2024-10-24 13:15:54

c# windows服务程序的相关文章

C# .NET 0命令行安装Windows服务程序

设计原则:万物皆对象 背景:在我的项目中,即需要与硬件通过Socket连接通讯,又需要给App提供Wcf服务操作接口,虽然都完成了,但是却是一个控制台(虽然我很喜欢控制台,因为它简单易用),把它放到服务器运行,总有一个黑乎乎的窗口,总感觉不雅(原谅我的强迫症).于是各种百度谷歌如何创建运行WIndows服务程序,就像SqlServer数据那样在后台默默运行奉献就可以了. 但是,很多都是那么的麻烦,需要批处理什么的,而我这个人向来喜欢简洁,于是便设计了这么个Windows服务辅助类,没错,就是0命

c# 编写Windows服务程序

1.Windows服务程序 在没有涉及到这个问题的时候我也不太明白他里面的深刻奥义.后来知道了这是一个能够长时间运行的应用程序,这个服务只要配置自动启动那么在windows开机启动的时候自动运行起,他没有界面.在Windows机器上能够通过管理工具/服务进行系统运行的所有服务的查看和管理.系统的大部分软件和硬件的运行状态监控都是通过Windows服务进行监控的,通过服务不断轮训去请求BIOS提供的端口收集BIOS收集的硬件的运行状态.可能他们又通过不同的媒介进行展示如windows计数器进行性能

C# 编写Windows Service(windows服务程序)

Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式.这些启动方式包括了自动启动和手动启动两种.对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了.只要你将相应的Windows服务程序注册到服务控制管理器(Service Control Manager)中,并将其启动

C语言编写Windows服务程序

原文:C语言编写Windows服务程序 #include <Windows.h> #include <stdio.h> #define SLEEP_TIME 5000 // 间隔时间 #define LOGFILE "C:\\memstatus.txt" // 信息输出文件 SERVICE_STATUS ServiceStatus; // 服务状态 SERVICE_STATUS_HANDLE hStatus; // 服务状态句柄 void ServiceMain

关于开发Windows服务程序容易搞混的地方!

在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的): 2.DisplayName:表示友好名称,可以理解为服务名的别名: 3.ServiceName:表示服务名,此为真正的服务名,与DisplayName是有区别的哦,是系统识别的依据: 这三个属性在WIN7及更高版本操作系统中,同属性但表示却不同: 本地服务列表中:(即:services.msc)

C# 创建和安装Windows服务程序

1.新建一个windows服务程序. 2.点击这个服务类,从工具箱中添加一个Timer控件,右键这个Timer控件 命名为 timerOrderDeductionDetailJob,Enable设为True. 3.右键这个服务类,在OnStart方法中设置Timer控件的启动间隔时间. protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务. this.timerOrderDeductionDetailJob.

C#Windows服务程序安装常见问题解决方法

C#Windows服务程序安装是如何的呢?让我们开始吧: C#Windows服务程序安装1. 在服务程序的是设计窗体中,点击右键“添加安装程序”,添加服务安装程序.否则,安装时会出现如下 错误: 正在安装程序集“C:\Program\xx.exe”. 受影响的参数是: logtoconsole = assemblypath = C:\Program\xx\xx.exe logfile = C:\Program\xx.InstallLog 没有 RunInstallerAttribute.Yes

C# 编写Windows Service(windows服务程序)【转载】

[转]http://www.cnblogs.com/bluestorm/p/3510398.html Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式.这些启动方式包括了自动启动和手动启动两种.对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了.只要你将相应的Wi

C#编写Windows服务程序图文教程(转载)

Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Windows Service写很深入. 本文介绍了如何用C#创建.安装.启动.监控.卸载简单的Windows Service 的内容步骤和注意事项. 一.创建一个Windows Service 1)创建Windows Service项目 2)对Service重命名 将Service1重命名为你服务名称,这里我