发新话题
打印

[转载]安装删除NTService

[转载]安装删除NTService

  信息来源:邪恶八进制

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.btnInstallServiceClick(Sender: TObject);
begin
  InstallService('Service1', 'Ari''s Service1', 'G:\test\service\AriSerApp.exe');
end;

procedure TForm1.btnDelServiceClick(Sender: TObject);
begin
  if unInstallService('Service1') then
   ShowMessage('unInstall Service success');
end;
在我纯真年少時,有一個女生,她願意爲我失去生命,她意志堅定地說:你再纏著我,我就去死! 在我負笈外地時,有一個女生,她願意等我到下輩子,她溫柔婉約地說:你想成爲我男友?等下輩子!! 在我窮困潦倒時,有一個女生,她願意與我共赴黃泉,她眨著紅眼說:你再不還錢,我和你同歸于盡!

TOP

发新话题