做service Application出现的迷惑!showmessage就是没工作!(100分)

  • 主题发起人 shadow_x
  • 开始时间
S

shadow_x

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:(这是拷贝的一个例子)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TService1 = class(TService)
procedure ServiceStart(Sender: TService;
var Started: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServiceStop(Sender: TService;
var Stopped: Boolean);
procedure ServicePause(Sender: TService;
var Paused: Boolean);
procedure ServiceContinue(Sender: TService;
var Continued: Boolean);
private
{ Private declarations }
fPaused : boolean;
public
function GetServiceController: TServiceController;
override;
{ Public declarations }
end;

var
Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord);
stdcall;
begin
Service1.Controller(CtrlCode);
end;

procedure TService1.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
ServiceThread.Terminate;
fPaused := TRUE;
Stopped := TRUE;
end;

procedure TService1.ServicePause(Sender: TService;
var Paused: Boolean);
begin
Paused := True;
fPaused := TRUE;
end;

procedure TService1.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Continued := True;
fPaused := FALSE;
end;

function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TService1.ServiceStart(Sender: TService;
var Started: Boolean);
begin
Started := TRUE;
end;

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminateddo
begin
if not fPaused then
begin
Sleep(100);
showmessage('ok') //->这行代码不知道执行了没有??
end;
ServiceThread.ProcessRequests(FALSE);
end;
end;
end.
问题:showmessage那行的语句没有效果!
申明
1。编译时没有错误。
2。我在“开始->运行。。。”里安装了编译生成的EXE文件。project1.exe -install
3。我也在“开始->程序->管理工具->服务” 里找到了相关的服务项!可以启动,停止。。。
4。环境:Delphi 6.0,Windows 2000 server family
 
procedure TService1.ServiceExecute(Sender: TService);
begin
showmessage('ok') //->放在这儿执行吗??
while not Terminateddo
begin
if not fPaused then
begin
Sleep(100);
end;
ServiceThread.ProcessRequests(FALSE);
end;
end;

如果执行,应该是Terminated,fPaused的值的设置问题。
仔细查看一下逻辑。
 
试试看啦!
 
在 service Application 的 ServiceExecute 里是窗体、交互等都是不会出来的,
也许是系统自动跳过了,也许是因为它是一个后台线程
 
设断点或用MessageBox试一下。
 
Service一般不允许有窗口,要实在想Show出来,把那个Service的登录设置中的本地系统帐户
改为允许服务与桌面交互即可
 
MessageBox是不能工作的吗,我做的一样不行。
 
=>>>“登录设置中的本地系统帐户”
是什么地方设置?

设断点? 好像 Service不可以在Delphi里调试啊。那断点有用吗?
 
同意浦欣
 
大家仔细看好了,偶中午刚刚解决了一个同样的问题:
将你的主form中uses的部分与data server的uses部分仔细比较一下,看看有什么区别?!
对了,将缺少的部分加上吧!尤其是forms,不然出不来窗口。
 
TO:houxdd
你说的我也是啦,不行。而且现在停止也不行啦。报错:系统内部错误。。
你可以把你的代码贴出来看看吗?
 
将service的interactive设置为true,给分吧。
 
同意:fox816。呵呵。
兄弟们,上面的问题我基本已经解决。。。。。。。。。。。。
等会儿就结帐!
但是,现在突然发现一个问题。
1。应用程序里可以调用的DLL 服务里面用会有问题。
2。好像ADO都有问题!
3。上面的两个问题用
...
except
On E:Exceptiondo
ShowMessage(E.Message);
...
捕获错误时,报出:“标记没有引用存储”
嘿嘿,我还没有碰见过中文的报错信息。好奇怪!!!!
==================================
环境: D6 +W2K server 版

 
中文的报错信息是WINDOWS提供的。
 
这??
那位知道:“标记没有引用存储” 是什么原因!
 
::允许服务与桌面交互!!
 
是的,这个我已经发现并且已经可以啦。
[red]封贴![/red]
热心的朋友可以关注与此贴有关的:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1349845
问题解决后一并结帐! 谢谢
 
多人接受答案了。
 
顶部