C++ 实现 Windows服务进程

合集下载

Sc.exe 创建 Windows 服务

Sc.exe 创建 Windows 服务

把这两个程序保存在一个方便的位置,例如C盘根目录下。我们举例来说明,把OE作为一个服务添加进Windows XP Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\instsrv.exe Mail c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail则是你想添加的服务名称。
注销一下看看。为了让你看清除,我们先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“”的是我们打开的OE,而用户名为“SYSTEM”的就是我们添加的服务。
如果你玩够了,不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。
引用
想让一个程序在启动系统的时候自动运行,你有什么好办法?添加到启动组?那如果别人删除掉就不管用了。如果你使用了Windows NT/2000/XP,就可以试试把这个程序添加为一个服务,这样只有拥有权限的人才可以更改服务,只要你设置好权限,就不用担心会被别人个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows NT Resource Kit里,如果你没有,也可以到网上下载。
运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为“Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述,这个我们在后面可以看到。

先来先服务和优先数调度算法c语言

先来先服务和优先数调度算法c语言

先来先服务和优先数调度算法c语言先来先服务和优先数调度算法c语言一、前言操作系统中的进程调度是指在多道程序环境下,按照一定的规则从就绪队列中选择一个进程,将CPU分配给它运行。

常用的进程调度算法有先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转(RR)等。

本文将介绍两种常见的进程调度算法:先来先服务和优先数调度算法,并给出相应的C语言实现。

二、先来先服务算法1. 算法原理FCFS即First Come First Served,也称为FIFO(First In First Out),是一种非抢占式的进程调度算法。

按照任务到达时间的顺序进行处理,即谁先到达谁就被处理。

2. 算法流程(1)按照任务到达时间排序;(2)依次执行每个任务,直至所有任务都完成。

3. C语言实现下面是一个简单的FCFS程序:```c#include <stdio.h>struct process {int pid; // 进程IDint arrival_time; // 到达时间int burst_time; // 执行时间int waiting_time; // 等待时间};int main() {struct process p[10];int n, i, j;float avg_waiting_time = 0;printf("请输入进程数:");scanf("%d", &n);for (i = 0; i < n; i++) {printf("请输入第%d个进程的信息:\n", i + 1); printf("进程ID:");scanf("%d", &p[i].pid);printf("到达时间:");scanf("%d", &p[i].arrival_time);printf("执行时间:");scanf("%d", &p[i].burst_time);}for (i = 0; i < n; i++) {for (j = 0; j < i; j++) {if (p[j].arrival_time > p[j + 1].arrival_time) { struct process temp = p[j];p[j] = p[j + 1];p[j + 1] = temp;}}}int current_time = p[0].arrival_time;for (i = 0; i < n; i++) {if (current_time < p[i].arrival_time) {current_time = p[i].arrival_time;}p[i].waiting_time = current_time - p[i].arrival_time;current_time += p[i].burst_time;}printf("进程ID\t到达时间\t执行时间\t等待时间\n");for (i = 0; i < n; i++) {printf("%d\t%d\t%d\t%d\n", p[i].pid, p[i].arrival_time, p[i].burst_time, p[i].waiting_time);avg_waiting_time += (float)p[i].waiting_time / n;}printf("平均等待时间:%f\n", avg_waiting_time);return 0;}```三、优先数调度算法1. 算法原理优先数调度算法是一种非抢占式的进程调度算法。

C#添加Windows服务定时任务

C#添加Windows服务定时任务

C#添加Windows服务定时任务本⽂实例为⼤家分享了C#添加Windows服务的具体⽅法,供⼤家参考,具体内容如下步骤⼀、创建服务项⽬。

步骤⼆、添加安装程序。

步骤三、服务属性设置【serviceInstaller1】。

