C# window服务 开发、安装、启动、卸载、适应平台、自动循环操作数据库sqlserver完整版!

vs自带的命令工具,并且,如果win7或者win8,一定要是管理员身份运行

release 为window服务生成exe文件的目录,cd到这个目录,执行InstallUtil.exe service.exe

如果exe设置为自启动,这时在系统的服务应该就能看到了。

卸载服务:cmd中运行 InstallUtil.exe /u service.exe

 

很多人都说了windows服务的简单实用,关键代码都是注释,填写你的代码,

其实这段代码如果操作数据库的话,不知道能不能调用第三方的dll(反复试了好多次,调用第三方dll一直没成功),

反正我是手写的方法,终于实现了定时插入数据了。

以下是相对主程序(Service1.cs)的代码:

 

 protected override void OnStart(string[] args)
        {
            WriteLog("Service Started at");
            try
            {
                /*Timer构造函数参数说明:
                Callback:一个 TimerCallback 委托,表示要执行的方法。
                State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
                dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
                Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。*/
                timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 10000, 1000 * 3600 * 2);
                
            }
            catch (Exception ex)
            {
                WriteLog(ex.ToString());
            }
            finally
            {

            }
        }

记得申明连接字符串,这是SQLServer的:

 

 

string strconn = "Data Source=127.0.0.1;Initial Catalog=databasename;Persist Security Info=True;User ID=sa;Password=111111";

 

下边这是MYSQL的:

 

public static string connectionString = "server=localhost;user id=root;password=qwer1234;database=shdc;persist security info=true;charset=utf8";

 

 

 

 

 

下边就是timerCall方法:

 

 private void timerCall(object obj)
        {
            try
            {
                   //这里做自己的处理
                   
                   
             }
            catch (Exception exp)
            {
                WriteLog(exp.ToString());
            }
            finally
            {

            }
            
        }

 

 private int InsertOil(string id, string type, string price, string date, string floatprice, string ver)
        {
           
        }

 

 

下边这是个好东西,鉴于windows服务不好调试(有人说附加到进程,我一直没成功),只好输出文字作为调试的方法了:

 

/// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="content"></param>
        private void WriteLog(string content)
        {
            FileStream fs = new FileStream(@"c:\MessageService.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            StringBuilder sb = new StringBuilder();
            sb.Append("msg:: ");
            sb.Append(content);
            sb.Append(" " + DateTime.Now.ToString() + "\n");
            m_streamWriter.WriteLine(sb.ToString());
            m_streamWriter.Flush();
            m_streamWriter.Close();
            fs.Close();
        }

 

最后就是服务的自启动,

 

双击service,打开设计视图,右键--添加安装程序:

双击ProjectInstaller.cs,能两个控件,分别设置一下属性,

下边就是写安装事件:

这个方法写在ProjectInstaller.cs中,双击ProjectInstaller.cs--右键--查看代码,具体如图:

 

 public ProjectInstaller()
        {
            InitializeComponent();//自带方法
            this.Committed += new InstallEventHandler(ProjectInstaller_Committed);   
        }
        private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
        {
            //参数(<span style="font-family: Arial, Helvetica, sans-serif;">AutoGetOil</span>)为服务的名字
            System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("AutoGetOil");
            controller.Start();
        }   


最后的最后,生成exe,要注意目标服务器的framework版本号及操作系统平台(32位还是64位),

 

选择版本号:右键项目---属性--应用程序---目标框架,选择就行了,看下图:

 

选择平台:工具栏(生成)--配置管理器--平台,选择合适的就行,见下图:

 

tips:关于生成及卸载

方法有二:

一:使用vs自带的【本机工具命令提示】,cd到你生成的exe文件目录,运行installutil.exe  d:\autogetoil.exe即可;

二:Framework自带的installutil.exe工具,cd到C:\Windows\Microsoft.NET\Framework\v4.0.30319,运行installutil.exe  d:\autogetoil.exe即可;

 

服务运行过程中不要修改任何代码,更不要生成,如果服务需要修改,先从服务管理器中停止此服务,再运行installutil.exe /u d:\autogetoil.exe,这时再修改代码,如果没有卸载服务就修改代码,可能会导致卸载不干净或者不能完整安装。

 

 


 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值