怎样做一个在NT服务器端能自动启动的程序?(100分)

  • 主题发起人 主题发起人 qj_chen
  • 开始时间 开始时间
Q

qj_chen

Unregistered / Unconfirmed
GUEST, unregistred user!
我编制的一个NT服务器端程序放在“启动”中,这样很不方便。每次开机时都要登陆
一次才能启动这个程序,另外该程序启动后显示在任务栏中,不隐蔽,容易被人关闭。
怎样才能使它在服务器开机后不需登陆就能自动启动?而且不在桌面上留任痕迹?
 
就直接做成服务程序不就成了?
 
谢谢honghs,我不知道如何直接做服务程序,请指点一下,好吗?
 
把email告诉我,我发了能把exe做成service的东东给你
 
多谢了,qj_chen@163.com
 
Delphi File/New/Sevice

Delphi 都有范例的,

注意的是:命令行实现服务的运行比较容易,向下面一样

project1 /install
project1 /uninstall
安装、卸载一个服务

net start service1
net stop service1
启动、停止一个服务

代码实现就比较麻烦了,看看我的这段代码吧

function ServiceStart(sMachine, sService: String) : Boolean;
var
schm, schs: SC_Handle;
ss: TServiceStatus;
psTemp: PChar;
dwChkP: DWord;
begin
ss.dwCurrentState := 0;
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if (schm>0) then
begin
schs := OpenService(schm, PChar(sService), SERVICE_START or SERVICE_QUERY_STATUS);
if (schs>0) then
begin
psTemp := nil;
if (StartService(schs, 0, psTemp)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_RUNNING<>ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if ss.dwCheckPoint <> 0 then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_RUNNING=ss.dwCurrentState;
end;

function ServiceStop(sMachine, sService: String) : Boolean;
var schm, schs: SC_Handle;
ss: TServiceStatus;
dwChkP: DWord;
begin
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if (schm>0) then begin
schs := OpenService(schm, PChar(sService), SERVICE_STOP or SERVICE_QUERY_STATUS);
if (schs>0) then
begin
if (ControlService(schs, SERVICE_CONTROL_STOP, ss)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_STOPPED<>ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if ss.dwCheckPoint <> 0 then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED=ss.dwCurrentState;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
ServiceStart('','Service2');
//ServiceStart('//computername','Alerter');
//this would be for remote services
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ServiceStop('','Service2');
end;

 
写Service程序啊。
 
接受答案了.
 
honghs,我也有此类问题,请你也发个这样的工具给我好吗?多谢了
我的邮箱:ye.he@mwcard.com
 
后退
顶部