当前位置:文档之家› VC++6开发Windows服务程序

VC++6开发Windows服务程序

VC++6开发Windows服务程序
VC++6开发Windows服务程序

VC++6开发Windows服务程序

https://www.doczj.com/doc/e69915414.html,/zhongguoren666/article/details/7528687

下面介绍使用VC++开发Windows服务程序。

首先运行VC++6,选择新建工程,在出现的下面窗口中选择”ATL COM AppWizard“,并选择工程放置位置和相应的工程名,然后选择确定按钮。

此时出现如下图窗口界面,在此界面中选择”服务(EXE)“,然后选择完成按钮。

在接下来的窗口中选择确定按钮。

则VC完成向导并生成相应代码(效果如下)。

程序的进入点是全局函数_tWinMain, 仔细看一下这个函数,我们会发现当我们运行程序时,可以加上参数,例如: winsvr /RegServer 或者winsvr -RegServer,这个是用来本地服务器注册(Register as Local S Register as Service erver)。

其中winsvr / Service 或者winsvr -Service,这个是服务的注册(Register as Service);winsvr /UnRegServer 或者winsvr -UnRegServer ,这个是服务的删除。

所以,当我们写好了服务程序,只要运行的时候加上参数Service ,这个时候在SCM 中就会看到我们的服务了。

每次编码后测试都要在命令行中加参数运行服务才可以在SCM中列出来这样很麻烦,因此可以采用如下方式来处理:选择VC IDE的菜单工程-> 设置, 再选择自定义组建面板(如下图所示)

在"$(TargetPath)" /RegServer的下面加上:"$(TargetPath)" /Service,这样当我们每次编码后编译程序,就不用再在命令行中去加参数执行我们的服务程序完成服务的注册了。

同时通过界面我们也看到,向导为我们建立了一个类:CServiceModule,全局变量_Module 就是这个类的实例。

Init():这个函数用于完成一些初始化工作;

Run():这个函数就是服务开始运行后的内容,我们接下来要修改的内容也就是从这里入手。Install():有如下一段代码

SC_HANDLE hService = ::CreateService(

hSCM, m_szServiceName, m_szServiceName,

SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,

SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,

szFilePath, NULL, NULL, _T("RPCSS\0"), NULL, NULL);

注意:如果服务中启动的程序具有窗口(即具有交互功能则要求使用如下代码)

SC_HANDLE hService = ::CreateService(

hSCM, m_szServiceName, m_szServiceName,

SERVICE_ALL_ACCESS, SERVICE_WIN32_SHARE_PROCESS | SERVICE_INTERACTIVE_PROCESS,

SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,

szFilePath, NULL, NULL, _T("RPCSS\0"), NULL, NULL);

这个CreateService函数原先如下:

SC_HANDLE CreateService(

SC_HANDLE hSCManager, // handle to SCM database

LPCTSTR lpServiceName, // name of service to start

LPCTSTR lpDisplayName, // display name

DWORD dwDesiredAccess, // type of access to service

DWORD dwServiceType, // type of service

DWORD dwStartType, // when to start service

DWORD dwErrorControl, // severity of service failure

LPCTSTR lpBinaryPathName, // name of binary file

LPCTSTR lpLoadOrderGroup, // name of load ordering group

LPDWORD lpdwTagId, // tag identifier

LPCTSTR lpDependencies, // array of dependency names

LPCTSTR lpServiceStartName, // account name

LPCTSTR lpPassword // account password

);

第六个参数是服务的启动类型。

SERVICE_DEMAND_START是手动启动,SERVICE_AUTO_START是自动启动。

第十一个参数是服务的依存关系,比如说服务的启动想要依存SQL Server的启动,那我们可以把这个参数写成:

_T("MSSQLSERVER\0");

如果我们写的服务不依存于其他的任何服务,那我们就将此参数设置为NULL就可以了。接下来我们实现我们需要实现的业务。

首先,我们在类CServiceModule中找到Run函数,并在Run函数中找到以下代码:MSG msg;

while (GetMessage(&msg, 0, 0, 0))

DispatchMessage(&msg);

并在此代码前加入自己的代码,我这里加入的代码:CustomFunc1()。

这里对应不同应用有不同写法:

1、如果要启动一个窗口进行交互,则代码如下:

定义两个成员函数CustomFunc1和CustomFunc2

void CServiceModule::CustomFunc1()

{

TCHAR szFilePath[MAX_PATH + 1];

GetModuleFileName(NULL, szFilePath, MAX_PATH);

(_tcsrchr(szFilePath, _T('\\')))[1] = 0; //删除文件名,只获得路径

CString str_url = szFilePath;

str_url=str_url+"B.exe";

LogEvent("运行程序:"+str_url);

UINT rtn=WinExec(str_url,SW_SHOW );

//UINT rtn=WinExec("c:\\windows\\system32\\cmd.exe",SW_SHOWNORMAL);

if(rtn>31){

LogEvent("调用成功");

}

else{

if(rtn==0){

LogEvent("内存不足");

}

else{

if(rtn==ERROR_BAD_FORMAT){ //ERROR_BAD_FORMAT = 11

LogEvent("EXE 文件无效");

}

else{

if(rtn==ERROR_FILE_NOT_FOUND){ //ERROR_FILE_NOT_FOUND = 2 LogEvent("文件名错误");

}

else{

if(rtn==ERROR_PATH_NOT_FOUND){ //ERROR_PATH_NOT_FOUND = 3

LogEvent("路径名错误");

}

else{

LogEvent("发生其它错误");

}

}

}

}

}

}

