1. 怎么把一个程序写入服务
要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务, Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows NT Resource Kit里,如果你没有,自己下载
把这两个程序保存在一个方便的位置,例如C盘根目录下。举例来说明,把OE作为一个服务添加进Windows XP Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\ instsrv.exe Mail c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail 则是你想添加的服务名称。
运行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,数值可以写一些你对这个服务的描述
接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。
注销一下看看。为了让你看清除,先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是打开的OE,而用户名为“SYSTEM”的就是添加的服务。
如果你不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\ instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。
2. 如何编写windows服务程序
这两天想学习关于如何编写windows服务程序的知识,就上网查了些资料。
看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。
所以又查阅了相关资料。自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。
在本文中我希望能给初学者一些帮助,大致讲一下编写windows服务程序需要的知识。首先Microsoft Windows 服务(即,以前的NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。
这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。
还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。
你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。
在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。
该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。
此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。
它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。
在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING;servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0;hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。
将在下一点讲到。Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。
当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。
在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。这样一个基本的服务程序就完成了。
下面贴出我的示例代码仅供参考。该代码在vs2008中调试通过。
本文结束的时候会附上如何安装服务。#include
3. 如何编写windows服务程序
首先Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。
这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。
还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。
你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。
在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。
该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。
此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。
它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。
在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING;servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0;hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。
将在下一点讲到。Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。
当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。
在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。这样一个基本的服务程序就完成了。
下面贴出我的示例代码仅供参考。该代码在vs2008中调试通过。
本文结束的时候会附上如何安装服务。#include #include #define SLEEP_TIME 5000 //间隔时间#define FILE_PATH "C:\\log.txt" //信息输出文件bool brun=false;SERVICE_STATUS servicestatus;SERVICE_STATUS_HANDLE hstatus;int WriteToLog(char* str);void WINAPI ServiceMain(int argc, char** argv);void WINAPI CtrlHandler(DWORD request);int InitService();int WriteToLog(char* str){ FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0;}void WINAPI ServiceMain(int argc, char** argv){ servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0; hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler); if (hstatus==0) { WriteToLog("RegisterServiceCtrlHandler failed"); return; } WriteToLog("RegisterServiceCtrlHandler success"); //向SCM 报告运行状态 。
4. vb如何写服务程序
使用Line 方法在对象上画直线和矩形。
语法object.Line [Step] (x1, 1) [Step] (x2, y2), [color], [B][F]Line 方法的语法有以下对象限定符和部分:部分 描述 object 可选的。 对象表达式,其值为“应用于”列表中的对象。
如果object 省略,具有焦点的窗体作为object。 Step 可选的。
关键字,指定起点坐标,它们相对于由 CurrentX 和 CurrentY 属性提供的当前图形位置。 (x1, y1) 可选的。
Single (单精度浮点数),直线或矩形的起点坐标。ScaleMode 属性决定了使用的度量单位。
如果省略,线起始于由 CurrentX 和 CurrentY 指示的位置。 Step 可选的。
关键字,指定相对于线的起点的终点坐标。 (x2, y2) 必需的。
Single (单精度浮点数),直线或矩形的终点坐标。 color 可选的。
Long (长整型数),画线时用的 RGB 颜色。如果它被省略,则使用 ForeColor 属性值。
可用 RGB 函数或 QBColor 函数指定颜色。 B 可选的。
如果包括,则利用对角坐标画出矩形。 F 可选的。
如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。不能不用 B 而用 F。
如果不用 F 光用 B,则矩形用当前的 FillColor 和 FillStyle 填充。FillStyle 的缺省值为 transparent。
例:Private Sub Form_Load()Me.AutoRedraw = TrueLine (100, 100)-(2100, 2100), vbBlue, BFEnd Sub。
5. 如何写服务心得体会
一、通过职业素质的培训:使我树立了正确的从业观念,改变我认为干餐饮服务员是没有前途的消极想法;树立了干一行,爱一行的思想,知道了一个人是否有所作为,不在于他从事何种职业,而在于他是否尽心尽力把所从事的工作做好。具备了我的从业意志和端正了我的工作态度;知道了成功服务员应有的素质,从而增强我的从业意识,立志要么不做,要做就做一个有理想、有道德、有知识、有纪律的合格服务员。
二、通过服务技能的培训:我学会了服务宾客的原则;服务宾客的程序;服务中工作细则;宴会出菜程序;托盘的技巧及端托行走的步伐;铺台、摆台的注意事项;换烟灰缸的重点;点菜、写菜单、取消菜式的注意事项及推销菜品的技巧;斟酒水的基本方法、程序和酒水的一般知识;处理客人投诉及服务工作突发事件对应技巧;餐厅开市的准备工作及收市的注意事项以及各种服务礼仪、餐饮卫生知识、消防知识等等。使我成为一个优秀的服务员奠定了基础。
三、通过这次培训如何做好服务员我总结了以下几点心德与同事们共同学习:
1、热爱你的工作:当你热爱自己的工作,你就会快乐地、更容易地做好你的工作。我们要让就餐的人们获得健康、能量与良好的服务。你就可能将平凡的工作做得不同凡响。而企业最需要的人就是热爱工作的人。
2、迅速熟悉工作标准和方法:为了自己的企业和自己在激烈的竞争中获胜,我们必须能够尽快地投入工作并胜任工作,以提高工作效率。
3、积极参与各种职位培训:培训学习是进步与发展的原泉。
4、要有勤奋的精神:餐饮工作主要是手头工作,通常不会过重,多做一些与不会累坏。所以我们要做到腿勤、眼勤、手勤、心勤。主动地工作,主动地寻找工作。“一勤天下无难事”的俗语说出一个很深刻道理,只要你勤奋成功的大门就为你敞开。
5、要有自信心:与金钱、势力、出身背景相比,自信是最重要的东西,自信能帮助人排除各种障碍、克服各种困难,相信自己是最优秀的。
6、要学会做人:做人就是做一位敬业、感恩、乐于助人、讲职业道德的人,真诚做人、认真做事,事业将会更成功
7、责任:就是以公司利益为重,对自己的工作岗位负责;就是为客人负责,给客人提供优质的出品与服务;就是“敬无在”,即使没有人监督你,你也会认真地做好工作,这就是责任的表现。
8、平常心面对工作中的不公平:在工作中没有绝对的公平,位在努力者面前,机会总是均等的。没有一定的挫折承受能力,今后如何能挑起大梁。
9、团队:发挥团队精神是企业一致的追求,餐饮企业的工作由多种分工组成,非常需要团队成员的配合。具有团队精神、善于合作的员工和企业都更成功。
10、每天进步一点点:积沙成塔、积少成多,很多成功者就是积累一点点小而成大器的。每天创新一点点,是在走向领先;每天多做一点点,是在走向丰收;每天进步一点点是在走向成功。
6. 怎么把自己写的服务程序添加到计算机服务
下面介绍使用SrvAny.exe将tracd封装成windows服务。
1.下载安装Windows2003 Resource Kits,其实我们只需要该目录下的SrvAny.exe和instsrv.exe文件即可,在此目录下还有rktools.chm帮助文件,大家可以查看SrvAny.exe如何使用。
2.创建服务,语法如下:instsrv 服务名称 srvany所在路径/srvany.exe。假设我们的Windows 2003 Resource Kits都安装在C:/Program Files/Windows Resource Kits/Tools目录,待建立的服务名称是TracSrv,那么我们的命令如下:
"C:/Program Files/Windows Resource Kits/Tools/instsrv" TracSrv "C:/Program Files/Windows Resource Kits/Tools/srvany.exe"
需要注意的是,srvany前的路径不能省略,必须是绝对路径。
现在我们已经创建了一个名叫TracSrv的服务,下一步我们来配置这个服务,让它封装tracd命令。
3.打开注册表编辑器。找到注册表项 “HKEY_LOCAL_MACHINE/SYSTEM/ CurrentControlSet/Services/TracSrv”,在TracSrv项里建立新的子项“Parameters”,再在新建的 Parameters项里新建字符串值,数值名称设为“Application”,数值数据设为我们在第一篇说的启动tracd的行命令,也就是
c:/python24/python c:/python24/scripts/tracd -p 8001 C:/SCM/Angel/Angel_Trac
(注意使用全路径)。这样,我们就配置好了TracSrv服务。
4.启动TracSrv服务。现在我们就可以在浏览器中访问Trac网站,只要服务器启动,不需要进入登陆Windows桌面,我们就可以访问Trac站点了。
如何删除这个服务呢?使用sc.exe即可,此命令在xp系统自带。
1.停止TracSrv服务。
2.运行cmd,进入行命令窗口,输入“sc delete TracSrv",回车即可。
7. 怎么用c#写一个windows服务程序
1、在VS2010创建windows service工程,文件--新建--项目--windows服务,名称:TestWindowsService,设置server1的ServiceName属性为TestWindowsService 2、由于服务是要安装的,所以它运行的时候就需要一个安装类Installer将服务安装到计算机,新建一个后台服务安装类Install继承自Installer,安 装初始化的时候是以容器进行安装的,所以还要建立ServiceProcessInstaller和ServiceInstaller服务信息组件添加到 容器安装,在Install类增加如下代码: using System; using System.Collections.Generic; //using System.Linq; using System.Text; using System.Configuration.Install; using System.ComponentModel; namespace TestWindowsService { [RunInstaller(true)]//注意这里的属性Attribute设置 class Install : Installer { private System.ComponentModel.IContainer components = null; private System.ServiceProcess.ServiceProcessInstaller spInstaller; private System.ServiceProcess.ServiceInstaller sInstaller; private void InitializeComponent() { components = new System.ComponentModel.Container(); // 创建ServiceProcessInstaller对象和ServiceInstaller对象 this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller(); this.sInstaller = new System.ServiceProcess.ServiceInstaller(); // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息 this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem; this.spInstaller.Username = null; this.spInstaller.Password = null; // 设定服务名称 this.sInstaller.ServiceName = "TestWindowsService"; sInstaller.DisplayName = "后台Windows服务"; sInstaller.Description = "一个后台Windows运行的服务"; // 设定服务的启动方式 this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic; this.Installers.AddRange(new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller }); } } } 3、点击Service1.cs的视图设计器,在“单击此处切换到代码视图”上右键--添加安装程序,就出现了ProjectInstaller.cs。
点击ProjectInstaller.cs--选择serviceInstaller1--设置ServiceName为TestWindowsService,StartType为Automatic。选择serviceProcessInstaller1--设置account为LocalSystem 点击运行--出现:“无法从命令行或调试器启动服务” 4、一个空的服务基本上搞定了,只是业务没有,就看怎么在服务器上安装部署了.C#写的Windows后台服务不能直接安装,需要借助.NET Framework里面的InstallUtil.exe安装工具安装,我们可以做成一个执行CMD命令的文件BAT文件来安装启动它,命令如下: %windir%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe �%\TestWindowsService.exe 安装完成以后,我们可以在我的电脑管理服务里面看到才安装上的后台服务. 5、卸载:找到开始--运行--regedit,找到目录下的TestWindowsService: 删除后重新启动就可以了。
6、C#获取服务程序路径string PathBase = System.AppDomain.CurrentDomain.BaseDirectory; //-------------------另一种安装部署时添加注册表信息实现开机自启动------------------------ 使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件。具体实现如下: 创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目->视图->注册表, 要使软件在开机就运行,可以在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中 添加键值保存软件目录。
在这里我们依次添加以上的项,然后在Run中添加键值,键名可以自己起,value要填软件的物理路径。物理路径是客户在部署确定 的,我们如何获取呢?这里我们可以使用[TARGETDIR]获取客户选择的路径,在加上软件的启动文件名称。
比如软件启动文件的名称是 Client.exe,那么Value的值就为:[TARGETDIR]Client.exe.生成安装项目。找到bin目录下的setup.exe文件 运行,安装结束后我们可以在注册表中找到相应的键值。
重启电脑系统就会自动运行我们设置的软件。