2011-01-31 13 views
5

Im Obecnie pracuję nad ApplicationLauncher/Autoupdater. Aby zainstalować/zaktualizować aplikację do "Program Files", muszę poprosić o uprawnienia Administratora.Uprawnienia administratora dla pojedynczej metody

Cóż, ponieważ Aktualizator musi tylko napisać coś, jeśli zostaną znalezione nowe Wersje, spróbowałem uzyskać tylko żądanie przywilejów, jeśli zostanie znaleziona nowa.

Updater jest wykonywana za każdym razem, zanim zostanie wprowadzona aplikacji, więc pytanie „za każdym razem” dla Adminrights ma rozwiązania ...

Szukałem dużo, i stwierdził, co następuje:

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")] 
    private void InstallOrUpdate(AppItem appItem) 

ale WENN próbuję tego, aktualizator rzuca wyjątek SecurityException ...

Prośba o pozwolenie główne nie powiodła się.

Co robię źle?

Najlepsze chodzi, Dognose

Odpowiedz

3

Nie można podwyższyć uprawnień dla aplikacji po jej uruchomieniu. Aby zażądać roli Administratorzy, należy ją wykonać przy uruchomieniu pliku wykonywalnego.

Najlepszym wyjściem byłoby, gdyby twój program aktualizujący uruchomił inny plik wykonywalny, aby wykonać InstallOrUpdate, lub aby ponownie uruchomić się (z potencjalnie innym argumentem wiersza poleceń) z żądaniem podniesienia uprawnień w tym punkcie.

+0

Podczas wykonywania czynności administracyjnych w systemie Windows widzę przyciski w formularzach z ikoną administracyjną obok nich. Kiedy klikam przycisk, UAC prosi o podniesienie uprawnień. Czy mówisz, że dla każdego przycisku administracyjnego Windows uruchamia nowy proces? A może dzieje się coś innego? – Phil

+0

@Phil: Tak. Zasadniczo, jeśli widzisz monit UAC, wiesz, że nowy proces zacznie się w tym momencie. –

+0

@Phil, dobrym przykładem jest Menedżer zadań Windows i przycisk "Pokaż procesy od wszystkich użytkowników". Kliknięcie tego nie tylko aktualizuje Menedżera zadań, uruchamia go z podwyższonymi uprawnieniami. –

2

UAC elewacja za procesie, to znaczy proces jako całość jest podwyższone, nie od jednej metody. Najlepszym sposobem działania byłoby utworzenie określonego procesu działania, który wymaga podwyższonych uprawnień, i uruchomienie tego procesu z poziomu aktualizatora, gdy rzeczywiście wymaga on pracy. This might help.

Powiązane problemy