关于如何快速创建一个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. OpenCV学习 1:OpenCV安装与第一个图像显示程序

    原创作品,转载请注明出处 为了提升逼格,决定学下OpenCV,想想如果可以做人脸识别,定点降落,让飞机跟着自己飞..想想都有点小激动.这只是想的,能不能学会还不知道..哈..      1:先下载:h ...

  2. 基于Web的系统测试方法

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...

  3. python encode和decode函数说明【转载】

    python encode和decode函数说明 字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在p ...

  4. 配件BOM定义限制(只定义配件的)

    应用 Oracle Bill Of   Materiel 层 Level Function 函数名 Funcgtion Name BOM_BOMFDBOM 表单名 Form Name BOMFDBOM ...

  5. core_cm3.c解析

    CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系 ...

  6. discuz函数quote

    public static function quote($str, $noarray = false) { if (is_string($str)) return '\'' . addcslashe ...

  7. cdoj 邱老师看电影

    //第一次写概率dp //写成记忆化搜索的形式比递推要更方便易懂 //不过好像还是可以写成递推的形式的 但是比较那个…… #include<cstdio> #include<iost ...

  8. C++中的随机数函数(

    标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下 ...

  9. 教你爱上Blocks(闭包)

    传值 Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数.通过Blocks,源代码中就能使用匿名函数,即不带名称的函数.在我们 的工作中,命名占据了很大一部分,函数名,变量名,属性名, ...

  10. css滤镜(转载)

    STYLE="filter:filtername(fparameter1, fparameter2...)" (Filtername为滤镜的名称,fparameter1.fpara ...