当前位置:编程学习 > C#/ASP.NET >>

windows service 进程正被使用无法复制该文件


     我现在在做一个windows service 实现一个合同的指定天数提醒,这个合同在一个用asp.net和c#实现的web网站中。我是通过在windows服务中用一个timer3秒钟去读数据库中设定的时间,如果设定的时间和我现在的时间相等,发通知提醒合同即将到期。
service1.cs中的代码如下:
  运行时就是出现如下的错误:无法将文件“obj\x86\Debug\KYPT.exe”复制到“bin\Debug\KYPT.exe”。文件“bin\Debug\KYPT.exe”正由另一进程使用,因此该进程无法访问此文件
  我在计算机管理-》服务中把这个服务关掉。提示我需要开启服务。我要是开启服务就会出现上面的错误。但是我的服务时必须要开启的要不让不会定时从数据库中读数据啊  哪位大侠给解决一下!万分感谢!
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using Model;
using service;
using System.Data.SqlClient;

namespace KYPT
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            timer1.Interval = 1000;
            timer1.Enabled = true;
        }

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

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            timer1.Enabled = false;
            InformSrv bs = new InformSrv();
            List<InformInfo> listcontact = bs.getremindertime();
            listcontact.ForEach(c =>
            {
                DateTime dt1 = DateTime.Now;
                DateTime dt2 = Convert.ToDateTime(c.ProRemindTime);
                TimeSpan span = dt1 - dt2;
                BaseSrv<InformInfo> inform = new BaseSrv<InformInfo>();
                if (span.TotalSeconds == 0)
                {
                    InformInfo inf = new InformInfo();
                    inf.PTypeName = c.PTypeName;
                    inf.PType = c.PType;
                    inf.IsApply = 1;
                    inform.add(inf);

                }
            });
            timer1.Enabled = true;
        }
    }
}
--------------------编程问答-------------------- 运行时就是出现如下的错误
怎么会

应该是编译的时候报这个错。

你应该把服务关了,老的程序删了,再编译。 --------------------编程问答-------------------- 类似于合同到期这种一天只看一次的业务没必要3秒种就轮询一次吧?代价太大了。

根据我的项目实践,你这种业务没有必要单独起个windows服务,直接在IIS里开个线程就OK了。asp.net使用的bin是随时可以被替换的。其后果就是重启网站而已。 --------------------编程问答-------------------- 不是3秒就是打个比方 现实时间比这个要长很多 上面删除再编译我试了 还是相同的错误 愁死了 --------------------编程问答-------------------- 服务的启动方式不一样啊,必须先停止服务,才可以替換文件,然后再启动服务。
另外: timer1_Elapsed 的最后一句 timer1.Enabled = true 有问题,应去掉。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,