i objawia mój plik wykonywalny jako wymagać administrator:Podpisany plik wykonywalny i RequireAdministrator uruchamiany z folderu tymczasowego?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Disable Windows Vista UAC compatability heuristics -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
a potem cyfrowo podpisał.
ale kiedy uruchomić plik wykonywalny zauważyłem coś dziwnego: nazwę pliku wykonywalnego na zgody dialogowe zmieniło od PingWarning.exe
do pinxxxx.tmp
; jakby kopia temp została wykonana, a to jest bieg:
alt text http://i42.tinypic.com/nmkppz.jpg
i wykopane Process Montior, aby sprawdzić, czy ktoś jest stworzenie pliku * .tmp kiedy uruchomić mój plik wykonywalny, a tam jest:
alt text http://i42.tinypic.com/10o1b8g.jpg
Informacja Zastosowanie usług wewnątrz tej konkretnej svchost
pojemnika jest celowo kopiowanie mojego pliku wykonywalnego do foldera tymczasowego Windows, z prośbą o podanie "Zgody" użytkownika; podając niepoprawną nazwę pliku.
Po zgoda została udzielona, wykonywalny zostanie uruchomiony z jego oryginalnej lokalizacji: link text http://i43.tinypic.com/104noub.jpg
Plik nie jest kopiowane do folderu temp gdybym nie podpisać cyfrowo go:
alt text http://i43.tinypic.com/14kvevd.jpg
Więc moim problemem jest niepoprawna nazwa pliku pojawiająca się na zgoda okno dialogowe, kiedy i podpisałem cyfrowo mój plik wykonywalny, który został zamanifestowany jako requireAdministrator
.
Co zrobić?
Aktualizacja:
najbliższa rzecz do wyjaśnienia mogę znaleźć pochodzi z Uninformed.org (http://uninformed.org/index.cgi?v=8&a=6&p=3):
W przypadku żądania uruchomienia dla programu wzywającego poziomem UIAccess , appinfo! RAiLaunchAdminProcess jest wezwany do obsługi żądania. Proces jest następnie weryfikowane będzie w ciągu się (na stałe) zestaw dozwolonych katalogów przez AiCheckSecureApplicationDirectory appinfo!. Po sprawdzeniu, czy program jest uruchamiany z dozwolonego katalogu , kontrola jest ostatecznie przekazana do aplikacji !AiLaunchProcess , który wykonuje pozostałą pracę niezbędną do obsługi żądania uruchomienia . W tym momencie, z powodu „zabezpieczyć” katalogu aplikacji wymóg, że nie jest możliwe dla ograniczoną użytkownika (lub użytkownik działa z niskiej integralności, dla tej sprawy) do miejscu niestandardowy plik wykonywalny w dowolnym na "bezpieczne" katalogi aplikacji.
Podpowiedź istota że kilka (nielegalnych, nie określona) na sztywno ścieżki aplikacja jest „dozwolony”, która znajduje się w.
Innym jest to dla programu wzywającego poziomem UIAccess. W moim przypadku nie miałem uiAccess="false"
w moim oryginalnym manifeście. Ale zmiana manifestu obejmują dostęp bez Ui:
Ale to nie rozwiąże problemu oryginalnego.
Aktualizacja druga:
Od MSDN():
Ważne
Aplikacje z flagą poziomem UIAccess ustawiony na true musi być Authenticode podpisany zacząć prawidłowo. Ponadto aplikacja musi mieć znajdować się w chronionym miejscu w systemie plików . \ Program Files \ and \ windows \ system32 \
to obecnie dwie dozwolone chronione lokalizacje.
Wydaje się, że tworzy kopię zapasową twierdzenia, że plik wykonywalny żądający uiAccess
musi znajdować się w dozwolonej lokalizacji; z wyjątkiem tego, że nie proszę o uiAccess.