4.1 添加定时任务public partial class SapSyn : ServiceBase{System.Timers.Timer timer1; //计时器System.Timers.Timer timer2; //计时器System.Timers.Timer timer3; //计时器System.Timers.Timer timer4; //计时器public SapSyn(){InitializeComponent();}protected override void OnStart(string[] args){timer1 = new System.Timers.Timer();timer1.Interval = 8000; //设置计时器事件间隔执⾏时间timer1.Elapsed += new System.Timers.ElapsedEventHandler(TMStart1_Elapsed);timer1.Enabled = true;timer2 = new System.Timers.Timer();timer2.Interval = 8000; //设置计时器事件间隔执⾏时间timer2.Elapsed += new System.Timers.ElapsedEventHandler(TMStart2_Elapsed);timer2.Enabled = true;timer3 = new System.Timers.Timer();timer3.Interval = 8000; //设置计时器事件间隔执⾏时间timer3.Elapsed += new System.Timers.ElapsedEventHandler(TMStart3_Elapsed);timer3.Enabled = true;timer4 = new System.Timers.Timer();timer4.Interval = 8000; //设置计时器事件间隔执⾏时间timer4.Elapsed += new System.Timers.ElapsedEventHandler(TMStart4_Elapsed);timer4.Enabled = true;}protected override void OnStop() //服务停⽌执⾏{using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");}this.timer1.Enabled = false;this.timer2.Enabled = false;this.timer3.Enabled = false;this.timer4.Enabled = false;}protected override void OnPause(){//服务暂停执⾏代码base.OnPause();}protected override void OnContinue(){//服务恢复执⾏代码base.OnContinue();}protected override void OnShutdown(){//系统即将关闭执⾏代码base.OnShutdown();}private void TMStart1_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//执⾏SQL语句或其他操作using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 1 + "log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}private void TMStart2_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//执⾏SQL语句或其他操作using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 2 + "log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}private void TMStart3_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//执⾏SQL语句或其他操作using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 3 + "log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}private void TMStart4_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//执⾏SQL语句或其他操作using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" + 4 + "log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}}4.2 设置服务启动⽅式为⾃动启动[RunInstaller(true)]public partial class ProjectInstaller : System.Configuration.Install.Installer{public ProjectInstaller(){InitializeComponent();mitted += new InstallEventHandler(ProjectInstaller_Committed);}private void ProjectInstaller_Committed(object sender, InstallEventArgs e){//参数为服务的名字System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("ServiceSapSyn");controller.Start();}private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e){}}步骤五、脚本配置。

CC++学习----使用C语言代替cmd命令、cmd命令大全

CC++学习----使用C语言代替cmd命令、cmd命令大全

CC++学习----使⽤C语⾔代替cmd命令、cmd命令⼤全【开发环境】物理机版本:Win 7 旗舰版(64位)IDE版本:Visual Studio 2013简体中⽂旗舰版(cn_visual_studio_ultimate_2013_with_update_4_x86_dvd_5935081_Chinese-Simplified)【前⾔】cmd常⽤命令:calc:启动计算器notepad:打开记事本netstat -a:查看所有的端⼝tasklist:查看所有的进程d: 盘符切换dir(directory) 列出当前⽬录下的⽂件以及⽂件夹md (make directory) 创建⽬录rd (remove directory) 删除⽬录(带内容的⽂件或者⽂件夹不能直接删除,必须先删除⾥⾯,再删除外⾯)。

如果要删除⾮空⽬录,可以使⽤命令:rd /s xxxdir或者rd /s /q xxxdircd (change directory) 改变指定⽬录(进⼊指定⽬录)cd.. 退回到上⼀级⽬录cd\ 退回到根⽬录del (delete) 删除⽂件,删除⼀堆后缀名⼀样的⽂件*.txtexit 退出dos命令⾏cls (clear screen)清屏Win7中打开cmd窗⼝的⽅式:在当前路径下,按住shift键,⿏标右键:⼀、通过C语⾔代码来实现cmd命令⾏功能:这⾥⽤到了c语⾔中的⼀个库:#include<stdlib.h>1、打开记事本:cmd.cpp:#include<stdlib.h>void main() {system("notepad"); //System:执⾏系统的命令⾏}程序⼀运⾏,记事本就打开了:2、查看ip地址:#include<stdlib.h>void main(){system("ipconfig");system("pause"); //如果没有这⼀⾏代码,cmd窗⼝就会闪退}注:如果没有第04⾏的pause,cmd窗⼝就会闪退。

CMD操作大全

CMD操作大全

1.gpedit.msc-----组策略2.sndrec32-------录音机3.Nslookup-------IP地址侦测器,是一个监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。

它在 Windows NT/2000/XP 中均可使用 , 但在 Windows 98 中却没有集成这一个工具。

4.explorer-------打开资源管理器5.logoff---------注销命令6.shutdown-------60秒倒计时关机命令7.. lusrmgr.msc----本机用户和组8.services.msc---本地服务设置9.oobe/msoobe /a----检查XP是否激活10.notepad--------打开记事本11.cleanmgr-------垃圾整理 start messenger----开始信使服务pmgmt.msc---计算机管理 stop messenger-----停止信使服务15.conf-----------启动netmeeting16.dvdplay--------DVD播放器17.charmap--------启动字符映射表18.diskmgmt.msc---磁盘管理实用程序19.calc-----------启动计算器20.dfrg.msc-------磁盘碎片整理程序21.chkdsk.exe-----Chkdsk磁盘检查22.devmgmt.msc--- 设备管理器23.regsvr32 /u *.dll----停止dll文件运行24.drwtsn32------ 系统医生25.rononce -p----15秒关机26.dxdiag---------检查DirectX信息27.regedt32-------注册表编辑器28.Msconfig.exe---系统配置实用程序29.rsop.msc-------组策略结果集30.mem.exe--------显示内存使用情况31.regedit.exe----注册表32.winchat--------XP自带局域网聊天33.progman--------程序管理器34.. winmsd---------系统信息35.perfmon.msc----计算机性能监测程序36.winver---------检查Windows版本37.sfc /scannow-----扫描错误并复原38.taskmgr-----任务管理器(2000/xp/200339.wmimgmt.msc----打开windows管理体系结构(WMI)40.wupdmgr--------windows更新程序41.wscript--------windows脚本宿主设置42.write----------写字板43.wiaacmgr-------扫描仪和照相机向导44.. winchat--------XP自带局域网聊天45.mplayer2-------简易widnows media player46.mspaint--------画图板47.mstsc----------远程桌面连接48.. magnify--------放大镜实用程序49.mmc------------打开控制台50.mobsync--------同步命令51.iexpress-------木马捆绑工具,系统自带52.. fsmgmt.msc-----共享文件夹管理器53.utilman--------辅助工具管理器54.dcomcnfg-------打开系统组件服务55.ddeshare-------打开DDE共享设置56.osk------------打开屏幕键盘57.. odbcad32-------ODBC数据源管理器58.oobe/msoobe /a----检查XP是否激活59.ntbackup-------系统备份和还原60.narrator-------屏幕“讲述人”61.ntmsmgr.msc----移动存储管理器62.. ntmsoprq.msc---移动存储管理员操作请求stat -an----(TC)命令检查接口64.. syncapp--------创建一个公文包65.. sysedit--------系统配置编辑器66.sigverif-------文件签名验证程序67.ciadv.msc------索引服务程序68.shrpubw--------创建共享文件夹69.secpol.msc-----本地安全策略70.syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码71.. services.msc---本地服务设置72.Sndvol32-------音量控制程序73.. sfc.exe--------系统文件检查器74.sfc /scannow---windows文件保护75.ciadv.msc------索引服务程序76.tourstart------xp简介(安装完成后出现的漫游xp程序)77.taskmgr--------任务管理器78.eventvwr-------事件查看器79.eudcedit-------造字程序pmgmt.msc---计算机管理81.packager-------对象包装程序82.perfmon.msc----计算机性能监测程序83.charmap--------启动字符映射表84.cliconfg-------SQL SERVER 客户端网络实用程序85.Clipbrd--------剪贴板查看器86.conf-----------启动netmeeting87.certmgr.msc----证书管理实用程序88.regsvr32 /u *.dll----停止dll文件运行89.regsvr32 /u zipfldr.dll------取消ZIP支持90.cmd.exe--------CMD命令提示符操作详解 use ipipc$ " " /user:" " 建立IPC空链接 use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: use h: ipc$ 登陆后映射对方C:到本地为H: use ipipc$ /del 删除IPC链接 use h: /del 删除映射对方到本地的为H:的映射 user 用户名密码 /add 建立用户 user guest /active:yes 激活guest用户 user 查看有哪些用户 user 帐户名查看帐户的属性 localgroup administrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限 start 查看开启了哪些服务 start 服务名开启服务;(如:net start telnet, net start schedule) stop 服务名停止某服务 time 目标ip 查看对方时间 time 目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息 view 查看本地局域网内开启了哪些共享 view ip 查看对方局域网内开启了哪些共享 config 显示系统网络设置 logoff 断开连接的共享 pause 服务名暂停某服务 send ip "文本信息" 向对方发信息 ver 局域网内正在使用的网络连接类型和信息 share 查看本地开启的共享 share ipc$ 开启ipc$共享 share ipc$ /del 删除ipc$共享 share c$ /del 删除C:共享 user guest 12345 用guest用户登陆后用将密码改为12345 password 密码更改系统登陆密码stat -a 查看开启了哪些端口,常用netstat -anstat -n 查看端口的网络连接情况,常用netstat -anstat -v 查看正在进行的工作 netstat -p 协议名例:netstat -p tcq/ip 查看某协议使用情况stat -s 查看正在使用的所有协议使用情况124.nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名125.tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。

操作系统编程进程或作业先来先服务、高优先权、按时间片轮转调度算法

操作系统编程进程或作业先来先服务、高优先权、按时间片轮转调度算法
标准文档
实用文案
a=i; } } return a;} } } new(int s) /*定义执行进程后相关数据的修改*/ { int i,g=0; for(i=0;i<4;i++) { if(arrayTask[i].Status==0) continue; else { g=1; break; } } if(g==0) /*当处理的是第一个未执行的进程时执行*/ { arrayTask[s].StartTime=arrayTask[s].ArriveTime; arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime; arrayTask[s].RunTime=arrayTask[s].RequestTime; arrayTask[s].Status=1; g=2; } if(g==1) /*当处理的不是第一个未执行的进程时执行*/ { arrayTask[s].Status=1; for(i=0;i<4;i++) { if(arrayTask[i].Status==1) d=arrayTask[i].EndTime; } for(i=0;i<4;i++) /*查找最后执行的进程的完成时间*/ { if(arrayTask[i].EndTime>d&&arrayTask[i].Status==1) d=arrayTask[i].EndTime; } if(arrayTask[s].ArriveTime<d) /*判断修改的进程的到达时间是否在前一个执行的进程的完成时间前面 */ arrayTask[s].StartTime=d; else arrayTask[s].StartTime=arrayTask[s].ArriveTime;

WINDOWS网络编程(C,C++,VC++)编程

WINDOWS网络编程(C,C++,VC++)编程

• 四. 面向对象程序设计概述 • 1. 过程范型的语言也叫做过程性语言。C就是一种过程性语言。 • 2. 过程范型语言的主要特征是:程序由过程定义和过程调用组成,即 • 程序=过程+调用 • 3. 除了过程范型语言外,还有: • 模块程序设计范型、 • 函数程序设计范型、 • 进程程序设计范型等。 • 4. 面向对象程序设计范型主要特点: • 程序=对象+消息 • 5. 面向对象程序结构特点是:程序由类的定义和程序的使用两部分组
• 即由类定义和类使用两部分组成。 • 也可以说由类声明+类实现两部分组成。 • 类的使用部分有主函数和相关子函数组成。
• 分析(1). 一个c++程序可以作为一个文件存储, 这时文件的扩展名为“.cpp”,也可以分为几个文
件存储。若分为几个文件存储,一般是把类的声 明部分存放于扩展名为“.h”头文件中,而把类的
开发的C/C++集成开发环境。 • 10. Visual C++6.0的操作界面 • 启动Visual C++6.0集成开发环境的操作: • 单击“开始”按钮,拉出初始菜单。 • 在初始菜单中,单击选择”所有程序”; • 在”所有程序”子菜单中,单击选择“Microsoft Visual Studio6.0”; • 在“Microsoft Visual Studio6.0”子菜单中,单击选择“Microsoft
• 比较:C++程序:int main()

C程序: main()
• (2) C++程序和C程序的部分重要区别
• 1)C++程序和C程序在形式上基本一样,也是由函数组成,C++的主 函数要求在前面写上返回类型int,在函数体最后要有返回语句,如:

Windows进程管理工具设计与实现

Windows进程管理工具设计与实现

Windows进程管理工具设计与实现摘要Windows自带的任务管理器存在功能上的缺陷,如不能查看进程的模块及线程信息。

该课题设计就是模拟Windows任务管理器,开发一个功能更完善的Windows进程管理软件。

主要设计的是一个基于对话框的VC++程序,在主对话框上面放置了一个标签控件,并创建了任务、进程和系统信息三个页面,标签控件用于选择并显示页面。

三个页面分别用于显示当前运行的窗口程序、进程及进程模块、系统资源使用情况。

程序还实现了结束任务、切换任务、终止进程等对进程管理的基本功能。

在程序的设计过程中,通过调用Windows API函数而获得任务、进程、线程模块,以及系统资源使用情况等信息。

最后在Windows XP系统上进行测试,实现了进程管理的基本功能,为用户了解当前进程及系统资源使用情况提供了很好的参考。

关键词:任务管理器;线程;进程;APIThe design and implementation of the management toolfor WindowsAbstractThere is some defects in function in the Task Manager built-in Windows,For example,it doesn't show us the information of process modules and threads.The work of my designment is to follow the Windows Task Manager and develop a software for managing process which has improved function.This software is designed to be a programe based on a dialog write in the VC++.There is a label control in the main dialog box,And there are three pages for task,process and system information.The label control is used to select the page and dispaly it.The three pages are used respectively to display the information for task runs for the current,process and process modules,the utilization of system resources.The software also realized some basic function for managing process,such as ending the task,switching the task,terminating the process and so on. During the process of my programe,I get the information for tasks,process,thread modules and the utilization of system resource by calling the Windows API functions.Finally I test it on the Windows xp system.And it achieves the basic function for managing process.It provides a good reference for users to view the process current and the utilization of system resources.Key words: Task Manager; Threads; Process; API目录论文总页数:21页1 引言 (1)1.1 课题背景 (1)1.2 国内外研究现状 (1)1.3 本课题研究的意义 (1)1.4 本课题的研究方法 (1)1.5 进程与线程简介 (1)1.5.1 进程简介 (1)1.5.2 线程简介 (3)1.5.3 进程与线程的关系 (3)1.5.4 Windows自带的任务管理器分析 (4)2 主要功能及设计思路 (5)2.1 主要功能 (5)2.2 设计思路 (5)3 详细设计 (5)3.1 主框架的实现 (6)3.1.1 子对话框的显示 (6)3.1.2 实现菜单 (7)3.1.3 提升本程序权限 (8)3.2 任务列表页面设计 (8)3.2.1 显示任务信息 (8)3.2.2 结束任务 (10)3.2.3 切换任务 (11)3.3 进程列表页面设计 (11)3.3.1 显示进程信息 (12)3.3.2 显示模块及线程信息 (14)3.3.3 结束进程 (15)3.3.4 删除文件 (16)3.3.5 保存进程信息到文件 (16)3.4 系统性能页面设计 (17)3.4.1 绘制CPU使用率图 (17)3.4.2 绘制内存使用率图 (17)3.4.3 其他性能显示 (17)3.4.4 系统信息显示 (17)4 测试结果 (18)结论 (19)参考文献 (19)致谢 (20)声明 (21)1引言1.1课题背景随着计算机的广泛应用,很多的软件被安装在计算机上,使计算机运行的程序进程越来越多;很多的程序在运行时常出现异常(如不能正常结束、占用大量资源、发现异常的进程等)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "windows.h"#include "MainWindow.h"#include <QtWidgets/QApplication>#include <QDateTime>#include <QFile>SERVICE_STATUS m_ServiceStatus;SERVICE_STATUS_HANDLE m_ServiceStatusHandle;BOOL bRunning=true;void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); //服务主函数void WINAPI ServiceCtrlHandler(DWORD Opcode);BOOL InstallService(); //安装服务BOOL DeleteService();//删除服务//task -- 在此写入要实现的代码(服务开启时线程调用)voidDoTask(intargc, char *argv[]){bool flag=false;QApplicationa(argc, argv);//if(flag)qInstallMessageHandler(outputMessage);MainWindoww;if(flag)w.checkLockDog();//加密狗w.show();a.exec();}int main(intargc, char *argv[]){if(argc>1){if(_stricmp("install",argv[1]+1)==0){if(InstallService())printf("\n Service Installed Sucessfully\n");elseprintf("\n Service has been installed\n");}else if(_stricmp("delete",argv[1]+1)==0){if(DeleteService())printf("\n Service UnInstalledSucessfully\n");elseprintf("\nInstalledEasin Central Service Not Found\n");}else{printf("\nUnknown Switch Usage\nFor Install use Servicetest -i\nForUnInstall use Servicetest -d\n");}}else{SERVICE_TABLE_ENTRY DispatchTable[]={{L"GtServ",ServiceMain},{NULL,NULL}}; StartServiceCtrlDispatcher(DispatchTable);}return 0;}void WINAPI ServiceMain(DWORD argc, LPTSTR *argv){// DWORD status;// DWORD specificError;m_ServiceStatus.dwServiceType = SERVICE_WIN32; //指明可执行文件类型m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;//指明服务当前状态m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; //指明服务接受何种控制m_ServiceStatus.dwWin32ExitCode = 0;m_ServiceStatus.dwServiceSpecificExitCode = 0;m_ServiceStatus.dwCheckPoint = 0;m_ServiceStatus.dwWaitHint = 0;m_ServiceStatusHandle = RegisterServiceCtrlHandler(L"RXPACS",ServiceCtrlHandler);if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0){return;}m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;m_ServiceStatus.dwCheckPoint = 0;m_ServiceStatus.dwWaitHint = 0;if (!SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus)){}bRunning=true;while(bRunning){Sleep(3000);//Place Your Code for processing here....DoTask(argc,(char**)argv);bRunning=false;}return;}void WINAPI ServiceCtrlHandler(DWORD Opcode){switch(Opcode){case SERVICE_CONTROL_PAUSE:m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;break;case SERVICE_CONTROL_CONTINUE:m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;break;case SERVICE_CONTROL_STOP:m_ServiceStatus.dwWin32ExitCode = 0;m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;m_ServiceStatus.dwCheckPoint = 0;m_ServiceStatus.dwWaitHint = 0;SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus);bRunning=false;break;case SERVICE_CONTROL_INTERROGATE:break;}return;}BOOL InstallService(){WCHAR strDir[1024];SC_HANDLE schSCManager,schService;GetCurrentDirectory(1024,strDir);lstrcat(strDir,L"\\RXPACS.exe");schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL)return false;LPCTSTR lpszBinaryPathName=strDir;schService = CreateService((struct SC_HANDLE__ *)schSCManager, //服务管理数据库句柄L"RXPACS", //服务名L"RXPACS Service", //用于显示服务的标识SERVICE_ALL_ACCESS, //响应所有的访问请求SERVICE_WIN32_OWN_PROCESS, //服务类型SERVICE_AUTO_START, //启动类型(自动)SERVICE_ERROR_NORMAL, //错误控制类型lpszBinaryPathName, //服务程序磁盘文件的路径NULL, //服务不属于任何组NULL, //没有tag标识符NULL, //启动服务所依赖的服务或服务组,这里仅仅是一个空字符串NULL, //LocalSystem帐号NULL); //密码if (schService == NULL)return false;SERVICE_DESCRIPTION sdBuf;sdBuf.lpDescription = L"RXPACS软件后台服务";ChangeServiceConfig2(schService, SERVICE_CONFIG_DESCRIPTION, &sdBuf); CloseServiceHandle((struct SC_HANDLE__ *)schService);return true;}BOOL DeleteService(){HANDLE schSCManager;SC_HANDLE hService;schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);if (schSCManager == NULL)return false;hService=OpenService((struct SC_HANDLE__ *)schSCManager,L"RXPACS",SERVICE_ALL_ACCESS); if (hService == NULL)return false;if(DeleteService(hService)==0)return false;if(CloseServiceHandle(hService)==0)return false;elsereturn true;}voidoutputMessage(QtMsgType type, constQMessageLogContext&context, constQString&msg) {staticQMutexmutex;mutex.lock();QString text;switch(type){caseQtDebugMsg:text = QString("Debug:");break;caseQtWarningMsg:text = QString("Warning:");break;caseQtCriticalMsg:text = QString("Critical:");break;caseQtFatalMsg:text = QString("Fatal:");}QStringcontext_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line); QStringcurrent_date_time = QDateTime::currentDateTime().toString("yyyy-MM-ddhh:mm:ssddd");QStringcurrent_date = QString("(%1)").arg(current_date_time);QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);QFilefile("../serlog.txt");file.open(QIODevice::WriteOnly | QIODevice::Append);QTextStreamtext_stream(&file);text_stream<< message << "\r\n";file.flush();file.close();mutex.unlock();}。

相关文档
最新文档