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

时间:2022-09-20 14:11:42

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

1、在vs中创建windows服务

名称:你要写的服务名称

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

点击确定

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

2、代码编写

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

3、添加安装程序

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

点击添加安装程序出现

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

分别右击设置属性

serviceInstallers1右击属性设置

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

serviceProcessInstallers1右击设置属性

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

这样简单的服务基本完成

4、开启服务

打开命令提示符

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

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

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

5、现在启动服务

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

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

打开的服务页面

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

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

这个就是你要打开的服务名称windows service 的创建 安装 调试 错误回发

我创建的服务名称为CQDX

右击服务名称》点击启动

会提示启动成功!

6、调试服务

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

找到你创建的服务

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

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

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

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

这样就可以调试服务

附加:

在创建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&num; windows服务的创建与调试

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

  2. 【转】C&num; windows服务的创建与调试

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

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

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

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

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

  5. windows安全更新程序&lpar;KB4093112&rpar; 安装失败 错误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&period;0 IIS 6

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

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

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

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

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

随机推荐

  1. asp&period;net 微信开发失效汇总

    1.验证控件 在Iphone 5以上版本不兼容(改为js验证)

  2. C&num; Excel处理工具

    需求:选择一个Excel文件,然后对该Excel文件进行处理,再导出一个处理后的Excel文件. 效果图 声明:我对winform开发不熟,但是我看到许多开发人员做东西只管交差,从不考虑用户体验,也不 ...

  3. URL编码与解码

    在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下 前台: 后台: 解决问题 为什么需要编码 怎样编码 实际出现的问题解决方法 1.为什么需要编码? URL 只能使用 AS ...

  4. maven -- 问题解决(一)解决eclipse中maven项目出现的问题

    配置项目时出现的错误: error: Cannot change version of project facet Dynamic Web Module to 2.5. error: One or m ...

  5. WEB安全--业务安全漏洞

    0x00 索引说明 在OWASP的分享,关于业务安全的漏洞检测模型. 0x01 身份认证安全 1 暴力破解 在没有验证码限制或者一次验证码可以多次使用的地方,使用已知用户对密码进行暴力破解或者用一个通 ...

  6. JS中遍历普通数组和字典数组的区别

    // 普通数组 var intArray = new Array(); intArray[0] = "第一个"; intArray[1] = "第二个"; fo ...

  7. centos6&period;5安装tomcat8&period;0&period;15

    首先需要在http://tomcat.apache.org/download-80.cgi下载最新安装包 安装tomcat 将apache-tomcat-8.0.15.tar.gz文件上传到/usr/ ...

  8. cacti气象图调整(批量位置调整、更改生成图大小等)

    cacti气象图能够非常直观的看到各个节点的流量.这里用的是CactiEZ中文版 V10 1.调整气象图大小 默认有一个1024像素的背景图可选, 这里我们须要新增一个1600像素的背景图. 背景图自 ...

  9. 解决爬虫中遇到的js加密问题之有道登录js逆向解析

    具体实现在github上面(有详细的步骤): https://github.com/WYL-BruceLong/Spider_JS_ReverseParsin

  10. MySQL按字段排序后取序号

    1 前言 项目中排行榜刚好需要查数据库表然后给出编号,方案一,可以按条件查找出来,然后再按数组序号给编号,但是如果要查表出来直接看,就不太够用了:方案二,就是用代码帮忙编号.参考了网上一些代码,然后发 ...