关于如何快速创建一个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

windows service 的创建 安装 调试 错误回发的更多相关文章

  1. C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. 【转】C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  3. C#Windows Service服务程序的安装/卸载、启动/停止 桌面客户端管理程序设计

    C#Windows Service服务程序的安装/卸载.启动/停止 桌面客户端管理程序设计 关于Windows Service程序的安装与卸载如果每次使用命令行操作,那简直要奔溃了,太麻烦而且还容易出 ...

  4. windows service 2008 R2 安装net4.6环境失败,windows service 2008 R2 升级sp1问题

    一.错误 1.因为我的程序是以vs2017开发的,在windows service 2008 R2  IIS部署项目文件报出错误,因此要安装net4.6的环境. 2.windows service 2 ...

  5. windows安全更新程序(KB4093112) 安装失败 错误0x80070011

    解决办法:win + R → 输入regedi 将默认安装路径改回C盘的program files

  6. windows下源码安装调试postgresql

    环境:windows 10 postgresql版本:postgresql-9.6.5 使用工具:vs2017社区版 辅助工具:perl.diff.flex.bison 相关工具下载地址: perl下 ...

  7. 在Windows Service 2012上安装IIS 8.0 IIS 6

    我的目的是在服务器上安装IIS6 ,但是受到这边文章的启发和按照他的步骤,看到了"IIS 6管理兼容性",我的问题就决解了,我这里是因为要安装vss 2005 和u8等比较早期的软 ...

  8. Xamarin.Forms-VS安装调试错误

    编译android项目报错检查android sdk 是否安装成功后发现报错如下图:     点击->工具->android sdk manager 报错 错误原因没有找到 android ...

  9. Window服务程序(windows service application)如何调试

    服务程序不能通过常规的按F5或F11的方式来进行调试和运行,也无法立即运行一个服务或逐步调试它的代码. 因此,你必须安装并启动你的服务,然后附属(attach)一个Debugger到这个服务的进程上.

随机推荐

  1. Microsoft Office 2010 Pro VOL简体中文正式版

    网友们期待的Microsoft Office Professional Plus 2010 VOL简体中文正式版.所谓的“VOL”,即是Volume Licensing for Organizatio ...

  2. ViewTreeObserver简介

    Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Object ...

  3. fragment、ListFragment使用ListView及自定义Listview等初始化操作

    fragment.ListFragment使用ListView及自定义Listview等初始化操作 1.先说一下 从官方api中说fragment碎片中使用Listview有专门的 ListView碎 ...

  4. 强制杀oracle进程

    强制杀oracle进程: for p in `ps -ef| grep ora| awk '{print $2}'`;do kill -9 $p;done 修改 oracle xe 默认中文字符集成为 ...

  5. hdu 4598 Difference(奇圈判定+差分约束)

    这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的... 题意要求(1) |ai| < T for all i   (2) (vi, vj) in E <=& ...

  6. AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface

    我建立了两个project.一个是activity 的 ,一个是service 的. 在进行两个project通信时,应该有以下几点注意: 1.在activity project中引入service ...

  7. c# Linq及Lamda表达式应用经验之 GroupBy 分组

    示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.Da ...

  8. java之观察者模式

    import java.util.Observable; import java.util.Observer; class House extends Observable {     private ...

  9. bzoj 1085: [SCOI2005]骑士精神 IDA*

    题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...

  10. [C++]Standing Ovation——Google Code Jam 2015 Qualification Round

    Problem It’s opening night at the opera, and your friend is the prima donna (the lead female singer) ...