关于如何快速创建一个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 的创建 安装 调试 错误回发的更多相关文章
-
C# windows服务的创建与调试
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
-
【转】C# windows服务的创建与调试
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
-
C#Windows Service服务程序的安装/卸载、启动/停止 桌面客户端管理程序设计
C#Windows Service服务程序的安装/卸载.启动/停止 桌面客户端管理程序设计 关于Windows Service程序的安装与卸载如果每次使用命令行操作,那简直要奔溃了,太麻烦而且还容易出 ...
-
windows service 2008 R2 安装net4.6环境失败,windows service 2008 R2 升级sp1问题
一.错误 1.因为我的程序是以vs2017开发的,在windows service 2008 R2 IIS部署项目文件报出错误,因此要安装net4.6的环境. 2.windows service 2 ...
-
windows安全更新程序(KB4093112) 安装失败 错误0x80070011
解决办法:win + R → 输入regedi 将默认安装路径改回C盘的program files
-
windows下源码安装调试postgresql
环境:windows 10 postgresql版本:postgresql-9.6.5 使用工具:vs2017社区版 辅助工具:perl.diff.flex.bison 相关工具下载地址: perl下 ...
-
在Windows Service 2012上安装IIS 8.0 IIS 6
我的目的是在服务器上安装IIS6 ,但是受到这边文章的启发和按照他的步骤,看到了"IIS 6管理兼容性",我的问题就决解了,我这里是因为要安装vss 2005 和u8等比较早期的软 ...
-
Xamarin.Forms-VS安装调试错误
编译android项目报错检查android sdk 是否安装成功后发现报错如下图: 点击->工具->android sdk manager 报错 错误原因没有找到 android ...
-
Window服务程序(windows service application)如何调试
服务程序不能通过常规的按F5或F11的方式来进行调试和运行,也无法立即运行一个服务或逐步调试它的代码. 因此,你必须安装并启动你的服务,然后附属(attach)一个Debugger到这个服务的进程上.
随机推荐
-
asp.net 微信开发失效汇总
1.验证控件 在Iphone 5以上版本不兼容(改为js验证)
-
C# Excel处理工具
需求:选择一个Excel文件,然后对该Excel文件进行处理,再导出一个处理后的Excel文件. 效果图 声明:我对winform开发不熟,但是我看到许多开发人员做东西只管交差,从不考虑用户体验,也不 ...
-
URL编码与解码
在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下 前台: 后台: 解决问题 为什么需要编码 怎样编码 实际出现的问题解决方法 1.为什么需要编码? URL 只能使用 AS ...
-
maven -- 问题解决(一)解决eclipse中maven项目出现的问题
配置项目时出现的错误: error: Cannot change version of project facet Dynamic Web Module to 2.5. error: One or m ...
-
WEB安全--业务安全漏洞
0x00 索引说明 在OWASP的分享,关于业务安全的漏洞检测模型. 0x01 身份认证安全 1 暴力破解 在没有验证码限制或者一次验证码可以多次使用的地方,使用已知用户对密码进行暴力破解或者用一个通 ...
-
JS中遍历普通数组和字典数组的区别
// 普通数组 var intArray = new Array(); intArray[0] = "第一个"; intArray[1] = "第二个"; fo ...
-
centos6.5安装tomcat8.0.15
首先需要在http://tomcat.apache.org/download-80.cgi下载最新安装包 安装tomcat 将apache-tomcat-8.0.15.tar.gz文件上传到/usr/ ...
-
cacti气象图调整(批量位置调整、更改生成图大小等)
cacti气象图能够非常直观的看到各个节点的流量.这里用的是CactiEZ中文版 V10 1.调整气象图大小 默认有一个1024像素的背景图可选, 这里我们须要新增一个1600像素的背景图. 背景图自 ...
-
解决爬虫中遇到的js加密问题之有道登录js逆向解析
具体实现在github上面(有详细的步骤): https://github.com/WYL-BruceLong/Spider_JS_ReverseParsin
-
MySQL按字段排序后取序号
1 前言 项目中排行榜刚好需要查数据库表然后给出编号,方案一,可以按条件查找出来,然后再按数组序号给编号,但是如果要查表出来直接看,就不太够用了:方案二,就是用代码帮忙编号.参考了网上一些代码,然后发 ...