各位老铁们好,相信很多人对nim服务器都不是特别的了解,因此呢,今天就来为大家分享下关于nim服务器以及放映机服务器bgs是什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

一、aix磁盘引导问题

磁盘错误分类

我使用两个主要的度量值来分类 AIX系统上的磁盘错误:影响和持续时间。影响所量度的是磁盘错误的影响力及其对服务器的冲击。换言之,就是“这会造成何程度的伤害?”。持续时间所量度的是磁盘错误持续的时长和恢复时间,即“这伤害将持续多久?”。

影响可分为四个主要级别:

可用*丧失:当存储资源离线或断开与其管理服务器的连接时就会发生可用*丧失。虽然磁盘上的数据没有损失,但是无法访问该磁盘。例如:文件系统遭卸装或光纤通道适配器被断开连接。

数据丢失:由于逻辑或物理问题,数据无法写入磁盘或无法从磁盘读取。例如:LVM写入错误。

跨多个磁盘的数据丢失:在这种情况下,不仅一个磁盘而是多个磁盘均遭遇了数据丢失。当逻辑卷跨磁盘条带化且其中一个磁盘故障时,常常会发生这种情况。

跨多个服务器的数据丢失:随着 SAN技术的广泛应用,一个磁盘硬件可能受损到这样的程度:多个服务器均受到了数据丢失的影响。

同样地,持续时间也可用分为四个主要级别:

暂时:这类磁盘错误不常见且只发生一次,不会带来真正的威胁。它只在服务器的 errpt内出现一次,然后即消失。例如:一次糟糕的块重分配。

间歇:间歇错误的出现很不规律,可以由初期问题推断,比如若硬盘记录了一系列写入错误时,往往表明此驱动器可能会出现故障。

经常:就像是由一个 cron作业定期安排的那样,以周、天、小时或分钟为间隔发生问题,这会对服务器形成严重威胁并具有广泛的有害影响。

永久:不太容易或者根本不可能从这类错误中恢复。缺乏可替换硬件,将不能从这种情况中恢复。

通过交叉参考表中的这两个度量指标,您就能够更好地了解磁盘错误的危急程度以及它们对服务器的影响

恢复步骤

磁盘故障的影响程度不一,从轻微的中断到整个的服务器故障。那么,当遇到故障时该怎么做呢?

第一步是检查磁盘资源的可访问*,从最高可用级别开始一直往下,在需要时使用 errpt作为指导。如果服务器仍在正常运行,那么使用 df或 mount命令进行查看时文件系统是否仍然存在?如果没有,是否能用 lsvg或 varyonvg访问卷组,或是它已丢失了配额(quorum)?磁盘本身是否仍处在 *ailable状态,或者使用 lsdev–Ccdisk命令后,是否显示它们处于的是 Defined状态?像执行 lspath或 pcmpath query adapter这样的 SAN存储命令后,这些光纤通道设备显示的是离线还是丢失?当通过 Hardware Management Console查看时,服务器仅是宕机并处于 Not Activated状态?大型的 System p机器或 SAN子系统宕机了?不要只是因为某一类资源可用而贸然做这样的假设;所有类似资源都必须处于可用状态,所以务必全面检查。

第二步是检查资源的完整*,从最低的可用*等级开始向上检查。服务器是否成功引导?系统启动时是否出现故障,如带有数字 552、554、或 556的 LED消息(毁坏的文件系统、JFS或 Object Data Manager [ODM])?如果系统仍在正常运行,那么执行 cfgmgr命令后,磁盘资源是否会重新联机并回到 *ailable状态?卷组是否可由 varyonvg命令激活?文件系统是否完全载入?想要查看的数据是否能出现在文件系统内,还是丢失了?

第三步是按具体情况具体分析的方式解决资源问题。以下是我在多年的修复问题过程中常常使用的一些技巧:

