Windows中服务程序指的是什么

Windows中服务程序指的是什么,第1张

每个 *** 作系统都需要有在后台执行任务的方法,无论是谁正在使用这部机器,这些任务都可以继续运行,后台任务可以处理各种重要的服务,包括系统的或者用户的。例如,一个信使服务可以监控网络,并且在接收到另一台机子的信息时,可以显示一个对话框。一个发送和接收传真的应用需要在启动的时候运行,并且不断地监控负责传真的modem,看有没有传真进来。一个家庭的或者办公室的安全程序,用来控制一件检测设备时,它需要不时地查询传感器,并且在适当的时候响应它。所有这些任务都需要CPU时间来执行它们,不过由于它们需要的CPU时间很少,因此可以放在后台而不影响用户使用系统。

在MS-DOS中,后台的任务是通过TSR(Terminate and Stay Resident)程序来处理的。这些程序经由autoexec.bat文件开始。在UNIX中,后台任务是通过Daemons来处理的。在每次启动 UNIX的过程中,你都可以看到 *** 作系统启动一些任务,例如定时的程序(Cron)和Finger的daemons,然后才可以让首个用户登录。在 Windows NT中,后台的任务被称为服务。服务可在每次NT启动的时候运行,并且不管是谁登陆,都会一直运行下去。

Windows NT的服务都是通过一般的可执行程序实现的,不同的是,它遵循内部的一个特定协议来设计,以便它们能够与服务控制管理器(SCM,Service Control Manager)进行正确的交互。在这篇文章中,你将学习到如巧启弊何在Windows NT中创建和安装简单的Win32服务。一旦你懂得了这个简单的服务,你要建立自己的服务也不难了,因为所有的服务,不论是如何地复杂,都必须包含有同样基本的SCM接口代码。只要符合SCM的要求,其实为服务设计的可执行文件和一般的程序并没有多少的区别。

无论是对于编程者或者系统管理员,了解NT的服务如何工作都是很重要的。编程者就不必说了,因为他们要创建自己的服务,而对于系统管理员,也是同样重要的。因为后台的任务可以是很危险的。MS-DOS和Macintosh系统都是一个病毒的温床,因为它们在安全性方面先天不足,它们都可以允许任何人或者程序在任何时间创建后台的任务。Windows NT和UNIX系统是较安全的,因为只有系统管理员才可以为系统增加后台的任务,不过,如果系统管理员加入了一个破坏性的后台程序,就它就可以为所欲为了。因此系统管理员要了解Windows NT服务的技巧和权限设置,就可以避免加入有潜在危险的后台任务。

基本的概念

服务有两种不同的形式。驱动器服务使用驱动器协议,让NT可以与特定的硬件进行通信。另一个是Win32服务,通过一般的Win32 API来实现后台任务。这篇文章的重点是谈Win32服务,因为它们更为常见,而且创建起来也很容易。任何的NT编程者通过使用一般的NT SDK(或者Visual C++),并且可以用管理员的身份访问一台NT机器,都可以实现和安装自己的Win32服务。如果你想创建一些在Windows NT启动时就运行的程序,并且要求它会在系统中一直运行,你就要使用Win32的服务。

在NT中,服务通过控制面板进行管理。在控制面板中,你会发现有一个服务的图标,打开它你会看到所有Win32服务的清单。在那里你可以开始、停止、暂停和继续某个服务。你按下其中的启动按钮后,就会出现一个对话框,你可以修改启动 *** 作以及服务使用的默认帐号。一个服务可以在系统启动的时候自动运行,也可以被完全禁止。或者设置为手动执行。在手动的时候,用户还可以设置启动的参数。要对服务中的项目作修改的话,你需要以一个管理员或者超级用户的身份登录。

Windows NT自带有一些预装的任务,用孝族来处理诸如网络信使服务的 *** 作或者使用“at”命令定时执行的 *** 作,以及分布的RPC命名。在你创建自己的服务时,你必须执行一个独立的安装步骤,以将服务的信息插入到服务管理工具的列表中,这旁段些信息包括有新服务的名字、执行文件的名字和启动的类型等,都会写入到注册表中,这样在机器下次启动的时候,SCM就会得到新服务的相关信息。

Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出。 任何的用户消息通常都是记录在Windows 事件日志里。Windows Service可以在 *** 作系统启动的时候开始,一直在后台运行,当有需要时也可以手动启动,我们可以通过管理工具里面的服务进行统一管理。

当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而我们启让运动一般的exe文件却要先登陆Windows后才能袭灶启动它。

Windows Service 是一种可随 Windows *** 作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序。它无法通过双击来运行,类似于 Unix 守护进程(daemon processes),当用户注销时它也不会停止。

Windows 服务由三部分组成:1.一个服务可执行文件;2.一个服务控制程序(SCP);3.服务控制管理器(SCM),负责在 HKLM\SYSTEM\CurrentControlSet\Services 下创建服务键值。用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序。

Window 标准的exe可执行程序通常有一个用户界面,Console或GUI,通常由用户来启动或停止

Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,想比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与 *** 作系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时候,windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。

Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?

32 位Windows上单个进程所能访问的最大内存量是4G,单由于 *** 作系统需要给系统核心分配2G的空间,所以一般用户程序的进程可使用的最大内存为2G。

