//---------------------------------------------------------------------------
#include
#include
#include
//---------------------------------------------------------------------------
bool __fastcall TForm1::DeinstallService(AnsiString SrvName)
{
BOOL ret = true;
SC_HANDLE scm;
SC_HANDLE svc;
UnicodeString blad;
int retError = 0;
scm = OpenSCManager(
NULL,
SERVICES_ACTIVE_DATABASE,
SC_MANAGER_ALL_ACCESS
);
if( scm==NULL ){
retError = GetLastError();
switch(retError){
case ERROR_ACCESS_DENIED: blad = "Brak uprawnień do menadżera usług"; break;
case ERROR_DATABASE_DOES_NOT_EXIST: blad = "The specified database does not exist"; break;
default: blad = "Nie udało się otworzyć menadżera usług, kod błędu: " + UnicodeString(GetLastError());
}
Vcl::Forms::Application->MessageBox(blad.c_str(), L"Błąd", MB_ICONERROR | MB_OK);
return false;
}
svc = OpenService(
scm,
SrvName.c_str(),
SERVICE_ALL_ACCESS
);
if( svc==NULL ){
retError = GetLastError();
if(retError == 1060)
blad = "Usługa o podanej nazwie nie istnieje - kod błędu: 1060";
else
blad = "Błąd deinstalacji usługi, kod błędu: " + UnicodeString(retError);
Vcl::Forms::Application->MessageBox(blad.c_str(),L"Błąd", MB_ICONERROR | MB_OK);
CloseServiceHandle(scm);
return false;
}
ret = DeleteService(svc);
if(!ret){
retError = GetLastError();
switch(retError){
case ERROR_ACCESS_DENIED: blad = "Brak uprawnień do menadżera usług"; break;
case ERROR_INVALID_HANDLE: blad = "The specified handle is invalid."; break;
case ERROR_SERVICE_MARKED_FOR_DELETE: blad = "The specified service has already been marked for deletion."; break;
default: blad = "Nie udało się odinstalować usługi, kod błędu: " + UnicodeString(GetLastError());
}
Vcl::Forms::Application->MessageBox(blad.c_str(), L"Błąd", MB_ICONERROR | MB_OK);
}
CloseServiceHandle(svc);
CloseServiceHandle(scm);
return ret;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(DeinstallService(ServiceName->Text))
Vcl::Forms::Application->MessageBox(L"Usługa została odinstalowana.", L"Deinstalacja usługi", MB_ICONINFORMATION | MB_OK);
}
//---------------------------------------------------------------------------
Uwaga! Aby operacja się powiodła aplikacja musi mieć podniesione uprawnienia. Należy koniecznie w ustawieniach projektu włączyć opcję „Enable Administrator Privileges” znajdującą się w sekcji „Application”. W starszych wersjach środowiska ta opcja może być niedostępna, w takiej sytuacji należy dołączyć odpowiedni plik manifestu.