文件系统。以我的经验,这是最常见的一种磁盘错误。无需多费劲就可以让超块变脏、造成存储碎片、搞乱存储节点或引起 errpt反复出现 JFS错误。即便是一个完整的文件系统也可能会把事情搞砸。修复文件系统问题最好的策略也是最简单的:利用文件系统检查命令(fsck)。在这些情况下,我会卸载文件系统并针对它们运行 fsck–y,直至不再出现错误,然后再重新载入它们。有时,我会格外彻底地卸载一个卷组内所有的文件系统,并使用外壳脚本中的循环脚本来完成此项任务以防出现潜在问题。

卷组。问题若超出了文件系统的范畴时,通常会转向卷组级别。有时,问题是 ODM级的,可以通过 syncvg或 synclvodm进行纠正。在紧要关头,我曾用 varyoffvg关闭卷组,用 exportvg导出它们,然后用 importvg重新导入它们以使其能被正确识别。但我总是会提前备份好/etc/filesystems文件并记录下磁盘端口 VLAN ID(PVID)以保存载入的顺序。

物理卷。谈到 PVID,我看到过磁盘丢失,然后再以不同的 PVID重新回到服务器。一个有帮助的做法是定期在别处记录下磁盘信息作为比照以防这类事情发生。如果真的发生了,我通常会用 rmdev–dl从服务器删除这些磁盘,再用 cfgmgr重新检测它们,然后再导出并重新导入卷组。

SAN连接。有时全局名称(WWN)并不跨 SAN网络进行端对端的传播,比如 VIO服务器上的 NPIV。我有时会通过运行 pcmpath set adapter offline禁用光纤通道适配器并手动定义或检查 WWN,然后再重新开启适配器。我也做过最极端的事,就是探查电缆并检查另一端是否有灯亮以确保没有物理问题存在。

引导问题。如果想要判断一个服务器为何在磁盘故障后不能引导,我通常会做的第一件事情是从服务器(根卷组除外),断开所有磁盘的映射和连接。如果为了找到一两个 rootvg磁盘而探查数百个磁盘,那么将花去 Software Management System(SMS)大量的时间。因此,我会在维护模式从一个 NIM服务器引导系统来运行诊断并修复文件系统,用 bosboot命令重新创建引导逻辑卷或访问此根卷组来修复诸如/etc/filesystems的配置文件。而且,在服务器启动后,有问题的文件系统通常都是那些本身处于关闭状态而它们旁边其他的文件系统则载入正常的文件系统。

恢复。最后,如果有东西损坏并确实需要修复,就要确保新更换的部件尽量接近于原始设备。这样一来,就可以最大限制地减少处理像文件系统大小或软件驱动器这类占用修复时间的操作。我一直建议要为做好系统备份(mksysb映像和使用诸如 IBM Tivoli® Storage Manager的产品)来应对数据丢失和无法恢复的最坏情况。

二、放映机服务器bgs是什么

1传输控制协议端口服务多路开关选择器

2 press管理实用程序

3压缩进程

5远程作业登录

7回显(Echo)

9丢弃

11在线用户

12我的测试端口

13时间

15 stat

17每日引用

18消息发送协议

19字符发生器

20文件传输协议(默认数据口)

21文件传输协议(控制)

22 SSH远程登录协议

23 tel终端仿真协议

24预留给个人用邮件系统

25 smtp简单邮件发送协议

27 NSW用户系统现场工程师

29 MSGICP

31 MSG验证

33显示支持协议

35预留给个人打印机服务

37时间

38路由访问协议

39资源定位协议

41图形

42 WINS主机名服务

43"绰号" who is服务

44 MPM(消息处理模块)标志协议

45消息处理模块

46消息处理模块(默认发送口)

47 NI FTP

48数码音频后台服务

49 TACACS登录主机协议

50远程邮件检查协议

51 IMP(接口信息处理机)逻辑维

52施乐网络服务系统时间协议

53域名服务器

54施乐网络服务系统票据*

55 ISI图形语言

56施乐网络服务系统验证

57预留个人用终端访问

58施乐网络服务系统邮件

59预留个人文件服务

60未定义

61 NI邮件?

62异步通讯适配器服务

63 WHOIS+

64通讯接口

65 TACACS数据库服务

66 Oracle SQL*NET

67引导程序协议服务端

68引导程序协议客户端

69小型文件传输协议

70信息检索协议

71远程作业服务

72远程作业服务

