Jak wymusić uruchomienie aplikacji w trybie administratora?
Na szybko
Do pliku manifestu (stwórz, jeśli nie masz) wpisz taki kod:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
Po kolei
Wstęp
Czasem zachodzi potrzeba, żeby aplikacja była uruchamiana tylko w trybie administratora. Musi mieć podniesione uprawnienia, żeby na przykład móc utworzyć lub usuwać pliki w katalogu ProgramFiles albo robić inne operacje, które są niedozwolone dla zwykłego użytkownika. Każdą aplikację desktopową można ustawić tak, żeby była uruchamiana tylko w trybie admina. Co więcej, robi się to dokładnie tak samo niezależnie od technologii. Ważne, żeby aplikacja pracowała pod Windowsem.
Manifest
Manifest to specjalny plik XML (w .NET), który opisuje pewne metadane naszej aplikacji. Ten plik zazwyczaj znajduje się w katalogu z kodem i ma rozszerzenie .manifest, np: moja-aplikacja.exe.manifest (możesz mieć kilka plików z takim rozszerzeniem). Ale UWAGA! Plik manifestu nie jest tworzony automatycznie, więc jeśli go nie masz, musisz stworzyć go samemu.
Tworzenie manifestu
- W VisualStudio kliknij prawym klawiszem na swój projekt i wybierz Add -> New Item
- W okienku SEARCH zacznij wpisywać „manifest”
- Powinieneś na liście zobaczyć element „Application Manifest File (Windows only)”. Dodaj go.
- Zobaczysz domyślny manifest aplikacji.
- Następnie przejdź do właściwości projektu i na karcie Application sprawdź, czy aplikacja będzie budowana z tym właśnie manifestem.
I wreszcie… uruchamianie jako admin
Musisz teraz tylko zrobić małą zmianę w pliku manifestu. W sekcji trustInfo->security->requestedPrivileges
powinieneś zobaczyć taki wpis:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
teraz wystarczy, że zmienisz to na:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
zbudujesz aplikację i gotowe.
Ostatecznie plik manifestu u mnie po usunięciu komentarzy wygląda tak:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
</assembly>
Manifest aplikacji staje się jej zasobem. Od tej pory aplikacja do uruchomienia będzie wymagała uprawnień administratora i będzie mogła zrobić wszystko to, co może administrator.
Pamiętaj tylko, że to jest bardzo specyficzne wymaganie np. dla instalatorów lub pewnych programów narzędziowych. Więc zanim je wdrożysz, zastanów się dobrze, czy to dobre i jedyne wyjście.
UWAGA! Aby debugować taką aplikację, musisz uruchomić Visual Studio w trybie administratora. W przeciwnym razie VS nie będzie mógł jej uruchomić.