windows service 的创建 安装 调试 错误回发

关于如何快速创建一个windows服务

1、在vs中创建windows服务

                       

名称:你要写的服务名称

位置:创建服务所在的位置

点击确定

2、代码编写

 

 

3、添加安装程序

 

点击添加安装程序出现

 

分别右击设置属性

serviceInstallers1右击属性设置

 

serviceProcessInstallers1右击设置属性

 

这样简单的服务基本完成

4、开启服务

打开命令提示符

输入命令C:\Windows\Microsoft.NET\Framework64\v4.0.30319InstallUtil.exe 你创建的服务的详细路径\创建的服务名称.exe

如果输入的全部正确,会提示安装成功。

5、现在启动服务

开始》控制面板》管理工具》服务

 

 

打开的服务页面

 

找到你创建的服务(创建服务时候服务的名字)

             

   
   

这个就是你要打开的服务名称

   
   

 

我创建的服务名称为CQDX

右击服务名称》点击启动

会提示启动成功!

6、调试服务

首先启动要调试的服务》去vs中

 

找到你创建的服务

 

如果启动成功但是没找到你创建的服务选中显示所有用户进程》点击刷新

切记要在你要调试的代码中设置断点,并且要在设置的时间内快速的附加进程

这样就可以调试服务

附加:

在创建windows服务的时候遇到的问题

照片路径问题:虚拟路径找不到文件存储的位置,可能是我不知道存储到哪里了,可也能是在服务中虚拟路径不可用。现在实现的是绝对路径。

添加的时候遇到数据错误怎么处理(例如必填项为空,或者不存在相应批次等)

1、现在所写的服务是必填项必须存在如果比现象不存在,即数据错误服务会停止或者说一直循环错误数据,下面数据没办法执行。(解决办法:1.删除错误数据,或者给错误数据一个状态标记错误,让远程程序员修改成正确数据。)

2、现在如果远程数据重复就删除远程数据(有没有可能存在远程要修改一条信息,又重新录入一条数据,咱们这的数据库是不是烤炉更新操作)

3.照片存储路径问题

 7、错误回发(邮件格式)

#region 错误邮件发送        

/// <summary>        

///        

/// </summary>        

/// <param name="sendEmail">发送者邮箱</param>        

/// <param name="sendPasswodr">发送者密码</param>        

/// <param name="accept">接收者邮箱</param>        

/// <param name="project">主题</param>        

/// <param name="content">内容</param>        

public void sendEmail(string sendEmail, string sendPasswod, string accept, string project, string content)        

{          UserModel from = new UserModel(sendEmail);            

           from.password = sendPasswod;

            UserModel to = new UserModel(accept);

            MailModel mail = new MailModel(project, content, from);

            //List<Attachment> filelist = new List<Attachment>();            

////添加附件             

//if (FileList.Items.Count > 0)            

//{            

//    for (int i = 0; i < FileList.Items.Count; i++)            

//    {            

//        Attachment attachFile = new Attachment(FileList.Items[i].ToString());            

//        filelist.Add(attachFile);            

//    }            

//}

            //mail.AddAttach(filelist);//添加附件             

            MailHelper helper = new MailHelper(mail, to);            

           //启动一个线程发送邮件             

           Thread mythread = new Thread(new ThreadStart(helper.send));

            mythread.Start();

        }        

#endregion

要引入三个类

 public class MailHelper
    {
        SmtpClient smtpClient;
        //邮件实体类,包含用户名密码 
        MailModel mail;
        UserModel to;
        public MailHelper()
        {
        }
        public MailHelper(MailModel mail, UserModel t)
        {
            smtpClient = new SmtpClient();
            this.mail = mail;
            this.to = t;
        }
        public void send()
        {
            MailMessage msg = null;
            smtpClient.Credentials = new System.Net.NetworkCredential(mail.from.Send_Address.Address, mail.from.password);//设置发件人身份的票据   
            smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
            smtpClient.Host = "smtp." + mail.from.Send_Address.Host;
            try
            {
                msg = mail.GetMail();
                msg.To.Add(to.Send_Address.Address);
                smtpClient.Send(msg);
               // MessageBox.Show("发送成功");
            }
            catch (SmtpException err)
            {
                //如果错误原因是没有找到服务器,则尝试不加smtp.前缀的服务器 
                if (err.StatusCode == SmtpStatusCode.GeneralFailure)
                {
                    try
                    {
                        //有些邮件服务器不加smtp.前缀 
                        smtpClient.Host = null;
                        smtpClient.Send(mail.GetMail());
                    }
                    catch (SmtpException err1)
                    {
                       // MessageBox.Show(err1.Message, "发送失败");
                    }
                }
                else
                {
                   // MessageBox.Show(err.Message, "发送失败");
                }
            }
            finally
            {
                //及时释放占用的资源 
                msg.Dispose();
            }
        }
    }

2、

 public class MailModel     {        

//主题         

public string Subject { get; set; }        

public string SubjectEncoding { get; set; }

        //内容         

public string Body { get; set; }        

public string BodyEncoding { get; set; }        

//附件         

public List<Attachment> Attachments = new List<Attachment>();

 public MailMessage message;        

//发送人         

public UserModel from;

        public MailModel(string subject, string body, UserModel f)        

{            

message = new MailMessage();            

this.Subject = subject;            

this.Body = body;            

this.from = f;        

}        

//添加附件         

public void AddAttach(Attachment file)        

{            

Attachments.Add(file);        

}        

//添加一群附件         

public void AddAttach(List<Attachment> files)        

{            

foreach (Attachment item in files)            

{                

if (item != null)                    

this.Attachments.Add(item);            

}         }        

//返回邮件实体

          public MailMessage GetMail()        

{            

if (this.message != null)            

{                

message.Subject = this.Subject;                

message.SubjectEncoding = System.Text.Encoding.UTF8;                

message.Body = this.Body;                

message.BodyEncoding = System.Text.Encoding.UTF8;                

message.From = from.Send_Address;//设置发邮件人地址                 

foreach (Attachment item in Attachments)                

{                    

if (item != null)                        

this.message.Attachments.Add(item);

                }                

return message;            

}            

else                

return null;        

}    

}

 

3、

 public class UserModel
    {
        public string nickname { get; set; }
        public string password { get; set; }
        public MailAddress Send_Address { get; set; }
        public UserModel(string useraddr)
        {
            Send_Address = new MailAddress(useraddr);
        }
        public UserModel(string useraddr, string nickname)
        {
            this.nickname = nickname;
            Send_Address = new MailAddress(useraddr);
        }
    }

7、遇到错误停止服务

#region 停止服务

        public static void StopService(string serviceName)

        {

            try

            {

                ServiceController[] services = ServiceController.GetServices();

                foreach (ServiceController service in services)

                {

                    if (service.ServiceName == serviceName)

                    {

                        service.Stop();

                        service.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 30));

                    }

                }

            }

            catch { }

        }

        #endregion

posted on 2015-07-27 16:04  一切都在前方  阅读(280)  评论(0)    收藏  举报