73远程作业服务

74远程作业服务

75预留给个人拨出服务

76分布式外部对象存储

77预留给个人远程作业输入服务

78修正TCP

79 Finger(查询远程主机在线用户等信息)

80全球信息网超文本传输协议()

81 HOST2名称服务

82传输实用程序

83模块化智能终端ML设备

84公用追踪设备

85模块化智能终端ML设备

86 Micro Focus Cobol编程语言

87预留给个人终端连接

88 Kerberros安全认证系统

89 SU/MIT终端仿真网关

90 DNSIX安全属*标记图

91 MIT Dover假脱机

92网络打印协议

93设备控制协议

94 Tivoli对象调度

95 SUPDUP

96 DIXIE协议规范

97快速远程虚拟文件协议

98 TAC(东京大学自动计算机)新闻协议

99 Tel服务,开99端口(Troj.open99)

101 usually from sri-nic

102 iso-tsap

103 gppitnp

104 acr-nema

105 cs-ns

106 3-tsmux

107 rtel

108 snagas

109 Post Office

110 Pop3服务器(邮箱发送服务器)

111 sunrpc

112 mcidas

113身份查询

114 audionews

115 sftp

116 ansanotify

117 path或 uucp-path

118 sqlserv

119新闻服务器

120 cfdptkt

121 BO jammerkillah

123 work

124 ansatrader

125 locus-map

126 unitary

127 locus-con

128 gss-xlicen

129 pwdgen

130 cisco-fna

131 cisco-tna

132 cisco-sys

133 statsrv

134 ingres-

135查询服务 DNS

136 profile PROFILE Naming System

137 NetBIOS数据报(UDP)

138 NetBios-DGN

139共享资源端口(NetBios-SSN)

140 emfis-data

141 emfis-tl

142 bl-idm

143 IMAP电子邮件

144 NeWS

145 uaac

146 iso-tp0

147 iso-ip

148 jargon

149 aed-512

150 sql-

151 hems

152 bftp

153 sgmp

154 sc-prod

155 sc-dev

156 sqlsrv

157 k-cmp

158 PCMAIL

159 nss-routing

160 sgmp-traps

161远程管理设备(SNMP)

162 snmp-trap

163 cmip-man

164 cmip-agent

165 xns-courier Xerox

166 s-

167 namp

168 rsvd

169 send

170 work Po

171 multiplex Network

172 cl/1 Network

173 xyplex-mux

174 mailq

175 vm

176 genrad-mux

177 xdmcp

178 nextstep

179 bgp

180 ris

181 unify

182 audit

183 ocbinder

184 ocserver

185 remote-kis

186 kis

187 aci

188 mumps

189 qft

190 gacp

191 prospero

192 osu-nms

193 srmp

194 Irc

195 dn6-nlm-aud

196 dn6-smm-red

197 dls

198 dls-mon

199 smux

200 src IBM

201 at-rtmp

202 at-nbp

203 at-3

204 at-echo

205 at-5

206 at-zis

207 at-7

208 at-8

209 qmtp

210 z39.50 ANSI

211 914c/g

212 a

214 vmpwscs

215 softpc Insignia Solutions

216 CAIlic

217 dbase

218 mpp

219 uarps

220 imap3

221 fln-s*

222 rsh-s*

223 cdc

242 direct

243 sur-meas

244 dayna

245 link

246 dsp3270

247 subntbcst_tftp

248 bhfhs

256 rap

257 set

258 yak-chat

259 esro-gen

260 openport

263 hdap

264 bgmp

280 -mgmt

309 entrusttime

310 bhmds

312 vslmp

315 load

316 decauth

317 zan

321 pip

344 pdap

345 pawserv

346 zserv

347 fatserv

348 csi-sgwp

349 mftp

351 matip-type-b

351 matip-type-b

353 ndsauth

354 bh611

357 bhevent

362 srssend

365 dtk

366 odmr

368 qbikgdp

371 clearcase

372 ulistproc ListProcessor

373 legent-1

374 legent-2

374 legent-2

375 hassle

376 nip

377 tnETOS

378 dsETOS

379 is99c

380 is99s

