进入东财以来,看到一个比较好的手动安装删除服务的,使用的是PINVOKE CreateService DeleteService的方法,不用使用vs安装目录下的installutil工具来做,自定义很多命令行参数,先看这个被调用函数

   public class InstallerCommon{[DllImport("advapi32.dll")]public static extern void CloseServiceHandle(IntPtr SCHANDLE);[DllImport("Advapi32.dll")]public static extern IntPtr CreateService(IntPtr SC_HANDLE, string lpSvcName, string lpDisplayName, int dwDesiredAccess, int dwServiceType, int dwStartType, int dwErrorControl, string lpPathName, string lpLoadOrderGroup, int lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword);[DllImport("advapi32.dll")]public static extern int DeleteService(IntPtr SVHANDLE);[DllImport("kernel32.dll")]public static extern int GetLastError();public bool Install(string svcPath, string svcName, string svcDispName, string svcDescription = ""){bool flag = false;int scParameter = 2;int dwServiceType = 0x10;int dwErrorControl = 1;int num4 = 0xf0000;int num5 = 1;int num6 = 2;int num7 = 4;int num8 = 8;int num9 = 0x10;int num10 = 0x20;int num11 = 0x40;int num12 = 0x80;int num13 = 0x100;int dwDesiredAccess = ((((((((num4 | num5) | num6) | num7) | num8) | num9) | num10) | num11) | num12) | num13;int dwStartType = 2;try{IntPtr ptr = OpenSCManager(null, null, scParameter);if (ptr.ToInt32() != 0){if (CreateService(ptr, svcName, svcDispName, dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl, svcPath, null, 0, null, null, null).ToInt32() == 0){flag = false;Console.Write("服务安装失败!");}else{flag = true;}CloseServiceHandle(ptr);}}catch (Exception exception){throw exception;}if (flag){RegistryKey system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System");RegistryKey currentControlSet = system.OpenSubKey("CurrentControlSet");RegistryKey services = currentControlSet.OpenSubKey("Services");RegistryKey service = services.OpenSubKey(svcName, true);service.SetValue("Description", svcDescription);}Console.Write("服务安装成功!");return flag;}[DllImport("advapi32.dll")]public static extern IntPtr OpenSCManager(string lpMachineName, string lpSCDB, int scParameter);[DllImport("advapi32.dll", SetLastError = true)]public static extern IntPtr OpenService(IntPtr SCHANDLE, string lpSvcName, int dwNumServiceArgs);[DllImport("advapi32.dll")]public static extern int StartService(IntPtr SVHANDLE, int dwNumServiceArgs, string lpServiceArgVectors);public bool UnInstall(string svcName){int scParameter = 0x40000000;IntPtr sCHANDLE = OpenSCManager(null, null, scParameter);if (sCHANDLE.ToInt32() != 0){int dwNumServiceArgs = 0x10000;IntPtr sVHANDLE = OpenService(sCHANDLE, svcName, dwNumServiceArgs);if (sVHANDLE.ToInt32() != 0){if (DeleteService(sVHANDLE) != 0){CloseServiceHandle(sCHANDLE);return true;}CloseServiceHandle(sCHANDLE);return false;}return false;}return false;}}

然后在program.cs写命令行参数逻辑:

   static void Main(string[] args){if (args.Length >= 2){var server = args[1];InstallerCommon iS = new InstallerCommon();if (args[0] == "add"){string description = "";if (args.Length == 3)description = args[2];iS.Install(System.Reflection.Assembly.GetExecutingAssembly().Location, server, server, description);}if (args[0] == "del")iS.UnInstall(server);}else{ServiceBase[] ServicesToRun;ServicesToRun = new ServiceBase[] { new FundSearchService() };ServiceBase.Run(ServicesToRun);}}

还是很好用的。

C# 编写Windows Service(windows服务程序)(第二种)相关推荐

  1. C#写Windows Service(windows服务程序)

    背景:        要学习使用一个新东西,我们必须知道他是个什么东西.对于我们此次研究的windows服务来说,他又是个什么东西,其实也没有什么高深的了. windows service概述: 一个 ...

  2. C# 编写Windows Service(windows服务程序)

    Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就 ...

  3. python 编程服务_Python编写Windows Service服务程序

    如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下 ...

  4. Windows Service服务程序的原理及实现(0)服务主函数 控制处理函数

    摘要: 何为服务?Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这种服务非常适合在服务器上使用,或任何时候,为了不影 ...

  5. 用 VC++ 2008 编写 Windows Service(系统服务)

    用 VC++ 2008 编写 Windows Service(系统服务) 2008-03-30 08:08 现在许多 Windows Service 应用都可以用 c# 很好的完成,不过毕竟是托管代码 ...

  6. python实现windows Service服务程序

    python实现windows Service服务程序 win32serviceutil.ServiceFramework是封装得很好的Windows服务框架,本文通过继承它来实现. 通过SvcDoR ...

  7. 在.net里编写Windows Service

    通过.NET平台编写和发布简单的Windows Service是一件很方便的事情. 新建一个(VB.NET/C#)项目,选择Windows Service应用..然后在OnStart类里就可以添加代码 ...

  8. 【windows service】C# 创建Windows Service(Windows服务)程序

    C# 创建Windows Service(Windows服务)程序 很多年前大概08年做了一个windows桌面程序推送邮件给用户的程序,然后通过windows 计划任务每隔N分钟重复执行. 今天闲暇 ...

  9. C#开发Windows Service程序

    Windows Service概念介绍 Windows Service,也称Windows服务,是32位Windows操作系统中一种长期运行的后台程序.它们长期后台运行,没有用户界面,默默无闻,但它们 ...

  10. [置顶] Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)

    [置顶] [置顶] Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用) 2012-08-20 15:04 673人阅读 评论(1) 收藏 ...

最新文章

  1. AI 初学者必须要了解的术语盘点
  2. CCF关于对NOIP2018复赛违规处罚的公告
  3. 如何梳理复杂系统的用户需求?
  4. Spring源码深度解析第2天
  5. 字节跳动最新开源!java条件运算符判断三个数大小
  6. 时间变为.05PU sql长度写法
  7. js模块化开发——模块的写法
  8. 【数据挖掘】基于密度的聚类方法 - OPTICS 方法 ( 算法流程 | 算法示例 )
  9. 作为一个程序猿你必须会的技能----自学框架!
  10. python表格控件_python--excel操作插件openpyxl
  11. arduino霍尔编码器蓝牙小车代码
  12. Gitlab和gitlab-runner安装和注册
  13. 泪目!java面试八股文是哪些
  14. redhat 7.4系统安装英伟达独立显卡驱动步骤
  15. KeyError: 0 与 KeyError: 1(附例子)
  16. nginx中配置不输入端口(指定地址)访问项目的方法
  17. biu Vue2高级知识点
  18. 基于阈值的图像二值化方法MATLAB
  19. 关于java读写文件
  20. 直播预告| 清华CoAI小组——郑银河、刘劼西

热门文章

  1. 基于web的电影订票系统/电影购票网站
  2. 购买的域名可以退款吗?域名购买后怎么删除?
  3. Web前端面试指导(完结)
  4. cad缩小了怎么还原,CAD怎么缩小图形,我来告诉你!
  5. 大一上学期学习生活情况总结
  6. gcc/gdb/make/动/静态链接库介绍
  7. 云适配陈本峰:HTML5并非真正跨平台
  8. 光电自动避障小车_AGV系统助力工厂物流自动化【agv小车吧】
  9. 职称以考代评学院考计算机吗,软考与职称的关系,软考是以考代评,不用另外再去评审...
  10. S32K系列S32K144学习笔记——UART2