紧急求助-Windows 服务程序的制作

laobeli 2007-08-02 11:26:21
程序功能,每五秒中更新服务的系统时间,为什么线程类中的输出文本文件能执行 FList.Add('123');
FList.SaveToFile('c:\aaaa.txt');而更新时间不能执行呢?
winexec( pchar('net time \\192.168.1.18 /set /y'),SW_hide);
unit ServiceMain;

interface

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

type
TSkyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;

TSkyrityService = 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 }
FSkyThread: TSkyThread;
FList:TStringList;
public
function GetServiceController: TServiceController; override;
procedure GT;
{ Public declarations }
end;


var
SkyrityService: TSkyrityService;

implementation

uses MainForm;

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
SkyrityService.Controller(CtrlCode);

end;

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

procedure TSkyrityService.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;

procedure TSkyrityService.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;

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

procedure TSkyrityService.ServiceShutdown(Sender: TService);
begin
//gbCanClose := true;
FrmMain.Free;
Status := csStopped;
ReportStatus();
end;

procedure TSkyrityService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
Started := True;
flist:= tstringlist.Create;
FSkyThread:= TSkyThread.Create(false);
Svcmgr.Application.CreateForm(TFrmMain, FrmMain);
//gbCanClose := False;
//FrmMain.Hide;
end;

procedure TSkyrityService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
Stopped := True;
//gbCanClose := True;
FrmMain.Free;
end;

procedure TSkyrityService.GT;
begin

FList.Add('123');
FList.SaveToFile('c:\aaaa.txt');
winexec( pchar('net time \\192.168.1.18 /set /y'),SW_hide);
end;

{ Cservicetest }

procedure TSkyThread.Execute;
begin
inherited;
while not Terminated do
begin
SkyrityService.GT;
sleep(5000);
end;
end;
end.
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CloneCenter 2007-08-08
  • 打赏
  • 举报
回复
还有,是不是用户的权限问题?
rodgerkong 2007-08-07
  • 打赏
  • 举报
回复
还有一点可能很重要:Winexec只在调用进程调用GetMessage之后才返回,也就是说主进程必须有个消息队列,对于Service中的线程来说,Winexec很可能无法返回。
所以最好还是用CreateProcess。
rodgerkong 2007-08-07
  • 打赏
  • 举报
回复
检查一下Winexec的返回值,是个Word类型:

如果成功返回值大于31.

否则
0=系统内存或资源不足
2= 文件不存在
3= 路径不存在
11=可执行文件错误

另外,Winexec是为16位程序保留的函数,最好还是用CreateProcess。
brightyang 2007-08-02
  • 打赏
  • 举报
回复
winexec( pchar('net time \\192.168.1.18 /set /y'),SW_hide)
是没有执行还是执行不成功????
laobeli 2007-08-02
  • 打赏
  • 举报
回复
没有执行和执行不成功有区别吗

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