381 hp-collector

383 hp-alarm-mgr

384 arns

385 ibm-

386 asa

387 aurp

388 unidata-ldm

389 ldap

390 uis

391 synotics-relay

393 dis

394 embl-ndt

395 cp

396 ware-ip

397 mptn

398 kryptolan

399 iso-tsap-c2

vm0

401 ups Uninterruptible Power Supply

402 genie Genie Protocol

403 decap

404 nced

405 ncld

406 imsp

407 timbuktu

408 prm-sm

409 prm-nm

410 decladebug DECLadebug Remote Debug Protocol

411 rmt

412 synoptics-trap

413 smsp SMSP

414 infoseek

415 b

416 silverplatter

417 onmux

418 hyper-g

419 ariel1

420 smpte

421 ariel2

422 ariel3

423 opc-job-start

424 opc-job-track

425 icad-el

426 smartsdp

427 svrloc

428 ocs_cmu

429 ocs_amu

430 utmpsd

431 utmpcd

432 iasd

433 nnsp

434 mobileip-agent

435 mobilip-mn

436 dna-cml

437 scm

438 dsfgw

439 dasp

440 sgcp

441 decvms-sysmgt

442 cvc_hostd

443安全服务

444 snpp

445 NT的共享资源新端口(139)

446 ddm-rdb

447 ddm-dfm

448 ddm-ssl

449 as-servermap

450 tserver

451 sfs-smp-

453 creativeserver

454 contentserver

455 creativepartnr

456 Hackers

457 scohelp

458 leqtc

459 ampr-rcmd

460 skronk

461 datasurfsrv

462 datasurfsrvsec

463 alpes

464 kpasswd

465 smtps

466 digital-vrc

467 mylex-mapd

468 photuris

469 rcp

470 scx-proxy

471 mondex

472 ljk-login

473 hybrid-pop

474 tn-tl-w1

475 tcphaspsrv

476 tn-tl-fd1

477 ss7ns

478 spsc

479 iafserver

480 iafdbase

481 ph Ph

482 bgs-nsi

483 ulp

484 integra-sme

485 powerburst Air Soft Power Burst

486 *ian

487 saft

488 gss-

489 nest-protocol

490 mi-pfs

491 go-login

492 ticf-1

493 ticf-2

494 pov-ray

495 intecourier

496 pim-rp-disc

497 dantz

498 siam

499 iso-ill

500 sytek

501 stmf

502 asa-l-proto

503 intrinsa

504 citadel

505 mailbox-lm

506 ohimsrv

507 crs

508 xvttp

509 snare

510 fcp

511 passgo

512 exec

513 login

514 shell

515 printer

516 videotex

517 talk

518 ntalk

519 utime

520 efs

521 ripng

522 ulp

523 ibm-db2

524 ncp NCP

525 timed

526 tempo newdate

527 stx

528 custix

529 irc-serv

530 courier

531 conference chat

532 news

533 wall

534 mm-admin

535 iiop

536 opalis-rdv

537 nmsp

538 gdomap

539 apertus-ldp

540 uucp

541 uucp-rlogin

542 merce

543 klogin

544 kshell

545 leqtcsrvr

546 dhcpv6-client

547 dhcpv6-server

548 afpovertcp

549 idfp

550 new-rwho

551 cybercash

552 deviceshare

553 pirp

554 rtsp

555 dsf

556 remotefs

557 openvms-sysipc

558 sdnskmp

559 teedtap

560 rmonitor

561 monitor

562 chshell chcmd

563 nntps

564 9pfs

565 whoami

566 streettalk

567 banyan-rpc

568 ms-shuttle

569 ms-rome

570 meter

571 meter

572 sonar

573 banyan-

574 ftp-agent

575 vemmi

576 ipcd

577 vnas

578 ipdd

579 decbsrv

581 bdp

588 cal

589 eyelink

590 tns-cml

593 -rpc-epmap

594 tpip

596 smsd

599 acp Aeolon Core Protocol

600 ipcserver Sun IPC server

606 urm Cray

607 nqs

608 sift-uft

609 npmp-trap

610 npmp-local

611 npmp-gui