BOOL CServiceModule::CustomFunc2()

{

HDESK hdeskCurrent;

HDESK hdesk;

HWINSTA hwinstaCurrent;

HWINSTA hwinsta;

hwinstaCurrent = GetProcessWindowStation();

if (hwinstaCurrent == NULL){

LogEvent(_T("get window station err"));

return FALSE;

}

hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());

if (hdeskCurrent == NULL){

LogEvent(_T("get window desktop err"));

return FALSE;

}

//打开winsta0

hwinsta = OpenWindowStation("winsta0", FALSE,

WINSTA_ACCESSCLIPBOARD |

WINSTA_ACCESSGLOBALATOMS |

WINSTA_CREATEDESKTOP |

WINSTA_ENUMDESKTOPS |

WINSTA_ENUMERATE |

WINSTA_EXITWINDOWS |

WINSTA_READATTRIBUTES |

WINSTA_READSCREEN |

WINSTA_WRITEATTRIBUTES);

if (hwinsta == NULL){

LogEvent(_T("open window station err"));

return FALSE;

}

if (!SetProcessWindowStation(hwinsta)){

LogEvent(_T("Set window station err"));

return FALSE;

}

//打开desktop

hdesk = OpenDesktop("default", 0, FALSE,

DESKTOP_CREATEMENU |

DESKTOP_CREATEWINDOW |

DESKTOP_ENUMERATE |

DESKTOP_HOOKCONTROL |

DESKTOP_JOURNALPLAYBACK |

DESKTOP_JOURNALRECORD |

DESKTOP_READOBJECTS |

DESKTOP_SWITCHDESKTOP |

DESKTOP_WRITEOBJECTS);

if (hdesk == NULL){

LogEvent(_T("Open desktop err"));

return FALSE;

}

SetThreadDesktop(hdesk);

CustomFunc1();

if (!SetProcessWindowStation(hwinstaCurrent)) return FALSE;

if (!SetThreadDesktop(hdeskCurrent))

return FALSE;

if (!CloseWindowStation(hwinsta))

return FALSE;

if (!CloseDesktop(hdesk))

return FALSE;

return TRUE;

}

2、无交互窗口,则代码如下:

void CServiceModule::CustomFunc1(){

LogEvent(_T("Custorm Function Invoked")); //这里可以改成任何你需要的代码,当然不能有显示窗口之内的代码,要显示窗口之内代码请采用上面方法1。

}

现在可以编译并执行程序了。

此时会编译时会报告一个错误:'CString' : undeclared identifier。

这时需要查看工程的一些设置:

菜单工程->设置,常规面板,默认的设置是:使用MFC作为静态连接库。如果是这个设置则做如下工作:

然后我们打开StdAfx.h文件,并找到#include 位置,并在它之前加入#include 。重新编译可以了。

如果需要修改出现在scm中的服务名,可以在工程中找到资源文件中的IDS_SERVICENAME项的内容就可以了。

注意:编译好了的程序需要在控制台中输入如下指令

1、注册服务

winsvr /regserver

winsvr /service //此条指令十分重要,如果不执行则在scm中是看不到此服务的

windows服务大全

windows服务大全 一、什么是系统服务 在Windows 2000/XP/2003系统中,服务是指执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是低层(接近硬件)程序。通过网络提供服务时,服务可以在Active Directory(活动目录)中发布,从而促进了以服务为中心的管理和使用。 服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如客户端/服务器应用程序、Web服务器、数据库服务器以及其他基于服务器的应用程序。 二、配置和管理系统服务 通过上面的阅读,相信你已对Windows系统服务有所了解,与系统注册表类似,对系统服务的操作,我们可以通过“服务管理控制台”来实现。 以管理员或Administrators组成员身份登录,单击“开始→运行”菜单项,在出现的对话框中键入“Services.msc”并回车,即可打开“服务管理控制台”。你也可以单击“开始→控制面板→性能和维护→管理工具→服务”选项来启动该控制台。 在服务控制台中,双击任意一个服务,就可以打开该服务的属性对话框。在这里,我们可以对服务进行配置、管理操作,通过更改服务的启动类型来设置满足自己需要的启动、关闭或禁用服务。 在“常规”选项卡中,“服务名称”是指服务的“简称”,并且也是在注册表中显示的名称;“显示名称”是指在服务配置界面中每项服务显示的名称;“描述”是为该服务作的简单解释;“可执行文件的路

