C++编写Windows服务程序
- 格式:pdf
- 大小:380.04 KB
- 文档页数:36
Win-TC简介WIN-TC是一个TC2 WINDOWS平台开发工具,用于编写C语言程序。
该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。
而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。
并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。
WIN-TC是Turbo C 2.0(简称TC2.0)的一种扩展形式,是在TC2.0的基础上,增强了系统的兼容性和共享性,允许进行复制粘贴的多项可以用鼠标来操作的功能,比TC2.0使用起来方便。
WIN-TC主要特色1)在WINDOWS下编辑TC代码,可以充分利用WINDOWS的支持剪贴版和中文的特点;2)Include和Lib路径自动定位,告别TC设置路径的历史;3)编译错误捕捉功能,编译时不会出现烦人的DOS窗口;4)支持C内嵌汇编从而实现C/ASM混合编程;5)支持C扩展库(自定义LIB库);6)错误警告定位功能、出现编译错误时双击输出框里的出错行信息可以自动寻找到错误的行,就像DOS的TC那样;7)支持语法加亮功能,并可以自定义设置;8)没有目录路径限制,你甚至可以安装到带有空格的路径文件夹里;9)允许自定义设置输入风格,能够实现VC类似的输入风格;10)可选择是否生成ASM、MAP或OBJ文件,你甚至可以指定只生成EXE文件;11)稳定的文件操作功能,支持历史记录列表和使用模板;12)撤消和重复功能,并可以按照自己内存情况设置最多撤消次数(最多允许999次);13)具有行标计数的功能,并可以设置样式。
Turbo CTurbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。
该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。
microsoft visualc++2005(原创实用版)目录1.Microsoft Visual C++ 2005 简介2.Microsoft Visual C++ 2005 的特点3.Microsoft Visual C++ 2005 的应用领域4.Microsoft Visual C++ 2005 的优势与不足5.Microsoft Visual C++ 2005 的未来发展正文一、Microsoft Visual C++ 2005 简介Microsoft Visual C++ 2005是由微软公司开发的一款强大的C/C++编程集成开发环境(IDE)。
它为开发者提供了创建和维护Windows平台下的C/C++应用程序所需的全部工具,包括编辑器、调试器、链接器等。
自1992年首次发布以来,Visual C++已经历经多个版本更新,其中 2005 年发布的 Visual C++ 2005 是较为经典的一个版本。
二、Microsoft Visual C++ 2005 的特点1.强大的代码编辑功能:Visual C++ 2005 具备强大的代码编辑功能,支持语法高亮、自动补全、代码重构等特性,帮助开发者提高编程效率。
2.调试与测试功能:Visual C++ 2005 内置了功能强大的调试器,支持调试本地和远程应用程序,同时提供多种调试工具,如断点、单步执行、监视等,方便开发者定位和修复程序问题。
3.多语言支持:Visual C++ 2005 支持 C、C++以及 C++/CX 等编程语言,适应不同开发需求。
4.对 Windows API 的完全支持:Visual C++ 2005 完全支持 WindowsAPI,开发者可以使用 Visual C++ 2005 轻松创建 Windows 应用程序。
5.集成了.NET Framework:Visual C++ 2005 集成了.NET Framework,开发者可以使用 C++/CX 语言编写托管代码,实现与.NET 平台的无缝对接。
如何在命令⾏脚本中启动带参数的Windows服务这是⼀个⼩问题:我们有⼀个⾃⼰编写的Windows服务,我们希望该服务在启动时可以根据⽤户输⼊的参数实现不同的功能。
要实现这样的需求并不是很难,下⾯这个例⼦我⽤来⽰范如何编写该服务using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Text;namespace WindowsServiceSample{public partial class SampleService : ServiceBase{public SampleService(){InitializeComponent();}/// <summary>/// 服务启动时触发/// </summary>/// <param name="args">⽤户可以设置的输⼊参数</param>protected override void OnStart(string[] args){if (args.Length > 0){EventLog.WriteEntry(string.Format("sample service is started with parameter :{0}", string.Join(",", args)));}else{EventLog.WriteEntry("sample service is started with non parameter");}}protected override void OnStop(){}}}在上述代码中,我区分了带参数启动和不带参数启动两种情况。
用Visual C#创建Wind ows服务程序及参数说明一.Windows服务介绍:Windows服务以前被称作NT服务,是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。
在以前,编写Windows服务程序需要程序员很强的C或C++功底。
然而现在在Visual 下,你可以运用C++或Visual C#或Visual 很轻松的创建一个Windows服务程序。
同样,你还可以运用其他任何与CLR相容的语言来创建Windows服务程序。
本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。
在介绍如何创建Windows服务程序以前,我先向大家介绍一些有关Windows服务的背景知识。
一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序。
Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式。
这些启动方式包括了自动启动和手动启动两种。
对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了。
只要你将相应的Windows服务程序注册到服务控制管理器(Service Control Manager)中,并将其启动类别设为自动启动就行了。
而对于手动启动的Windows 服务程序,你可以通过命令行工具的NET START 命令来启动它,或是通过控制面板中管理工具下的服务一项来启动相应的Windows服务程序(见图1)。
同样,一个Windows服务程序也不能像一般的应用程序那样被终止。
因为Windows服务程序一般是没有用户界面的,所以你也要通过命令行工具或是下面图中的工具来停止它,或是在系统关闭时使得Windows服务程序自动停止。
环境:Windows 2003,VC 6.0摘要:从建立一个COM服务程序入手,然后将一个MFC项目改造成服务程序,最后让这一程序在启动时可以显示图形界面。
关键字:windows服务程序COM服务程序开机前启动NT服务与桌面交互一、什么是windows的服务程序?可以使用下面的几种方法看到它。
1.打开控制面板,然后是管理工具,里面有一个“服务”,双击后打开;2.或者是通过输入命令的方式,打开开始菜单,点击运行,输入mmcservices.msc(mmc可省略),也可打开;我们会在打开的页面中看到一个大的列表,标题栏上包含有名称、描述、状态、启动类型、登录身份等项。
其中在状态一栏中显示为“已启动”的是系统中已经启动了的服务。
我们先看一下服务的属性。
举个例子,找到Print Spooler这一名称,然后用右键在上面点击,选择“属性”,可以看到它所执行的命令行是C:\WINDOWS\system32\spoolsv.exe,按下停止后,任务管理器中spoolsv.exe进程退出。
我们所见到的这个列表就是服务程序的集中地,每一项就是一个服务程序。
上面这些标为自启动的服务程序随系统一起启动。
它与一些修改注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Run项,及类似注册表项的程序不同的是,即使用户没有登录到系统中,它们也是会运行的,或者说它们在系统登录前运行。
二、怎么建立自己的服务程序?每一个服务程序对应注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下的一个子项。
因此我们可以通过增加注册表项的方式增加服务程序。
比如,我现在要增加一个test1服务程序,对应的可执行文件是c:\test1.exe。
那么我要增加如下注册表项:1.[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\]下增加子项test1;2.test1下增加:字符串型:"Description"="测试服务1"字符串型:"DisplayName"="test1-displayname"DWORD型:"ErrorControl"=dword:00000001可扩充字符串值(即文件所在路径):"ImagePath"=hex(2):43,00,3a,00,5c,00,74,00,65,00,73,00,74,0 0,31,00,2e,00,65,00,\78,00,65,00,00,00字符串型:"ObjectName"="LocalSystem"DWORD型,值为3表示是手动:"Start"=dword:00000003DWORD型:"Type"=dword:000000203.test1下增加子项:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\te st1\Security]里面的键值从其他的服务程序注册表值中复制。
SC命令---安装、开启、配置、关闭cmd命令⾏和bat批处理操作windows服务⼀、cmd命令⾏---进⾏Windows服务操作1、安装服务sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srvDemo\win32srvdemo\Debug\win32srvDemo.exe"注:服务名:指创建的Windows服务名binPath:指Windows服务程序的路径2、配置服务sc config 服务名 start=AUTO注:start=AUTO (⾃动)start=DEMAND (⼿动)start=DISABLED (禁⽤)3、开启服务net start 服务名4、关闭服务net stop 服务名5、删除服务sc delete 服务名⼆、第⼀种:bat批处理---进⾏Windows服务操作(新建⼀个txt⽂件,把后缀改成.bat⽂件)1、创建、配置、开启服务@echo.服务启动......@echo off@sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srvdemo\win32srvdemo\Debug\win32srvdemo.exe"@net start 服务名@sc config 服务名 start= AUTO@echo off@echo.启动完毕!@pause2、关闭服务@echo.服务关闭@echo off@net stop 服务名@echo off@echo.关闭结束!@pause3、删除服务(删除前要关闭服务)@echo.服务删除@echo off@sc delete 服务名@echo off@echo.删除结束!@pause⼆、第⼆种:bat批处理---进⾏Windows服务操作1、安装脚本Install.bat%SystemRoot%\\Framework\v4.0.30319\installutil.exe "E:\wwwroot\kjsmtt\wwwroot\KJLMManagerShareOutBonus\KJLMManagerShareOutBonus.exe" Net Start 服务名sc config 服务名 start= autopause注:第⼀⾏:Window服务执⾏程序的路径第⼆⾏:启动服务第三⾏:设置服务⾃动运⾏最后⼀⾏:暂停,可以查看运⾏信息2、卸载脚本Uninstall.bat%SystemRoot%\\Framework\v4.0.30319\installutil.exe /u "E:\wwwroot\kjsmtt\wwwroot\KJLMManagerShareOutBonus\KJLMManagerShareOutBonus.exe" pause以上两种.bat 有的系统⾏有的不⾏,还不知道为什么。
最近由于工作需要,写了一些windows服务程序,有一些经验,我现在总结写出来。
目前我知道的创建创建Windows服务有3种方式:a.利用.net框架类ServiceBaseb.利用组件Topshelfc.利用小工具instsrv和srvany下面我利用这3种方式,分别做一个windows服务程序,程序功能就是每隔5秒往程序目录下记录日志:a.利用.net框架类ServiceBase本方式特点:简单,兼容性好通过继承.net框架类ServiceBase实现第1步: 新建一个Windows服务public partial class Service1 : ServiceBase{readonly Timer _timer;private static readonly string FileName = Path.GetDirectoryName( Assembly.GetExecutingAssembly ( ).Location ) + @"\" + "test.txt";public Service1 ( ){InitializeComponent ( );_timer = new Timer ( 5000 ){AutoReset = true ,Enabled = true};_timer.Elapsed += delegate ( object sender , ElapsedEventArgs e ) {this.witre ( string.Format ( "Run DateTime {0}", DateTime.Now ) ); };}protected override void OnStart ( string [ ] args ){this.witre ( string.Format ( "Start DateTime {0}", DateTime.Now ) ); }protected override void OnStop ( ){this.witre ( string.Format ( "Stop DateTime {0}" , DateTime.Now ) + Environment.NewLine );}void witre ( string context ){StreamWriter sw = File.AppendText ( FileName );sw.WriteLine ( context );sw.Flush ( );sw.Close ( );}}第2步: 添加Installer[RunInstaller ( true )]public partial class Installer1 : System.Configuration.Install.Installer {private ServiceInstaller serviceInstaller;private ServiceProcessInstaller processInstaller;public Installer1 ( ){InitializeComponent ( );processInstaller = new ServiceProcessInstaller ( );serviceInstaller = new ServiceInstaller ( );processInstaller.Account = ServiceAccount.LocalSystem;serviceInstaller.StartType = ServiceStartMode.Automatic;serviceInstaller.ServiceName = "my_WindowsService";serviceInstaller.Description = "WindowsService_Description";serviceInstaller.DisplayName = "WindowsService_DisplayName";Installers.Add ( serviceInstaller );Installers.Add ( processInstaller );}第3步:安装,卸载Cmd命令installutil WindowsService_test.exe (安装Windows服务)installutil /u WindowsService_test.exe (卸载Windows服务)代码下载:/aierong/WindowsService_test.rarb.利用组件Topshelf本方式特点:代码简单,开源组件,Windows服务可运行多个实例Topshelf是一个开源的跨平台的服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务. 官方网站:第1步:引用程序集TopShelf.dll和log4net.dll第2步:创建一个服务类MyClass,里面包含两个方法Start和Stop,还包含一个定时器Timer,每隔5秒往文本文件中写入字符public class MyClass{readonly Timer _timer;private static readonly string FileName = Directory.GetCurrentDirectory ( ) + @"\" + "test.txt";public MyClass ( ){_timer = new Timer ( 5000 ){AutoReset = true ,Enabled = true};_timer.Elapsed += delegate ( object sender , ElapsedEventArgs e ) {this.witre ( string.Format ( "Run DateTime {0}", DateTime.Now ) ); };void witre ( string context ){StreamWriter sw = File.AppendText ( FileName );sw.WriteLine ( context );sw.Flush ( );sw.Close ( );}public void Start ( ){this.witre ( string.Format ( "Start DateTime {0}", DateTime.Now ) ); }public void Stop ( ){this.witre ( string.Format ( "Stop DateTime {0}" , DateTime.Now ) + Environment.NewLine );}}第3步:使用Topshelf宿主我们的服务,主要是Topshelf如何设置我们的服务的配置和启动和停止的时候的方法调用class Program{static void Main ( string [ ] args ){HostFactory.Run ( x =>{x.Service<MyClass> ( ( s ) =>{s.SetServiceName ( "ser" );s.ConstructUsing ( name => new MyClass ( ) );s.WhenStarted ( ( t ) => t.Start ( ) );s.WhenStopped ( ( t ) => t.Stop ( ) );} );x.RunAsLocalSystem ( );//服务的描述x.SetDescription ( "Topshelf_Description" );//服务的显示名称x.SetDisplayName ( "Topshelf_DisplayName" );//服务名称x.SetServiceName ( "Topshelf_ServiceName" );} );}}第4步: cmd命令ConsoleApp_Topshelf.exe install (安装Windows服务)ConsoleApp_Topshelf.exe uninstall (卸载Windows服务)代码下载:/aierong/ConsoleApp_Topshelf.rarc.利用小工具instsrv和srvany本方式特点:代码超级简单,WindowsForm程序即可,并支持程序交互(本人最喜欢的特点),好像不支持win7,支持xp win2003首先介绍2个小工具:instsrv.exe:用以安装和卸载可执行的服务srvany.exe:用于将任何EXE程序作为Windows服务运行这2个工具都是是Microsoft Windows Resource Kits工具集的实用的小工具你可以通过下载并安装Microsoft Windows Resource Kits获得/en-us/download/details.aspx?id=17657第1步: 新建WindowsForm程序public partial class Form1 : Form{Timer _timer;private static readonly string FileName = Application.StartupPath + @"\" + "test.txt";public Form1 ( ){InitializeComponent ( );}private void Form1_Load ( object sender , EventArgs e ){_timer = new Timer ( ){Enabled = true ,Interval = 5000};_timer.Tick += delegate ( object _sender , EventArgs _e ){this.witre ( string.Format ( "Run DateTime {0}", DateTime.Now ) ); };}void _timer_Tick ( object sender , EventArgs e ){throw new NotImplementedException ( );}void witre ( string context ){StreamWriter sw = File.AppendText ( FileName );sw.WriteLine ( context );sw.Flush ( );sw.Close ( );}private void button1_Click ( object sender , EventArgs e ){MessageBox.Show ( "Hello" );}}第2步:安装,卸载服务的安装步骤分5小步:(1)打开CMD,输入以下内容,其中WindowsForms_WindowsService为你要创建的服务名称格式:目录绝对路径\instsrv WindowsForms_WindowsService 目录绝对路径\srvany.exe 例如:D:\TempWork\win\Debug\instsrv.exe WindowsForms_WindowsService D:\TempWor k\win\Debug\srvany.exe(2)regedit打开注册表编辑器,找到以下目录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WindowsForms_Window sService(3)鼠标右键单击WindowsForms_WindowsService,创建一个"项",名称为"Parameters"(4)鼠标左键单击"Parameters",在右边点击鼠标右键,创建一个"字符串值"(REG_SZ),名称为"Application",数值数据里填写目录下可执行文件的绝对路径+文件名例如:D:\TempWork\win\Debug\WindowsFormsApplication_Exe.exe(5)打开services.msc服务控制面板,找到WindowsForms_WindowsService服务,鼠标右键-属性-登陆,勾选"允许服务与桌面交互"启动服务,可以看到程序界面卸载服务D:\TempWork\win\Debug\instsrv.exe WindowsForms_WindowsService REMOVE 代码下载:/aierong/WindowsFormsApplication_Exe.rar。