613 hmmp-op

620 sco-websrvrmgr

621 escp-ip

625 dec_dlm

626 asia

628 qmqp

630 rda

631 ipp

632 bmpp

634 ginad

nim服务器 放映机服务器bgs是什么

635 rlzdbase

636 ldaps

637 lanserver

639 msdp

666 doom

667 disclose

668 mem

669 meregister

670 vacdsm-sws

671 vacdsm-

672 vpps-qua

673 cimplex

674 acap

675 dctp

704 elcsd

705 agentx

709 entrust-kmsh

710 entrust-ash

729 viewdm1

730 viewdm2

731 viewdm3

741 gw

742 rcs

744 flexlm

747 fujitsu-dev

748 ris-cm

749 kerberos-adm

750 rfile

751 pump

752 qrh

753 rrh

754 tell send

758 nlogin

759 con

760 ns

761 rxe

762 quotad

763 cycleserv

764 omserv

765 webster

769 vid

770 cadlock

771 rtip

772 cycleserv2

773 submit

774 rpasswd

776 wpages

780 wpgs

786 concert Concert

787 qsc QSC

801 device

873 rsync rsync

886 iclc-locate

887 iclc_svinfo

888 erlogin

900 omginitialrefs

911 xact-backup

990 ftps

991 nas

992 tels

993 imaps

994 ircs

995 pop3s

996 vsi

997 maitrd

998 busboy

999 garcon

1000 cadlock

1010 surf

1023 Reserved

1024 NetSpy.698(YAI)

1025 work blackjack

1026 Win2000的 Inter信息服务

1031 iad2

1032 iad3

1033 Netspy

1042 Bla1.1

1047 GateCrasher

1080 Wingate

1058 nim

1059 nimreg

三、...但在本地服务列表中看不到,任务管理器的服务器中可以看到

(1)不用登陆进系统即可运行.

(2)具有SYSTEM特权.所以你在进程管理器里面是无法结束它的.

笔者在2003年为一公司开发机顶盒项目的时候,曾经写过课件上传和媒体服务,下面就介绍一下如何用Delphi7创建一个Service程序.

运行Delphi7,选择菜单File-->New-->Other--->Service Application.将生成一个服务程序的框架.将工程保存为ServiceDemo.dpr和Unit_Main.pas,然后回到主框架.我们注意到,Service有几个属*.其中以下几个是我们比较常用的:

(1)DisplayName:服务的显示名称

(2)Name:服务名称.

我们在这里将DisplayName的值改为"Delphi服务演示程序",Name改为"DelphiService".编译这个项目,将得到ServiceDemo.exe.这已经是一个服务程序了!进入CMD模式,切换致工程所在目录,运行命令"ServiceDemo.exe/install",将提示服务安装成功!然后" start DelphiService"将启动这个服务.进入控制面版-->管理工具-->服务,将显示这个服务和当前状态.不过这个服务现在什么也干不了,因为我们还没有写代码:)先" stop DelphiService"停止再"ServiceDemo.exe/uninstall"删除这个服务.回到Delphi7的IDE.

我们的计划是为这个服务添加一个主窗口,运行后任务栏显示程序的图标,双击图标将显示主窗口,上面有一个按钮,该按钮将实现Ctrl+Alt+Del功能.

实际上,服务程序莫认是工作于Winlogon桌面的,可以打开控制面板,查看我们刚才那个服务的属*-->登陆,其中"允许服务与桌面交互"是不打钩的.怎么办?呵呵,回到IDE,注意那个布尔属*:Interactive,当这个属*为True的时候,该服务程序就可以与桌面交互了.

File-->New-->Form为服务添加窗口FrmMain,单元保存为Unit_FrmMain,并且把这个窗口设置为手工创建.完成后的代码如下:

unit Unit_Main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Unit_FrmMain;

type

TDelphiService= class(TService)

procedure ServiceContinue(Sender: TService; var Continued: Boolean);

procedure ServiceExecute(Sender: TService);

procedure ServicePause(Sender: TService; var Paused: Boolean);

procedure ServiceShutdown(Sender: TService);

procedure ServiceStart(Sender: TService; var Started: Boolean);

