2010-05-13 12 views
5

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.

Odpowiedz

2

I widać ten sam problem z zastosowań bez znaku, a zwłaszcza z NSIS i InnoSetup instalatorów (A pewien problem przy 1GB + instalacyjne są kopiowane% windir% \ temp a następnie skanowane consent.exe)

Narzędzie do śledzenia błędów NSIS ma na ten temat numer entry. Kiedy badałem to, kontaktowałem się z kimś @ MS i mieli skontaktować się z kimś, kto pracował nad UAC, ale nic z tego nie wyszło. Jedyne istotne informacje mam od tej rozmowy był ten cytat:

Jeden przyjaciel w Windows miał mgliste wspomnienie, że może to były łagodzenie do troski o pliku modyfikacją podczas okno zaufanie był ewidentnie wyświetlane

Powiązane problemy