unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsvc, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function InstallService(SvcName, SvcDispName, SvcFullPath: string): integer;
var
hSCM, hService: SC_HANDLE;
sInfo: string;
begin
result := 0;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then
begin
result := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(result));
{$ENDIF}
exit;
end;
try
hService := CreateService(hSCM,
PChar(SvcName),
PChar(SvcDispName),
SERVICE_ALL_ACCESS, //SERVICE_START OR SERVICE_QUERY_STATUS OR _DELETE,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, //SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
PChar(SvcFullPath),
nil, nil, nil, nil, nil);
if hService = 0 then
begin
result := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(result));
{$ENDIF}
case result of
ERROR_ACCESS_DENIED: sInfo := 'ERROR_ACCESS_DENIED';
ERROR_CIRCULAR_DEPENDENCY: sInfo := 'ERROR_CIRCULAR_DEPENDENCY';
ERROR_DUPLICATE_SERVICE_NAME: sInfo := 'ERROR_DUPLICATE_SERVICE_NAME';
ERROR_INVALID_HANDLE: sInfo := 'ERROR_INVALID_HANDLE';
ERROR_INVALID_NAME: sInfo := 'ERROR_INVALID_NAME';
ERROR_INVALID_PARAMETER: sInfo := 'ERROR_INVALID_PARAMETER';
ERROR_INVALID_SERVICE_ACCOUNT: sInfo := 'ERROR_INVALID_SERVICE_ACCOUNT';
ERROR_SERVICE_EXISTS: sInfo := 'ERROR_SERVICE_EXISTS';
end;
{$IFDEF DEBUG}
ShowMessage(sInfo);
{$ENDIF}
end
else
CloseServiceHandle(hService);
finally
CloseServiceHandle(hSCM);
end;
end;
function 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 TForm1.Button1Click(Sender: TObject);
begin
installservice('wealsh','wealsh','d:\wealsh.exe')
end;procedure TForm1.Button2Click(Sender: TObject);
begin
uninstallservice('wealsh');
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsvc, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function InstallService(SvcName, SvcDispName, SvcFullPath: string): integer;
var
hSCM, hService: SC_HANDLE;
sInfo: string;
begin
result := 0;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then
begin
result := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(result));
{$ENDIF}
exit;
end;
try
hService := CreateService(hSCM,
PChar(SvcName),
PChar(SvcDispName),
SERVICE_ALL_ACCESS, //SERVICE_START OR SERVICE_QUERY_STATUS OR _DELETE,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, //SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
PChar(SvcFullPath),
nil, nil, nil, nil, nil);
if hService = 0 then
begin
result := GetLastError;
{$IFDEF DEBUG}
ShowMessage(SysErrorMessage(result));
{$ENDIF}
case result of
ERROR_ACCESS_DENIED: sInfo := 'ERROR_ACCESS_DENIED';
ERROR_CIRCULAR_DEPENDENCY: sInfo := 'ERROR_CIRCULAR_DEPENDENCY';
ERROR_DUPLICATE_SERVICE_NAME: sInfo := 'ERROR_DUPLICATE_SERVICE_NAME';
ERROR_INVALID_HANDLE: sInfo := 'ERROR_INVALID_HANDLE';
ERROR_INVALID_NAME: sInfo := 'ERROR_INVALID_NAME';
ERROR_INVALID_PARAMETER: sInfo := 'ERROR_INVALID_PARAMETER';
ERROR_INVALID_SERVICE_ACCOUNT: sInfo := 'ERROR_INVALID_SERVICE_ACCOUNT';
ERROR_SERVICE_EXISTS: sInfo := 'ERROR_SERVICE_EXISTS';
end;
{$IFDEF DEBUG}
ShowMessage(sInfo);
{$ENDIF}
end
else
CloseServiceHandle(hService);
finally
CloseServiceHandle(hSCM);
end;
end;
function 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 TForm1.Button1Click(Sender: TObject);
begin
installservice('wealsh','wealsh','d:\wealsh.exe')
end;procedure TForm1.Button2Click(Sender: TObject);
begin
uninstallservice('wealsh');
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货