2008-12-16 11 views
5

Mam aplikację napisaną w Delphi 7, która nie wymaga uprawnień administratora do uruchomienia.Dlaczego moja aplikacja pozwala na zapisywanie plików w folderach Windows i System32 w systemie Vista?

Z jakiegoś powodu mogę zapisywać pliki w c: \ windows i c: \ windows \ system32 z poziomu aplikacji, nawet jeśli aplikacja nie zażądała podniesienia UAC. Zalogowałem się jako administrator z UAC włączonym i nie zmieniłem żadnego z domyślnych ustawień UAC. Pliki wyświetlają się również w Eksploratorze Windows. Nie używam opcji "Uruchom jako administrator".

Jeśli spróbuję zrobić to samo za pomocą programu WordPad w tym samym profilu, otrzymam błąd zgodnie z oczekiwaniami.

Jakieś pomysły, co się dzieje?

Aplikacja używa pamięci strukturalnej Ole do zapisywania i zawiera następujące manifesty, jeśli to pomaga.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32" name="DelphiApplication" version="1.0.0.0" processorArchitecture="*"/> 
<dependency> 
<dependentAssembly> 
    <assemblyIdentity 
    type="win32" 
    name="Microsoft.Windows.Common-Controls" 
    version="6.0.0.0" 
    publicKeyToken="6595b64144ccf1df" 
    language="*" 
    processorArchitecture="*"/> 
</dependentAssembly> 
</dependency> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
      <security> 
        <requestedPrivileges> 
          <requestedExecutionLevel 
            level="asInvoker" 
            uiAccess="false"/> 
        </requestedPrivileges> 
      </security> 
    </trustInfo> 
</assembly> 

Edytuj: Aby było jasne, moja aplikacja domyślnie nie zapisuje niczego w tych lokalizacjach. Wybieram te lokalizacje za pomocą standardowego okna zapisywania plików.

Aktualizacja

Znalazłem się, dlaczego moja aplikacja była traktowana jako dziedzictwo mimo włączając powyższą manifestu. Okazuje się, że włączono również drugi manifest, który nie ma sekcji "informacje poufne". Usunąłem ten drugi manifest i wszystko jest już dobrze.

Dzięki za wszelką pomoc

Odpowiedz

16

Jest to funkcja UAC, aby stare aplikacje były kompatybilne z Vistą. Przekierowuje każde żądanie zapisu do folderu systemowego, w którym użytkownik nie ma uprawnień do folderu lokalnego.

Są one przechowywane w folderze "AppData \ Local \ VirtualStore" pod bieżącym profilem użytkownika. Istnieje ustawienie zasad grupy, aby wyłączyć tę funkcję: "Wirtualizuj błędy zapisu pliku i rejestru w lokalizacjach dla poszczególnych użytkowników"

Ta funkcja wirtualizacji plików i rejestru została zaprojektowana, aby umożliwić starszym aplikacjom uruchamianie standardowych kont użytkowników systemu Windows Vista. Starsza aplikacja jest definiowana jako 32-bitowy plik wykonywalny bez określonego manifestu Vista. Jeśli usługodawca Vista manifestować ozdobić swoją aplikację jako Vista kompatybilne, to ustawienie nie ma wpływu wirtualizacji aplikacji (jak w przykładzie WordPad)

Mark Russinovich ma świetny artykuł na ten temat: Inside Windows Vista User Account Control

0

używam jako admin z UAC włączony.

Czy masz na myśli, że jesteś zalogowany jako Administrator lub masz na myśli uruchamianie aplikacji Delphi z opcją "Uruchom jako administrator" (to znaczy z podniesionym tokenem)?

Jeśli ta ostatnia ma miejsce, ponieważ twoja aplikacja będzie miała uprawnienia do zapisu do C: \ Windows.

+0

Jestem zalogowany jako administrator. Nie użyłem opcji "Uruchom jako administrator". Zostanie zaktualizowane, aby wyjaśnić – Jamie

0

pliki znajdą się w wirtualnej lokalizacji pod twoim katalogiem użytkownika, chyba że masz wyłączone UAC.

Powiązane problemy