2011-10-24 9 views
6

Mam jeden poważny problem z moją aplikacją. Mam aktualizację aplikacji & jako oddzielne pliki exe. Gdy aktualizacja jest dostępna, updater dokonuje aktualizacji, a po jej zakończeniu uruchamia moją aplikację. Głównym problemem jest - aplikacja jest instalowana w folderze plików programu, więc updater potrzebuje uprawnień administratora UAC, i to jest w porządku, ale kiedy potrzebuję uruchomić moją aplikację, aktualizator musi uruchomić go jako zwykły użytkownik, ponieważ jeśli jest uruchamiany jako administrator, przeciągnij i drop nie działa (nie jest to problem z aplikacją, UAC go blokuje). Wypróbowałem kilka różnych rozwiązań, a nawet ten: How to run NOT elevated in Vista (.NET)C# proces uruchamiania z obniżonymi uprawnieniami z poziomu procesu administracyjnego UAC

To mi nie pomogło - moja aplikacja działa jako administrator.

Odpowiedz

9

Lepiej unikać rozpoczynania niewysłużonego procesu od podwyższonego. To trudna część i podatna na błędy.

Takie podejście jest lepsze:

  1. Twój updater początkowo rozpoczyna się zakaz stosowania podwyższonej, a jego manifestu ma asInvoker poziom.
  2. Po uruchomieniu ponownie uruchamia się z podwyższonymi uprawnieniami, używając czasownika runas i przekazuje parametr wiersza polecenia, aby to zaznaczyć. Ta instancja wykonuje aktualizację i zwraca.
  3. Nadchodzi zakaz podwyższone Updater i rozpoczyna swoją aplikację z tym samym non-podwyższone tokenem użytkownika, który uruchomił pierwszą instancję Updater w kroku 1.

Całkiem proste i wytrzymałe.

+0

+1; Pierwsza linia tej odpowiedzi jest dość ważna. Czytałem artykuły, które mówiły, że złym pomysłem jest próba de-podniesienia (zdobycie żetonu z podniesionym poziomem podszywania się), bez względu na to, jaką technikę spróbujesz. Nie wiem, gdzie to znaleźć lub tych artykułów, ponieważ czytałem o tym, kiedy Vista po raz pierwszy wyszła. W tym pytaniu podano inną opcję: http://stackoverflow.com/questions/1173630/how-do-you-de-elevate-privileges-for-a-child-process –

+0

Spróbuję w ten sposób, dziękuję za odpowiedź. :) – n1tr0

+0

Wykonany w ten sposób - działa jak urok! Wielkie dzięki, przyjacielu! ;) – n1tr0

Powiązane problemy