径”即是该服务对应的可执行文件的具体位置;“启动类型”是整个服务配置的核心,对于任意一个服务,通常都有3种启动类型,即自动、手动和已禁用。只要从下拉菜单中选择就可以更改服务的启动类型。“服务状态”是指服务的现在状态是启动还是停止,通常,我们可以利用下面的“启动”、“停止”、“暂停”、“恢复”按钮来改变服务的状态。 下面让我们来看看3种不同类型的启动状态: 自动:此服务随着系统启动时启动,它将延长启动所需要的时间,有些服务是必须设置为自动的,如Remote Procedure Call(RPC)。由于依存关系或其他影响,其他的一些服务也必须设置为自动,这样的服务最好不要去更改它,否则系统无法正常运行。 手动:如果一个服务被设置为手动,那么可以在需要时再运行它。这样可以节省大量的系统资源,加快系统启动。 已禁用:此类服务不能再运行。这个设置一般在提高系统安全性时使用。如果怀疑一个陌生的服务会给你的系统带来安全上的隐患,可以先尝试停止它,看看系统是否能正常运行,如果一切正常,那么就可以直接禁用它了。如果以后需要这个服务,在启动它之前,必须先将启动类型设置为自动或手动。 单击“依存关系”选项卡,在这里我们可以看到,在顶端列表中指出运行选定服务所需的其他服务,底端列表指出了需要运行选定服务才能正确运行的服务。它说明了一些服务并不能单独运行,必须依靠其他服务。在停止或禁用一个服务之前,一定要看看这个服务的依存关系,

Windows服务列表

Windows服务列表 在优化Windows xp系统时,需要关闭一些不常用的服务,但是在众多的服务项目中,它们是做什么用的?能关吗?这往往困恼很多新手。这里收集到的这篇关于xp系统服务的详细解读资料,希望对需要优化系统的朋友有所帮助。 1、Alerter Alerter(警示器)服务的进程名是Service.exe(即启动这个服务后在后台运行的进程名称,可以通过任务管理器看到,下同)。Alerter服务的功能是,WinXP将系统上发生的与管理有关的事件以警示(Alert)信息传送至网络上指定的电脑或用户,例如当发生打印错误或硬盘即将写满等事件,这类警示信息由WinXP 的警示器服务(Alerter Service)收集、送出。尽管Alerter依存的服务并没有Messenger(信使)服务,但Alerter服务必须依靠后者才能送出信息,故在启动Alerter服务后还必须确定Messenger服务也在工作状态,而接收的电脑也必须启动Messenger服务。由于Alerter服务运行后,服务是用户可以发送“弹出(Pop-up)”信息给其他用户,这些信息有可能被攻击者用来实施攻击,如诱骗用户修改口令等,从而造成安全隐患。同时该服务使得用户账号泄漏,也有可能被攻击者利用来进行口令猜测攻击。所以对于家庭单机用户,甚至对于绝大多数小型的局域网来说,这个功能是完全可禁用的,不仅节省了系统资源和加快启动速度,也提高了机器的安全性。 2、Application Layer Gateway Service 简称“ALG”(应用层网关)的进程名是alg.exe,WinXP Home/Pro默认安装的启动类型为手动。ALG 又被称为代理服务器(Proxy Server),是网络防火墙从功能层面上分类的一种。当内部计算机与外部主机连接时,将由代理服务器担任内部计算机与外部主机的连接中继者。使用ALG的好处是隐藏内部主机的地址和防止外部不正常的连接,如果代理服务器上未安装针对该应用程序设计的代理程序时,任何属于这个网络服务的封包将无法通过防火墙。通俗点说,具体到ALG本身,它就是附带的Internet连接共享/防火墙的具体控管程序,如果你需要启动这二者,这个服务是必备的。当然,只有一台计算机的上网家庭可以考虑禁用这个服务,不过WinXP内置的防火墙效果还是不错的,如果不是坚持要用第三方的防火墙,还是开着它吧。 3、Application Management AppMent(应用程序管理服务)的进程名是Svchost.exe,WinXP Home/Pro默认安装的启动类型为手动,没有任何依存服务关系。从Win2000开始,微软引入了一种基于MSI文件格式(应用程序安装信息程序包文件)的全新、有效软件管理方案——即应用程序管理组件服务(Application Management),它不仅管理软件的安装、删除,而且可使用此项服务修改、修复现有应用程序,监视文件复原并通过复员排除基本故障等。通常这个服务我们保持其默认状态较好。 可能许多朋友都有印象,当年ACDSee4.0刚发布时,由于安装制作上的考虑不周,并没有考虑到那个时候大多数人的系统还并不支持MSI安装格式,结果只得又去下载安装一个名为Windows Installer的MSI 辅助文件才解决问题。通常以MSI文件格式安装的软件十分好认,比如说Office XP,当你安装后再次运行

用C语言编写Windows服务程序的五个步骤

用C语言编写Windows服务程序的五个步骤 https://www.doczj.com/doc/e69915414.html,/Article/kfyy/cyy/jszl/200603/3842.html Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。 当初我写第一个NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。这就是为什么我觉得 C 更加适合于编写初级服务程序或者实现简单后台任务的服务。在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。 服务是一个运行在后台并实现勿需用户交互的任务的控制台程序。Windows NT/2000/XP 操作系统提供为服务程序提供专门的支持。人们可以用服务控制面板来配置安装好的服务程序,也就是 Windows 2000/XP 控制面板|管理工具中的“服务”(或在“开始”|“运行”对话框中输入 services.msc /s——译者注)。可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务。 本文将首先解释如何创建一个定期查询可用物理内存并将结果写入某个文本文件的服务。然后指导你完成生成,安装和实现服务的整个过程。 第一步:主函数和全局定义 首先,包含所需的头文件。例子要调用 Win32 函数(windows.h)和磁盘文件写入(stdio.h): 接着,定义两个常量:

