最近写了个服务,
1、怎么实现双击EXE就自动注册,安装,不用 每次
CService.exe /install
net start CSer
请高手帮忙给出代码2、退出服务时我的过程是这样写的,怎么退不掉呢????function TFrm_Main.UnInstallService(SvcName: string): boolean;
var
hSCM, hService: SC_HANDLE;
ErCode: DWord;
begin
Result := false;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then
begin
ErCode := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
exit;
end;
try
hService := OpenService(hSCM, PChar(SvcName),
SERVICE_ALL_ACCESS);
if hService = 0 then
begin
ErCode := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
exit;
end;
result := DeleteService(hService);
if not result then
begin
ErCode := GetLastError;
case ErCode of
ERROR_ACCESS_DENIED: ;
ERROR_INVALID_HANDLE: ;
ERROR_SERVICE_MARKED_FOR_DELETE: ;
end;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
end;
CloseServiceHandle(hService);
finally
CloseServiceHandle(hSCM);
end;
end;procedure TFrm_Main.Action_ExitExecute(Sender: TObject);
begin
if Application.MessageBox('确认要退出服务器吗?',App_Caption,MB_OKCANCEL+MB_ICONQUESTION)= idok then
begin
UnInstallService('CSer');
end
else
ShowMessage('faile');
end;=================================请高手指点
1、怎么实现双击EXE就自动注册,安装,不用 每次
CService.exe /install
net start CSer
请高手帮忙给出代码2、退出服务时我的过程是这样写的,怎么退不掉呢????function TFrm_Main.UnInstallService(SvcName: string): boolean;
var
hSCM, hService: SC_HANDLE;
ErCode: DWord;
begin
Result := false;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then
begin
ErCode := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
exit;
end;
try
hService := OpenService(hSCM, PChar(SvcName),
SERVICE_ALL_ACCESS);
if hService = 0 then
begin
ErCode := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
exit;
end;
result := DeleteService(hService);
if not result then
begin
ErCode := GetLastError;
case ErCode of
ERROR_ACCESS_DENIED: ;
ERROR_INVALID_HANDLE: ;
ERROR_SERVICE_MARKED_FOR_DELETE: ;
end;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(ErCode));
{$ENDIF}
end;
CloseServiceHandle(hService);
finally
CloseServiceHandle(hSCM);
end;
end;procedure TFrm_Main.Action_ExitExecute(Sender: TObject);
begin
if Application.MessageBox('确认要退出服务器吗?',App_Caption,MB_OKCANCEL+MB_ICONQUESTION)= idok then
begin
UnInstallService('CSer');
end
else
ShowMessage('faile');
end;=================================请高手指点
2. 感情你那是在卸载服务,而不是退出。退出就是结束服务,通过服务器控制器stop就可以了。就算是需要删除也要先停止。或者也可以象安装那样带参数调用来uninstall,当然还是要选结束掉服务程序。