3.2.2 服务应用程序.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 342 行 · 第 1/4 页
HTM
342 行
}
</SCRIPT>
<DIV class=mframe>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="77%"><SPAN class=tt>阅读→</SPAN><FONT
color=#999999>Windows2000 服务器端应用程序开发设计指南- 服务应用程序(2)</FONT></TD>
<TD width="23%">
<DIV align=right><FONT color=#ff0033>热</FONT> <FONT
color=green>荐</FONT> <IMG alt=4星级
src="3.2.2 服务应用程序.files/Star4.gif"
border=0></DIV></TD></TR></TBODY></TABLE></TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<DIV id=printBody>
<TABLE id=middle
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; TEXT-ALIGN: left"
cellSpacing=0 cellPadding=0 align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm vAlign=top><BR>
<DIV align=center>
<H1 class=aTitle>Windows2000 服务器端应用程序开发设计指南- 服务应用程序(2)</H1></DIV>
<TABLE width="97%" align=center>
<TBODY>
<TR>
<TD width=502>
<DIV align=center>[日期:2006-10-9 来源:<A
href="http://www.acejoy.com/" target=_blank>ACE开发者</A><SPAN
id=SourceLabel></SPAN> 作者:Jeffrey Richter
Jason D. Clark<SPAN id=AuthorLabel>]</SPAN></DIV></TD>
<TD align=right width=209>
<DIV align=center>[字体: <INPUT title=把正文字体缩小 style="HEIGHT: 16px" onclick="fontSize('m','ArticleBody')" type=button value=小>
<INPUT title=把正文字体扩大 style="HEIGHT: 16px" onclick="fontSize('b','ArticleBody')" type=button value=大>
<INPUT title=转为简体中文模式 style="HEIGHT: 16px" onclick="bodytojt('ArticleBody')" type=button value=简>
<INPUT title=转为繁体中文模式 style="HEIGHT: 16px" onclick="bodytoft('ArticleBody')" type=button value=繁>
<A href="javascript:fontColor('ArticleBody')"><IMG alt=字体颜色
src="3.2.2 服务应用程序.files/fgcolor.gif" align=absMiddle
border=0></A>]</DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=10 align=left border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<DIV class=content id=ArticleBody
style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">
<P class=content>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7
size=5><B style="LINE-HEIGHT: 25px">对服务侦错<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P><BR>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在对一个服务侦错时比对一般应用程序的侦错更难处理,原因有许多个。第一,除错器无法启动服务,必须由SCM启动服务。第二,许多服务在使用者登入前即已启动。由于这个原因,当您在对服务做侦错时,将设定为自动启动的服务改为手动启动的方式是一个好方法。第叁,服务在它们各自拥有的视窗配置与桌面中执行,而它们不会为了互动式使用者而显示。</FONT></P><BR>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>所以您要如何对服务侦错呢?最好的方法是像服务那样固定地执行一个固定的可执行程序。在您服务内的(w)main或(w)WinMain函数会为一个特定的命令列打开您所拥有的设计,如果该开关已被打开,则以直接地呼叫您服务之ServiceMain函数的方式取代呼叫StartServiceCtrlDispatcher。这个技术当然会有很多缺点:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><BR>
<UL style="LINE-HEIGHT: 25px"><BR>
<LI
style="LINE-HEIGHT: 25px">如果您的可执行档中包含了许多个服务,则在同一个时间内您只能对其中一个服务做侦错的动作。<BR
style="LINE-HEIGHT: 25px"> <BR>
<LI
style="LINE-HEIGHT: 25px">该执行档正以您的帐户执行而您的帐户不能让SCM使用。这也许会限制一个正常情形下应被允许的资源存取。<BR
style="LINE-HEIGHT: 25px"> <BR>
<LI
style="LINE-HEIGHT: 25px">您不能传送一个暂停、继续执行、停止、关机或任何使用者已定义的通知至服务中,并且被禁止对执行路径做测式。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT><BR>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>刚才所提的方法可以使您较容易的对您的服务做侦错,但是有一个较好的方法是当服务正在执行时,将侦错器与服务连接起来。大部份的侦错器皆提供连接至正在执行之处理程序的能力。如果您已经在系统上安装了一个侦错器,那么您便可以开启工作管理员,在服务处理程序的名称上敲击滑鼠右键,并且由在功能表中选择侦错选项。这个动作会使侦错器连接至您的服务。现在您可以设定中断点、对服务程序代码侦错甚至可以测试您的程序如何回应控制码的通知。以下为将侦错器与服务连接所产生的几个问题:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><BR>
<UL style="LINE-HEIGHT: 25px"><BR>
<LI
style="LINE-HEIGHT: 25px">您所使用来登入系统的帐户必须拥有侦错的权限。在预设的情形下,这个权限只被指定给管理员。如果您以Power
User的身份或一些其他的帐户登入系统,则您必须拥有管理员指定给您的侦错权限。<BR
style="LINE-HEIGHT: 25px"> <BR>
<LI
style="LINE-HEIGHT: 25px">您不能对您的初始化程序代码做侦错,因为侦错器在服务执行后才与它连结。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT><BR>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?