WINDOWS 2003 SERVER 进程详解

Windows2003Server进程详解 svchost.exe文件对那些从动态链接库中运行的服务来说是一个普通的主机进程名;最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行):smss.exe Session Manager csrss.exe子系统服务器进程winlogon.exe管理用户登录services.exe包含很多系统服务lsass.exe管理IP安全策略以及启动 ISAKMP/Oakley(IKE)和IP安全驱动程序。(系统服务) 产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务) svchost.exe包含很多系统服务svchost.exe SPOOLSV.EXE将文件加载到内存中以便迟后打印。(系统服务) explorer.exe资源管理器internat.exe托盘区的拼音图标附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少):mstask.exe允许程序在指定时间运行。(系统服务) regsvc.exe允许远程注册表操作。(系统服务) winmgmt.exe提供系统管理信息(系统服务)。 inetinfo.exe通过Internet信息服务的管理单元提供FTP连接和管理。(系统服务)tlntsvr.exe允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务)允许通过Internet信息服务的管理单元管理Web和FTP服务。(系统服务) tftpd.exe实现TFTP Internet标准。该标准不要求用户名和密码。远程安装服务的一部分。(系统服务) termsrv.exe提供多会话环境允许客户端设备访问虚拟的Windows2000Professional 桌面会话以及运行在服务器上的基于Windows的程序。(系统服务) dns.exe应答对域名系统(DNS)名称的查询和更新请求。(系统服务) 以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉tcpsvcs.exe

C#编写的windows服务用命令行安装的详细步骤

