c# 服务创建

服务

创建服务

编写服务

可以对server1.cs重新命名,点击你的server按F7进入代码编辑模式,编写脚本

双击你的server.cs右击空白位置,添加安装程序,此时会生成“serviceInstaller1”及“serviceProcessInstaller1”

后续可以点击ProjectInstaller.cs查看已经添加的程序

修改属性

右击serviceInstaller1属性修改servicename,用于等下启动服务的名称

右击serviceProcessInstaller1属性修改Account改为LocalSystem(服务属性系统级别)

至此服务已经编写完毕

启动服务

启动服务可以使用多种方式,这里介绍两种思路

创建bat文件启动

新建一个txt,等下修改为.bat,可以创建多个.bat用于安装服务,开启服务等

使用sc创建

//创建-配置-开启 

@echo.服务启动......  
@echo off  
@sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srvdemo\win32srvdemo\Debug\win32srvdemo.exe"  
@net start 服务名  
@sc config 服务名 start= AUTO  
@echo off  
@echo.启动完毕!  
@pause

//关闭服务

@echo.服务关闭  
@echo off  
@net stop 服务名  
@echo off  
@echo.关闭结束!  
@pause

//删除服务

@echo.服务删除  
@echo off  
@sc delete 服务名 
@echo off  
@echo.删除结束!  
@pause

使用net framework提供的命令启动

//安装-启动-设置自动运行 - 暂停
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe "你的地址\MyTask.exe"
Net Start 服务名
sc config 服务名 start= auto
pause

//卸载服务
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u "你的地址\MyTask.exe"
pause

使用winform窗体,代码启动

点击解决方案,创建一个winform项目net framework

设置安装,卸载,启动和关闭按钮,设置单击事件

private void button1_Click(object sender, EventArgs e)
{
    //安装服务
    if (ServiceHelperOne.IsServiceExisted(serviceName))
        ServiceHelperOne.UninstallService(serviceFilePath);
    ServiceHelperOne.InstallService(serviceFilePath);
}
private void button_start_Click(object sender, EventArgs e)
{
    //运行服务
    if (ServiceHelperOne.IsServiceExisted(serviceName))
        ServiceHelperOne.ServiceStart(serviceName);
}

private void button_stop_Click(object sender, EventArgs e)
{
    //服务停止
    if (ServiceHelperOne.IsServiceExisted(serviceName))
        ServiceHelperOne.ServiceStop(serviceName);
}

private void button_unservice_Click(object sender, EventArgs e)
{
    //服务卸载
    if (ServiceHelperOne.IsServiceExisted(serviceName))
    {
        ServiceHelperOne.ServiceStop(serviceName);
        ServiceHelperOne.UninstallService(serviceFilePath);
    }
}

增加一个帮助类

   public class ServiceHelperOne
   {
       //判断服务是否存在
       public static bool IsServiceExisted(string serviceName)
       {
           ServiceController[] services = ServiceController.GetServices();
           foreach (ServiceController sc in services)
           {
               if (sc.ServiceName.ToLower() == serviceName.ToLower())
               {
                   return true;
               }
           }
           return false;
       }

       //安装服务
       public static void InstallService(string serviceFilePath)
       {
           try
           {
               using (AssemblyInstaller installer = new AssemblyInstaller())
               {
                   installer.UseNewContext = true;
                   installer.Path = serviceFilePath;
                   IDictionary savedState = new Hashtable();
                   installer.Install(savedState);
                   installer.Commit(savedState);
               }
           }
           catch (Exception ex)
           {
               var err = ex.Message;
           }
       }

       //卸载服务
       public static void UninstallService(string serviceFilePath)
       {
           using (AssemblyInstaller installer = new AssemblyInstaller())
           {
               installer.UseNewContext = true;
               installer.Path = serviceFilePath;
               installer.Uninstall(null);
           }
       }
       //启动服务
       public static void ServiceStart(string serviceName)
       {
           using (ServiceController control = new ServiceController(serviceName))
           {
               if (control.Status == ServiceControllerStatus.Stopped)
               {
                   control.Start();
               }
           }
       }

       //停止服务
       public static void ServiceStop(string serviceName)
       {
           using (ServiceController control = new ServiceController(serviceName))
           {
               if (control.Status == ServiceControllerStatus.Running)
               {
                   control.Stop();
               }
           }
       }
   }

添加winform项目对服务的引用,添加exe文件

右击winform项目添加新项目->应用程序清单文件

打开该文件,并将<requestedExecutionLevel level="asInvoker" uiAccess="false" />改为<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

启动后,将会弹出如下所示的窗体(有的系统因UAC配置有可能不显示),需要用管理员权限打开

可以打开任务管理器,运行项目,安装运行可以查看服务的状态

调试服务

调试服务,需要将服务进程添加到需要调试的程序当中,可以设置在创建的服务项目里,在OnStop设置断点

点击调试-附加到进程

一般名称和执行exe名称一致,并不是设置的服务名

停止服务,查看断点,调试代码

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值