不一定一样,32位的 *** 作系统的进程可访问的最大内存量是4G,这4G包含了虚拟内存,而一个进程可访问的最大内存量也是4G,所以进程内存访问量在物理内存大于等于4G的时候跟虚拟内存无关,而当物理内存小于4G时,进程访问的内存量随着虚拟内存的增加而增加,直到4G

Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上坦禅梁,这些任务完全有Windows后台管理,其实际结 果是32位处理器上的每个进程都可以使用4GB的内存------无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。这个4GB内存实际上 包含了程序的所有部分------包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟 内存。

EXE和DLL之间的区别是什么?

EXE就是可执行文件,你可要双击它, 它就可以运行,而DLL是一个动态链接库文件,就是说,它不可以自己运行,它是须要一个程序的其它功能运行的时候,它才能运行,打个比方,如果你的QQ要升级,那QQ里面有关升级的DLL文件它就会运行.

EXE是带有程序入口(Main)的能被终端用户直接执行的应用程序,随着它的启动系统会产生一个相应的进程。

DLL是动态链接库,不包含程序执行入口,不能被终端用户直接执行,本身需要附加到现有的进程中才可以运行。

但两者都是基于PE格式,运行时由磁盘中的映像载入被调用者的内存或者共享空间中执行,包含程序的数据信息,只是EXE还包括程序的代码信息。

DLL可被多个程序共用,而EXE则不行,只能单独执行。

安装Winfows服务首先要添加安装程序,添加安装程序步骤如下:

1、将Windows服务程序切换到设计视图, 右击设计视图选择“添加安装程序”

2、切换到刚被添加的ProjectInstaller的设计视图

一般设置如下:

设置serviceInstaller1组件的属性:

1) ServiceName = 服务名称

2) StartType = Automatic ,即自动

设置serviceProcessInstaller1组件的属性

1) Account = LocalSystem,账户一般设置为本地系统

3、生成解决方案

安装服务:

方法一、使用DOS命令安装window服务

1、在服务所在的文件夹下的bin\debug文件夹下找到.exe文件(例如WindowsService1.exe)

将此文件拷燃咐厅贝到你想安装的文件夹中。

2、进入DOS界面

(VS2008-->Visual Studio Tools-->Visual Studio 2008 命令提示)来进入DOS,直接用cmd可能有些命令找不到;

3、输入

方法二、使用安装项目安装windows服务

个人比较推荐这个方法,选择目录安装更灵活,而且不用在DOS环境下运行。

因为本人比较懒,直接给出别人总结的地址

注意,以后每次服务项目有更改的时候,需要编译服务后,在安装项目中刷新依赖项!!!

方法三、

在ProjectInstaller.cs的后台代码中添加安装服务和卸载服务的代码

/// <summary>

/// 安装服务

/// </summary>

/// <param name="stateSaver"></param>

public override void Install(System.Collections.IDictionary stateSaver)

{

Microsoft.Win32.RegistryKey system,

//HKEY_LOCAL_MACHINE\Services\CurrentControlSet

currentControlSet,

//...\Services

services,

//...\<Service Name>

service,

//...\Parameters 皮隐- this is where you can put service-specific configuration

config

try

{

//Let the project installer do its job

base.Install(stateSaver)

//Open the HKEY_LOCAL_MACHINE\SYSTEM key

system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System")

//Open CurrentControlSet

currentControlSet = system.OpenSubKey("CurrentControlSet")

//Go to the services key

services = currentControlSet.OpenSubKey("Services")

//Open the key for your service, and allow writing

service = services.OpenSubKey(conServiceName, true)

//Add your service's description as a REG_SZ value named "Description"

service.SetValue("Description", "描述语言")

//(Optional) Add some custom information your service will use...

config = service.CreateSubKey("Parameters")

}

catch (Exception e)

{

Console.WriteLine("An exception was thrown during service installation:\n" + e.ToString())

}

}

/// <summary>

/// 卸载服务

/// </summary>

/// <param name="savedState"简腊></param>

public override void Uninstall(System.Collections.IDictionary savedState)

{

Microsoft.Win32.RegistryKey system,

currentControlSet,

services,

service

try

{

//Drill down to the service key and open it with write permission

system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System")

currentControlSet = system.OpenSubKey("CurrentControlSet")

services = currentControlSet.OpenSubKey("Services")

service = services.OpenSubKey(conServiceName, true)

//Delete any keys you created during installation (or that your service created)

service.DeleteSubKeyTree("Parameters")

//...

}

catch (Exception e)

{

Console.WriteLine("Exception encountered while uninstalling service:\n" + e.ToString())

}

finally

{

//Let the project installer do its job

base.Uninstall(savedState)

}

}

代码添加完成后

添加window service安装的批处理命令

1)在项目添加一个文本文件,更名为install.bat,编辑文件的内容如下:

@echo off

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -i "WindowsService1.exe"

@pause

2)在项目添加一个文本文件,更名为uninstall.bat,编辑文件的内容如下

@echo off

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u "WindowsService1.exe"

@pause

说明:上面绿色字体为服务名称

编译完成后将debug的文件拷贝到想安装的目录下,点击install.bat即完成安装。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12262144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存