2009-12-10 14 views
5

Mam aplikację WinForm, nad którą pracuję. Jest jeden mały element funkcjonalności, który musi być uruchamiany jako administrator w Vista/Win7. Rozumiem, jak ustawić żądanąExecutionLevel dla aplikacji w manifeście. Sztuczka polega na tym, że nie chcę, aby użytkownik uruchamiał całą aplikację jako administrator, tylko jedną jej część. Tak więc chciałbym, aby większość funkcjonalności działała jakoInvoker.Wymagany poziom wykonania dla biblioteki dll

Jeśli umieściłem funkcję administratora w bibliotece DLL, czy istnieje sposób na oznaczenie go jako requireAdministrator? Próbowałem użyć MT, aby dodać manifest do biblioteki dll, ale to nie wydaje się działać. Co muszę zrobić?

Odpowiedz

4

Nie ma żadnego sposobu na rozróżnienie poziomu wykonania aplikacji w bibliotece DLL według DLL. To jest ustawienie dla całego procesu. Musiałbyś wywołać inny proces w twojej aplikacji, który uruchamia kod w tej bibliotece DLL z podniesionym privs.

Jedną z opcji jest użycie programu rundll lub rundll32 do bezpośredniego uruchomienia biblioteki DLL. Jest to samodzielny program do systemu Windows przeznaczony do ładowania i uruchamiania określonej biblioteki DLL. Możesz podnieść proces rundll i uzyskać izolację, której pragniesz.

Googling dla rundll dostarczy Ci wielu porad, jak go używać :).

+0

Czy DLL może zostać wykonany jako proces własny, czy też musi zostać uruchomiony z pliku EXE? – epotter

+0

@epotter Poprawiłem nieco odpowiedź na ten temat. – JaredPar

3

Elewacja jest procesem, więc nie można mieć DLL podniesiony przez siebie. Musisz przyjrzeć się hostowaniu biblioteki DLL w oddzielnym, zaawansowanym procesie; lub możesz spojrzeć na monocer COM wzniesienia i zrobić to w ten sposób.

Powiązane problemy