2010-11-03 12 views
8

Mam funkcję w mojej aplikacji, która wymaga uprawnień administratora.Szybki dostęp do uprawnień administratora w C# aplikacji

To, czego chcę, to po kliknięciu przycisku w celu wykonania tej funkcji, należy poprosić o nazwę użytkownika i hasło administratora. (Uruchom okno dialogowe UAC i wyświetl ikonę na tym przycisku.)

Czy to możliwe?

alt text

PS: Wiem o uruchomieniu aplikacji z uprawnieniami administratora w prawo, dokonując zmian w pliku manifestu.

Ta funkcja jest częścią dużego programu i nie można jej przenieść do osobnego programu.

+0

Musisz ponownie uruchomić aplikację po przyznaniu pełnego dostępu administratora, aby aplikacja mogła korzystać z nowych uprawnień. Stąd dlaczego @Rob zasugerował, że używasz oddzielnej aplikacji. Najlepszą rekomendacją, jaką mogę dać, jest to, że żądasz pełnych praw dostępu, gdy aplikacja zostanie uruchomiona na początku, jeśli naprawdę tego potrzebujesz. –

+0

Doceniam Twoją sugestię, ale nasza aplikacja może zostać wykonana nawet przez użytkowników Gościa (co jest wymagane) i tylko czasami potrzebujemy uprawnień administratora. – Raj

+0

@Raj Jestem pewien, że UAC nie działa w ten sposób. Powodzenia :) –

Odpowiedz

4

Najlepszym sposobem na osiągnięcie tego celu jest posiadanie drugiego pliku wykonywalnego, który zawiera kod wymagający uprawnień administratora, który jest odpowiednio wyświetlany. Kiedy twoja aplikacja musi wykonać kod, który wymaga praw administracyjnych, zadzwoń do tego programu.

Na przykład:

MyProgram.exe - brak oczywistego
MyProgramElevated.exe - ma manifestu, który wskazuje, że wymaga praw administratora

Kiedy MyProgram.exe potrzeby, aby wykonać działanie, jak podniósł ją wykonuje MyProgramElevated.exe , przekazywanie parametrów wiersza poleceń wskazujących, jakie wymagane jest podniesienie zadania.

+0

To była pierwsza rzecz, którą chciałem zrobić, ale ta funkcja jest częścią dużego programu i nie może być przeniesiona do oddzielnego programu. – Raj

+1

@Raj, nie jestem świadomy żadnego sposobu na uzyskanie "pełnego" tokena poza robieniem tego, co zasugerowałem. Dodałem jeszcze kilka tagów do twojego pytania, aby mieć nadzieję, że stanie się bardziej widoczny, ponieważ ktoś inny może znać rozwiązanie, którego nie mam.) – Rob

+0

Bardzo dziękuję Rob .. :) – Raj

5

można uzyskać ikonę korzystając StockIcons.Shield z Windows API Code Pack

można uruchomić program z uprawnieniami administratora bez zmiany manifest programu za pomocą „runas” czasownik (można również wykorzystać do ponownego uruchom Program z prawami administratora):

Process.Start(new ProcessStartInfo() 
    { 
     Verb = "runas", 
     FileName = "Notepad.exe", 
    }); 

jest API COM, który pozwala utworzyć obiekt COM z prawami administratora w procesie non-admin, ale uważam, że to bardzo trudne do wykorzystania w tym z aplikacji .NET.

Powiązane problemy