第一步:建立好服务,写好代码 第二步:安装 步骤:win+R -----→CMD -------输入microsoft的framework的相应版本的执行程序位置(如:C:\Windows\https://www.doczj.com/doc/e69915414.html,\Framework\v4.0.30319\InstallUtil.exe -----图一所示文件)-→空一格再输入你的服务的执行文件的路径(如:D:\zt_documents\服务\SSY.DealerLoginStateService.root\SSY.DealerLoginStateService\SSY.LoginStateService\SSY.LoginSt ateService\bin\Debug\XX.exe(这里的.exe写自己的项目的名称) 图三所示文件)--→回车(如果安装成功可以都到如图2所示的提示)

图一

图二

图三 第三步:启动服务 打开服务管理,找到你自己的服务启动 第四步:卸载 步骤:win+R -----→CMD -------输入microsoft的framework的相应版本的执行程序位置(如:C:\Windows\https://www.doczj.com/doc/e69915414.html,\Framework\v4.0.30319\InstallUtil.exe -u -----图一所示文件)-→空一格再输入-u -→空一格再输入你的服务的执行文件的路径(如:D:\zt_documents\服务\SSY.DealerLoginStateService.root\SSY.DealerLoginStateService\SSY.LoginStateService\SSY.LoginSt

Windows服务

Windows 服务应用程序介绍 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。有关服务和 Windows 会话的更多信息,请参见MSDN Online 的 Platform SDK 文档中的“About Services”部分。 注意Windows 服务应用程序项目模板和相关的功能在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见Visual Basic 标准版功能或Visual C# 标准版的功能。 通过创建作为服务安装的应用程序,可以轻松地创建服务。例如,假设要监视性能计数器数据并对阈值做出反应。可以编写一个侦听性能计数器数据的 Windows 服务应用程序、部署该应用程序并开始收集和分析数据。 将服务创建为 Microsoft Visual Studio .NET 项目,并在其中定义特定代码,以控制可以发送到服务的命令和接收到这些命令时采取的操作。可以发送到服务的命令包括开始、暂停、继续和停止该服务,以及执行自定义命令。 创建并生成了应用程序后,可以通过运行命令行实用工具InstallUtil.exe 并将路径传递给服务的可执行文件,或通过使用 Visual Studio 的部署功能来安装该应用程序。然后可以使用服务控制管理器启动、停止、暂停、继续和配置服务。这些任务中有许多也可以在“服务器资源管理器”的“服务”节点中或通过使用ServiceController类来实现。 服务应用程序与其他 Visual Studio .NET 应用程序对比 服务应用程序与其他许多项目类型的功能在几个方面有所不同: ?必须将服务应用程序项目创建的已编译可执行文件安装在服务器上,此项目才能以有意义的方式运行。不能通过按 F5 键或 F11 键来调试或运行服务应 用程序;不能立即运行服务或进入并单步执行其代码。相反,必须安装和启动服务,然后将一个调试器附加到服务的进程中。有关更多信息,请参见调试 Windows 服务应用程序。 ?与一些类型的项目不同,对于服务应用程序,必须为其创建安装组件。安装组件在服务器上安装和注册服务,并用 Windows 服务控制管理器为服务创 建一个项。有关更多信息,请参见将安装程序添加到服务应用程序。

C# Windows服务开发

一、VS2012下开发Windows服务 1、打开VS2012,新建项目,选择Windows服务,此处我以开发一个定时自动发送邮件的服务来做介绍,如下图: 2、创建好后,编译器会自动创建一些文件,其中会有一个Service1类文件,该文件是服务的关键,我们可以将其重命名,这里我将其命名为MainService,如下图: 3、在MainService的后台代码中会自动创建一些方法,包括服务的启动和停止方法等,如下图:

4、将服务启动时要执行的操作放在OnStart方法中,服务停止时要执行的操作放在OnStop方法中 5、在MainService.cs设计器中,单击邮件,选择选择添加安装程序,便会生成一个ProjectInstaller.cs的文件,如图所示: 6、设置ProjectInstaller.cs的属性,切换到属性设置界面 (1)选择serviceInstaller1,并设置相应属性如下图所示:

其中:Description属性用于设置服务安装之后再服务界面上显示的描述信息; DisplayName属性用于设置服务安装之后再服务界面上显示的服务名称; ServiceName属性用于设置服务的名称,此名称必须与ServiceBase类的ServiceName 属性设置的名称一致,该名称用于系统标识此服务,可以理解成DisplayName为ServiceName的别名; StartType属性用于设置服务的启动方式。 (2)选择serviceProcessInster1,设置其属性如下:

此处主要设置Account属性,该属性用来指示运行该服务时的账户类型,一般设置为LocalSystem。 7、到此步一个简单的windows服务就创建好了,编译程序会生成一个EmailService.exe 的可执行文件,接下来便是安装服务了。 Windows服务的安装有多种方式,比如可以再cmd下调用命令来安装,也可以写一个安装程序来安装,此处介绍使用bat批处理来安装。 1、安装Windows服务需要用到InstallUtil.exe程序,该程序位于: C:\Windows\https://www.doczj.com/doc/e69915414.html,\Framework64\v4.0.30319 .NET4.0 C:\Windows\https://www.doczj.com/doc/e69915414.html,\Framework64\v2.0.50727 .NET2.0 2、我们可以再批处理命令中直接调用以上目录中的InstallUtil.exe程序,也可以将该程序拷贝到应用程序的目录下,此处我选择奖该程序拷贝到应用程序的目录下,同时将批处理文件也创建在应用程序的的目录下,如下图所示:

Windows服务开发实例

C#Windows服务程序开发实例介绍 C#Windows服务程序开发实例程序的目的和用途: 很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动。windows服务在开机未进行用户登录前就启动了。正是利用这一点,解决一些服务器自动重启后特定软件也自动启动的问题。 C#Windows服务程序开发1. 新建一个服务项目 visual C#----windows----windows服务; C#Windows服务程序开发2. 添加一个dataset(.xsd),用于存储启动目标的路径,日志路径等。 在dataset可视化编辑中,添加一个datatable,包含两列 StartAppPath 和LogFilePath。分别用于存储目标的路径、日志路径。 我认为利用dataset.xsd存储配置参数的优势在于可以忽略xml解析的具体过程直接使用xml文件。 在dataset中提供了ReadXml方法用于读取xml文件并将其转换成内存中的一张datatable表,数据很容易取出来!同样,WriteXml方法用于存储为xml格式的文件,也仅仅需要一句话而已。 C#Windows服务程序开发3. program.cs文件作为程序入口,代码如下: https://www.doczj.com/doc/e69915414.html,ing ; https://www.doczj.com/doc/e69915414.html,ing System.ServiceProcess; https://www.doczj.com/doc/e69915414.html,ing System.Text; https://www.doczj.com/doc/e69915414.html,space WindowsServices_AutoStart 5.{ 6.static class Program 7.{ 8./// ﹤summary﹥ 9./// 应用程序的主入口点。 10./// ﹤/summary﹥ 11.static void Main() 12.{ 13.ServiceBase[] ServicesToRun;

Windows可以停止的服务进程

Windows可以停止的服务进程 2009.8.8 今天实验室多出来一台电脑,刚好在我的桌上,我就脸皮厚下默认确实是给俺分配的了,再也不用每天来回背着笔记本了。但可能由因此公用的电脑,运行的速度可想而知了,桌面上一堆的文件夹,启动项也是电脑上装的软件开机时都会自动启动一遍,任务治理器也是有专门多惊奇的进程。 Windows有专门多不重要的服务进程,这些进程能够停止关闭的,有的进程可能100年也用不到。在运行里直截了当输入services.msc命令能够打开服务选项,右击相关服务进程,属性勾选“已禁用”,即可终止。超级兔子或优化大师也有服务查看停止功能。 能够禁用的系统服务进程(zz) Alerter 微软:通知选取的使用者及运算机系统治理警示。假如停止那个服务,使用系统治理警示的程序将可不能收到通知。假如停用那个服务,所有依存于它的服务将无法启动。 补充:一样家用运算机全然不需要传送或接收运算机系统治理来的警示(Administrative Alerts),除非你的运算机用在局域网络上 依存:Workstation 建议:可禁止 Application Layer Gateway Service 微软:提供因特网联机共享和因特网联机防火墙的第三方通讯协议插件的支持 补充:假如你不使用因特网联机共享(ICS) 提供多台运算机的因特网存取和因特网联机防火墙(ICF) 软件你能够关掉 依存:Internt Connection Firewall (ICF) / Internet Connection Sharing (ICS) 建议:已停用 Application Management (应用程序治理) 微软:提供指派、发行、以及移除的软件安装服务。 补充:如上说的软件安装变更的服务 建议:手动 Automatic 更新 微软:启用重要Windows 更新的下载及安装。假如停用此服务,能够手动的从Windows 更新网站上更新操作系统。 补充:承诺Windows 于背景自动联机之下,到Microsoft Servers 自动检查和下载更新修补程序 建议:已停用 ClipBook (剪贴簿) 微软:启用剪贴簿检视器以储存信息并与远程运算机共享。假如那个服务被停止,剪贴簿检视器将无法与远程运算机共享信息。假如那个服务被停用,任何明确依存于它的服务将无

Windows服务编写原理及探讨

Windows服务编写原理及探讨 有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执行,这就是所谓的服务了。 (一)服务的基础知识 Question 1. 什么是服务?它的特征是什么? 在NT/2000中,服务是一类受到操作系统优待的程序。一个服务首先是一个Win32可执行程序,如果要写一个功能完备且强大的服务,需要熟悉动态连接库(Dlls)、结构异常处理、内存映射文件、虚拟内存、设备I/O、线程及其同步、Unicode以及其他的由WinAPI函数提供的应用接口。当然本文讨论的只是建立 一个可以安装、运行、启动、停止的没有任何其他功能的服务,所以无需上述知识仍可以继续看下去,我会在过程中将理解本文所需要的知识逐一讲解。 第二要知道的是一个服务决不需要用户界面。大多数的服务将运行在那些被锁在某些黑暗的,冬暖夏凉的小屋子里的强大的服务器上面,即使有用户界面一般也没有人可以看到。如果服务提供任何用户界面如消息框,那么用户错过这些消息的可能性就极高了,所以服务程序通常以控制台程序的形式被编写,进 入点函数是main()而不是WinMain()。 也许有人有疑问:没有用户界面的话,要怎样设置、管理一个服务?怎样开始、停止它?服务如何发出警告或错误信息、如何报告关于它的执行情况的统计数据?这些问题的答案就是服务能够被远程管理, Windows NT/2000提供了大量的管理工具,这些工具允许通过网络上的其它计算机对某台机器上面的服务进行管理。比如Windows 2000里面的“控制台”程序(mmc.exe),用它添加“管理单元”就可以管理本机或其他机器上的服务。

VC编写Windows服务程序

#include #include #include TCHAR szServ iceN ame[] = _T("My TestSer v ice"); DWORD dwThreadID; HANDLE hEvent = INVALID_HANDLE_VALUE; SERVICE_STATUS s tatus; SERVICE_STATUS_HANDLE hServ iceStatus; v oi d Init(); BOOL IsSer v iceInstalled(); BOOL InstallSer v ice(); BOOL U ninstallSer v ice(); BOOL Ser v iceCtrlStart(); BOOL Ser v iceCtrlStop(); v oi d WINAPI Ser v iceMai n(); v oi d WINAPI Ser v iceStrl(DWORD dwOpc ode); v oi d LogEv ent(LPCTSTR pszFormat, ...); //Usuage // Ins tall ser v ice: //TestServ ic e.exe /i nstall // Uninstall ser v ice: //TestServ ic e.exe /unins tall // Start ser v ice: //TestServ ic e.exe /s tart // Stop s erv ic e: //TestServ ic e.exe /s top

Windows常见进程分析

Windows常见进程分析 向阳 摘要: 进程概念的引入是为了使多个作业并发运行,在操作系统实现了多道程序设计以后为了提高的运行效率,系统允许同时有多个作业驻留内存,并发运算,这样计算机内就存在了竞争。操作系统的进程管理模块,就是为了处理这种竞争而设计的。管理和控制好程序的执行,组织和协调程序对处理机的争夺使用,最大限度地提高处理机的利用率,是计算机进程所需要解决的问题。 关键词:进程、操作系统 一、进程概述 1.进程概念 进程是执行程序的机制,可以理解为程序对数据或请求的处理过程。进程主要有以下几个方面组成:至少一个可执行的程序;一个独立的进程用户空间;系统资源(包括输入输出设备、文件等);一个执行栈区,包含运行现场信息【3】。操作系统相关的进程管理和资源管理模块负责创建进程、为进程加载用户态运行程序、为进程分配资源、调度进程占用处理机、支持进程间通信等。可以把操作系统看成支持进程并且对进程所用系统资源进行管理的系统。 2.进程控制块 为了描述进程的运行变化情况,操作系统为每个进程定义了一个数据结构,叫进程控制块。它包含了进程的描述信息和管理控制信息,是进程动态性的集中体现。进程控制块包含三大类信息:进程标识信息、处理机状态信息、进程控制信息。 3.进程的状态 为了便于管理,进程在从无到有直到完成运行而消亡的整个生命周期内,需要经历状态的转换,按不同的层次分为三态、五态和七态【2】。通常进程主要出于五种状态,即运行状态、就绪状态、阻塞状态、创建状态和结束状态。 4.进程调度 操作系统管理系统的有限资源,当有多个进程要使用这些资源时,鉴于资源的有限性,必须按照一定的原则选择进程来占用资源,即为调度【1】。针对使用者占用不同资源调度有高级调度、中级调度和低级调度。把CPU的调度分为三级有利于提高系统的资源利用率。进程调度通常采用非抢先(或非剥夺)和抢先(剥夺)两种方式。 进程的调度对于有不同设计目的的系统,通常才有不同的算法,以尽可能减少作业进程的优先级调度法等待时间和转换时间,提高系统资源的利用率。处理机调度通常采用以下算法:先来先服务算法、最短作业的进程优先调度法、响应比高者优先调度法、轮转法和多级反馈队列轮转法。 5.线程 为了实现程序之间的并行执行,操作系统围绕进程这个概念进行设计和构造。进程在逻辑上表示操作系统必须做的一个作业,线程表示完成该作业的许多可能的子任务。线程是进程中的一个可执行实体,是被操作系统调度的一个独立单位。一个进程可以有多个线程,多线程共享该进程拥有的所有资源。一个线程也由一个线程控制块描述,它包含系统管理线程所需的全部信息。一般由如下几部分组成:一个唯一的标识符;表示处理机状态和运行现场的一组寄存器;两个用于用户天河和心态调用时进行参数传递的堆栈;一个独立的程序计数器;关联的进程和线程指针。【2】 二、Windous具体进程分析 在Windows操作系统中,打开任务管理器,单击“进程”我们可以看到一系列正在运行的进程。下面选取一些主要进程介绍如下:

windows服务程序的编写

摘要:几乎所有的操作系统在启动的时候都会启动一些不需要与用户交互的进程,这些进程在Windows中就被称作服务。它由服务程序、服务控制程序(SCP,service control program)和服务控制管理器(SCM,service control manager)三个组件构成。本文针对服务程序与服务控制程序的编写进行综合讲述。 关键词:Windows,服务,VC++ ?1 服务介绍 几乎所有的操作系统在启动的时候都会启动一些不需要与用户交互的进程,这些进程在Windows中就被称作服务。它通常用于实现客户/服务器模式中的服务器方,如我们常见的Web服务IIS,当操作系统在启动后它就自动被运行,不管是否有人登陆到系统只要系统开启它就能得到运行。 服务程序、服务控制程序(SCP,service control program)和服务控制管理器(SCM,service control manager)组成了Windows服务。我们可以通过服务控制程序操纵服务控制管理器来配置、启动、暂停、停止服务程序。其中服务程序和服务控制程序可以由我们自己来编写扩展,而服务控制管理器(\windows\system32\servics.exe)则是操作系统内置的一个部件。首先我们来了解一下SCM的工作情况,然后我们介绍服务程序的编写和服务控制时所涉及API的使用。 ?2 服务控制管理器 SCM本身也是一个服务程序(\windows\system32\servics.exe),作为windows的后台服务运行的。Winlogon在系统引导的早期会将SCM启动起来。SCM的服务入口函数首先创建一个初始化为无信号的同步事件对象(SvcCtrlEvent_A3752DX);接下来,它开始建立一个内部服务数据库,这个数据库要按事先规定好的一个顺序列出所有服务组,并记录与服务相关的详细信息;当这个数据库建立完成时SCM就开始按顺序启动那些启动方式为自动的服务,如果有服务要动行于指定用户账户中时还要调用LSASS,如果服务启动失败则会被放入一个名为ScFailedDrivers的列表中。当这些工作都完成后,SCM将同步事件对象SvcCtrlEvent_A3752DX置为有信号状态;并做好系统停机的准备。 当系统要关机时会向Windows子系统进程Csrss发送一个消息,以便调用Csrss的停机例程。Csrss会对所有活动的进程循环通知系统正在停机。对于除SCM以外的每一个系统进程如果

c开发windowsservice程序

C#开发Windows Service程序 Windows Service概念介绍 Windows Service,也称Windows服务,是32位Windows 操作系统中一种长期运行的后台程序。它们长期后台运行,没有用户界面,默默无闻,但它们却是支持Windows正常 运行的幕后英雄,却永无出头之日。 Windows服务程序为其他系统模块提供了非常重要的服务,而且各个Windows服务分工明确,比如IISAdmin服务提供WEB内容的发布功能,若IISAdmin服务不启动,则静态HTML页面、ASP、https://www.doczj.com/doc/e69915414.html,或者WebService等等统统不行;有个名为“Print Spooler”的服务用于提供打印支持,若该服务不启动,则任何软件都不能进行打印,比如Word,记 事本或者报表软件等等。 Windows启动后在没有用户登录时就会启动Windows服务。Windows NT和Windows2000,以及更新的版本操作系统能运行Windows服务,但Windows98及其前期版本是不能运行服务的。 我们打开Windows资源管理器,在左边的树状列表中选中“桌面-控制面板-管理工具”。

在右边的列表中打开“服务”项目即可打开Windows服务管 理器。 在这些服务中,有我们最熟悉的IIS Admin和World Wide Web Publishing服务了。我们双击一个服务项目即可打开服务属性对话框。 Windows服务有一个服务名称属性,该属性是服务的惟一的不可重复的名称,我们可以在命令行中使用命令“net start 服务名称”来启动服务,使用“net stop 服务名称”来停止服务。Windows服务的启动类型有自动,手动和已禁用。当启动类型为自动时,Windows启动后不等用户登录就自动启动服务,当启动类型为手动时,需要某个操作员登录后点击这里的“启动”按钮来启动服务,而当启动类型为已禁用时,Windows 服务不能启动。 该页面中的“启动”按钮用于启动尚未启动的Windows服务,运行提供服务的进程;“停止”按钮用于停止已经启动的服务,杀死服务进程;而“暂停”按钮用于通知服务进程暂时停止提 供服务,但服务进程依然存在;而“恢复”按钮用于通知处于 暂停模式的服务进程重新提供服务。 我们可以查看服务属性对话框的“登录”页面。

Windows系统进程分析总结

Windows系统进程分析总结 对于有电脑的朋友如何让自己的爱机正常顺利的工作,先简单的认识一下自己的系统进程是必不可少的一步,了解自己电脑的进程有助于及时发现异常进程和解决一些简单的病毒攻击。在下简单的总结了一下常用的进程,希望能给网友们带来方便。 1、audiodg.exe : Windows音频设备管理程序。 2、avp.exe : 属于Kaspersky卡巴斯基杀毒软件相关程序,有两个avp.exe属正常现象。一个用户名是电脑名字,一个用户名是系统,一个是实时监控的进程(也就是监控其他的),另一个是卡巴自我保护的进程,有时病毒也会以该进程名称伪装。 3、csrss.exe : 是微软客户端、服务端运行时子系统,管理Windows图形相关任务。 4、dwm.exe : VistaAeroGlass相关程序,让Vista系统拥有玻璃化3D的界面风格。(在windows7中也存在这个进程) 5、explorer.exe : 是Windows程序管理器或者Windows资源管理器,它用于管理Windows图形壳,包括开始菜单、任务栏、桌面和文件管理,删除该程序会导致Windows 图形界面无法适用。 6、iexplore.exe: 是Microsoft Internet Explorer的主程序。这个微软Windows应用程序让你在网上冲浪,和访问本地Interanet网络。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。iexplore.exe同时也是Avant网络浏览器的一部分,这是一个免费的基于Internet Explorer的浏览器。注意iexplore.exe也有可能是Trojan.KillAV.B 病毒,该病毒会终止你的反病毒软件,和一些Windows系统工具,该

c#开发和部署windows服务

c#开发和部署windows服务

c# 创建Windows服务 ( Installutil .exe方式加载 ) 一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。在以前,编写Windows服务程序需要程序员很强的C或C++功底。然而现在在Visual https://www.doczj.com/doc/e69915414.html,下,你可以运用C++或Visual C#或Visual https://www.doczj.com/doc/e69915414.html,很轻松的创建一个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服务程序没有用户界面,所以基于用户界面的API函数对其是没有多大的意义。为了能使一个 Windows服务程序能够正常并有效的在系统环境下工作,程序员必须实现一系列的方法来完成其服务功能。Windows服务程序的应用范围很广,典型的Windows服务程序包含了硬件控制、应用程序监视、系统级应用、诊断、报告、Web和文件系统服务等功能。 二.创建Windows服务程序: 在介绍如何创建Windows服务程序以前,我先向大家介绍一下.Net框架下与Windows服务相关的命名空间和其中的类库。.Net 框架大大地简化了Windows 服务程序的创建和控制过程,这要归功于其命名空间中的功能强大的类库。和Windows服务程序相关的命名空间涉及到以下两个:System.ServiceProcess 和System.Diagnostics。 要创建一个最基本的Windows服务程序,我们只需要运用.Net框架下的System.ServiceProcess命名空间以及其中的四个类:ServiceBase、ServiceInstaller、ServiceProcessInstaller以及ServiceController. 其中 ServiceBase类定义了一些可被其子类重载的函数,通过这些重载的函数,服务控制管理器就可以控制该Windows服务程序了。这些函数包括:OnStart ()、OnStop()、OnPause()以及OnContinue()等四个。而且ServiceBase

C++ 实现 Windows服务进程

#include "windows.h" #include "MainWindow.h" #include #include #include 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"); else printf("\n Service has been installed\n"); } else if(_stricmp("delete",argv[1]+1)==0)

windows操作系统常见进程你知道哪些

windows操作系统常见进程你知道哪些system process 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描述: Windows页面内存管理进程,拥有0级优先。 是否为系统进程: 是 alg.exe 进程文件: alg or alg.exe 进程名称: 应用层网关服务 描述: 这是一个应用层网关服务用于网络共享。 是否为系统进程: 是 csrss.exe 进程文件: csrss or csrss.exe 进程名称: Client/Server Runtime Server Subsystem 描述: 客户端服务子系统,用以控制Windows图形相关子系统。是否为系统进程: 是 ddhelp.exe 进程文件: ddhelp or ddhelp.exe

进程名称: DirectDraw Helper 描述: DirectDraw Helper是DirectX这个用于图形服务的一个组成部分。 是否为系统进程: 是 dllhost.exe 进程文件: dllhost or dllhost.exe 进程名称: DCOM DLL Host进程 描述: DCOM DLL Host进程支持基于COM对象支持DLL以运行Windows程序。 是否为系统进程: 是 inetinfo.exe 进程文件: inetinfo or inetinfo.exe 进程名称: IIS Admin Service Helper 描述: InetInfo是Microsoft Internet Infomation Services (IIS)的一部分,用于Debug调试除错。 是否为系统进程: 是 internat.exe 进程文件: internat or internat.exe 进程名称: Input Locales 描述: 这个输入控制图标用于更改类似国家设置、键盘类型和日期格式。 是否为系统进程: 是

相关主题
文本预览
相关文档 最新文档