procedure ServiceStop(Sender: TService; var Stopped: Boolean);

private

{ Private declarations}

public

function GetServiceController: TServiceController; override;

{ Public declarations}

end;

var

DelphiService: TDelphiService;

FrmMain: TFrmMain;

implementation

{$R*.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;

begin

DelphiService.Controller(CtrlCode);

end;

function TDelphiService.GetServiceController: TServiceController;

begin

Result:= ServiceController;

end;

procedure TDelphiService.ServiceContinue(Sender: TService;

var Continued: Boolean);

begin

while not Terminated do

begin

Sleep(10);

ServiceThread.ProcessRequests(False);

end;

end;

procedure TDelphiService.ServiceExecute(Sender: TService);

begin

while not Terminated do

begin

Sleep(10);

ServiceThread.ProcessRequests(False);

end;

end;

procedure TDelphiService.ServicePause(Sender: TService;

var Paused: Boolean);

begin

Paused:= True;

end;

procedure TDelphiService.ServiceShutdown(Sender: TService);

begin

gbCanClose:= true;

FrmMain.Free;

Status:= csStopped;

ReportStatus();

end;

procedure TDelphiService.ServiceStart(Sender: TService;

var Started: Boolean);

begin

Started:= True;

Svcmgr.Application.CreateForm(TFrmMain, FrmMain);

gbCanClose:= False;

FrmMain.Hide;

end;

procedure TDelphiService.ServiceStop(Sender: TService;

var Stopped: Boolean);

begin

Stopped:= True;

gbCanClose:= True;

FrmMain.Free;

end;

end.

主窗口单元如下:

unit Unit_FrmMain;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, ShellApi, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

const

WM_TrayIcon= WM_USER+ 1234;

type

TFrmMain= class(TForm)

Timer1: TTimer;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure FormDestroy(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations}

IconData: TNotifyIconData;

procedure AddIconToTray;

procedure DelIconFromTray;

procedure TrayIconMessage(var Msg: TMessage); message WM_TrayIcon;

procedure SysButtonMsg(var Msg: TMessage); message WM_SYSCOMMAND;

public

{ Public declarations}

end;

var

FrmMain: TFrmMain;

gbCanClose: Boolean;

implementation

{$R*.dfm}

procedure TFrmMain.FormCreate(Sender: TObject);

begin

FormStyle:= fsStayOnTop;{窗口最前}

SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);{不在任务栏显示}

gbCanClose:= False;

Timer1.Interval:= 1000;

Timer1.Enabled:= True;

end;

procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

CanClose:= gbCanClose;

if not CanClose then

begin

Hide;

end;

end;

procedure TFrmMain.FormDestroy(Sender: TObject);

begin

Timer1.Enabled:= False;

DelIconFromTray;

end;

procedure TFrmMain.AddIconToTray;

begin

ZeroMemory(@IconData, SizeOf(TNotifyIconData));

IconData.cbSize:= SizeOf(TNotifyIconData);

IconData.Wnd:= Handle;

IconData.uID:= 1;

IconData.uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;

IconData.uCallbackMessage:= WM_TrayIcon;

IconData.hIcon:= Application.Icon.Handle;

IconData.szTip:='Delphi服务演示程序';

Shell_NotifyIcon(NIM_ADD,@IconData);

end;

procedure TFrmMain.DelIconFromTray;

begin

Shell_NotifyIcon(NIM_DELETE,@IconData);

end;

procedure TFrmMain.SysButtonMsg(var Msg: TMessage);

begin

if(Msg.wParam= SC_CLOSE) or

(Msg.wParam= SC_MINIMIZE) then Hide

else inherited;//执行默认动作

end;

procedure TFrmMain.TrayIconMessage(var Msg: TMessage);

begin

if(Msg.LParam= WM_LBUTTONDBLCLK) then Show();

end;

procedure TFrmMain.Timer1Timer(Sender: TObject);

begin

AddIconToTray;

end;

procedure SendHokKey;stdcall;

var

HDesk_WL: HDESK;

begin

HDesk_WL:= OpenDesktop('Winlogon', 0, False, DESKTOP_JOURNALPLAYBACK);

