Programy - Poradnik

Kontrolka Delphi TService i "System Error. Code: 5. Odmowa dostępu." w Win Vista i Win 7.

Delphi zawiera wygodną "kontrolkę" do budowy aplikacji serwisowych dla windows (File|New|Other...|Delphi Projects: Service Application).

Uruchamiając gotowy (skompilowany) program z parametrem "/install" zainstalujemy naszą aplikację jako windowsowy serwis (stanie się usługą widoczną jedynie w "Menedżer zadań windows"). Analogicznie "/uninstall" spowoduje wypisanie aplikacji z windowsowych usług. Dodając parametr "/silent" spowodujemy pominięcie wyświetlania okienka potwierdzającego zainstalowanie/odinstalowanie usługi. Aplikacja zarejestrowana jako usługa będzie aktywna po zresetowaniu komputera (od tej pory będzie się uruchamiać automatycznie przy każdym starcie komputera).

W Windows Vista i Windows 7 po próbie instalacji serwisu zobaczymy komunikat (nawet jeśli pracujemy na koncie administratora):

Application Error
Exception EOSError in module KeyLogger.exe at 0000F02E.
System Error. Code: 5.
Odmowa dostępu.

W ten sposób Windows chroni się przed niekontrolowanymi zamachami na bezpieczeństwo systemu (np. przed instalacją KeyLoggera).

Aby zainstalować serwis w Vista/Win7 należy najpierw uruchomić program "Wiersz polecenia" lub "Total Commander" w trybie administratora (prawy klawisz myszki nad ikonką programu, wybór z menu kontekstowego: "Uruchom jako administrator"). Z poziomu tych programów możliwe będzie zainstalowanie naszego serwisu.

Bardziej eleganckim rozwiązaniem będzie przygotowanie odpowiedniego pliku "manifestu" i dołączenie go do pliku wykonywalnego naszego programu jako zasób. W starszych wersjach Delphi (np. 2006) wystarczy taki zasób podłączyć do naszej aplikacji. Nowe programy skompilowane nowymi wersjami Delphi (np. 2009) zawierają już plik manifestu - niestety, nieodpowiedni dla naszych celów. Samo podłączenie dodatkowego manifestu ze zmienionym poziomem bezpieczeństwa z "asInvoker" na "requireAdministrator" nic nie poprawi. Natomiast próba kompilacji naszego programu, po dodaniu do projektu źródła (plik *.RC) kompilatora zasobów (program brcc32.exe), spowoduje wyświetlenie ostrzeżenia o konflikcie w zasobach. Przed dołączeniem zasobu z prawidłowym plikiem manifestu należy usunąć istniejący w "*.RES" nieodpowiedni manifest (np. edytorem zasobów dołączanym do starych wersji Delphi).

Jeśli posiadamy komercyjny program instalacyjny, to prawdopodobnie on sam się zatroszczy o prawidłowe zarejestrowanie naszej usługi bez dodatkowych zabiegów (należy sprawdzić w dokumentacji instalatora).

Jeden ze sposobów dołączenia manifestu do aplikacji serwisowej

1. Wczytujemy skompilowany program do dowolnego "Listera" (np. klawisz {F3} w Total Commander).

2. Kopiujemy do schowka końcowy fragment pliku pierwotnej wersji naszej aplikacji z manifestem, przenosimy ze schowka do pliku tekstowego, zapisujemy na dysku pod nazwą np. "Serwisowy.Manifest". Ewentualnie tekst formatujemy.

3. W pliku manifestu zmieniamy poziom bezpieczeństwa z level="asInvoker" na level="requireAdministrator".

4. Przygotowujemy plik np. "PoziomAdministratora.RC" i wpisujemy do niego wiersz:
1 24 "Serwisowy.Manifest"

5. Kompilujemy źródło: brcc32.exe PoziomAdministratora.RC

6. Otrzymujemy plik z zasobem: PoziomAdministratora.RES

7. Usuwamy z pliku zasobów naszej aplikacji zasób z manifestem.

8. Dopisujemy do pliku *.DPR (po linijce {$R *.RES}):
{$R PoziomAdministratora.RES}

9. Kompilujemy projekt. Sprawdzamy koniec pliku wykonywalnego ("Listerem"), czy uzyskaliśmy pożądany efekt (level="requireAdministrator").

Copyrights © 2000-2010 “BudKom“ Marek Nowicki | Co nowego? | Projekty | Programy | BricsCAD | ZwCAD | DxfOczka3D | ZbrojMAP | StalWyk | Sklep | Kontakt