if(HDesk_WL<> 0) then

if(SetThreadDesktop(HDesk_WL)= True) then

PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT or MOD_CONTROL, VK_DELETE));

end;

procedure TFrmMain.Button1Click(Sender: TObject);

var

dwThreadID: DWORD;

begin

CreateThread(nil, 0,@SendHokKey, nil, 0, dwThreadID);

end;

end.

补充:

(1)关于更多服务程序的演示程序,请访问以下Url:,上面包含了多个演示如何控制和管理系统服务的代码.

(2)请切记:Windows实际上存在多个桌面.例如屏幕传输会出现白屏,可能有两个原因:一是系统处于锁定或未登陆桌面,二是处于屏幕保护桌面.这时候要将当前桌面切换到该桌面才能抓屏.

(3)关于服务程序与桌面交互,还有种动态切换方法.大概单元如下:

unit ServiceDesktop;

interface

function InitServiceDesktop: boolean;

procedure DoneServiceDeskTop;

implementation

uses Windows, SysUtils;

const

DefaultWindowStation='WinSta0';

DefaultDesktop='Default';

var

hwinstaS*e: HWINSTA;

hdeskS*e: HDESK;

hwinstaUser: HWINSTA;

hdeskUser: HDESK;

function InitServiceDesktop: boolean;

var

dwThreadId: DWORD;

begin

dwThreadId:= GetCurrentThreadID;

// Ensure connection to service window station and desktop, and

// s*e their handles.

hwinstaS*e:= GetProcessWindowStation;

hdeskS*e:= GetThreadDesktop(dwThreadId);

hwinstaUser:= OpenWindowStation(DefaultWindowStation, FALSE, MAXIMUM_ALLOWED);

if hwinstaUser= 0 then

begin

OutputDebugString(PChar('OpenWindowStation failed'+ SysErrorMessage(GetLastError)));

Result:= false;

exit;

end;

if not SetProcessWindowStation(hwinstaUser) then

begin

OutputDebugString('SetProcessWindowStation failed');

Result:= false;

exit;

end;

hdeskUser:= OpenDesktop(DefaultDesktop, 0, FALSE, MAXIMUM_ALLOWED);

if hdeskUser= 0 then

begin

OutputDebugString('OpenDesktop failed');

SetProcessWindowStation(hwinstaS*e);

CloseWindowStation(hwinstaUser);

Result:= false;

exit;

end;

Result:= SetThreadDesktop(hdeskUser);

if not Result then

OutputDebugString(PChar('SetThreadDesktop'+ SysErrorMessage(GetLastError)));

end;

procedure DoneServiceDeskTop;

begin

// Restore window station and desktop.

SetThreadDesktop(hdeskS*e);

SetProcessWindowStation(hwinstaS*e);

if hwinstaUser<> 0 then

CloseWindowStation(hwinstaUser);

if hdeskUser<> 0 then

CloseDesktop(hdeskUser);

end;

initialization

InitServiceDesktop;

finalization

DoneServiceDesktop;

end.

更详细的演示代码请参看:

(4)关于安装服务如何添加服务描述.有两种方法:一是修改注册表.服务的详细信息都位于HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\下面,例如我们刚才那个服务就位于HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DelphiService下.第二种方法就是先用QueryServiceConfig2函数获取服务信息,然后ChangeServiceConfig2来改变描述.用Delphi实现的话,单元如下:

unit WinSvcEx;

interface

uses Windows, WinSvc;

const

//

// Service config info levels

//

SERVICE_CONFIG_DESCRIPTION= 1;

SERVICE_CONFIG_FAILURE_ACTIONS= 2;

//

// DLL name of imported functions

//

AdvApiDLL='advapi32.dll';

type

//

// Service description string

//

PServiceDescriptionA= ^TServiceDescriptionA;

PServiceDescriptionW= ^TServiceDescriptionW;

PServiceDescription= PServiceDescriptionA;

{$EXTERNALSYM _SERVICE_DESCRIPTIONA}

_SERVICE_DESCRIPTIONA= record

lpDescription: PAnsiChar;