Mam taki problem, że mój program "MojProgram" zapisuje pliki na dysku w katalogu gdzie jest zainstalowany, a więc standardowo C:\Program Files\MojProgram\
W XP nie było problemu, w Viście i 7 jest z tym problem.
Szukałem na forum i znalazłem, że program musi mieć prawa administratora, co moża osiągnąć plikiem manifest.
Ok, sprawdziłem, że jeśli uruchomię program z takimi prawami ("Uruchom jako administrator" z menu kontekstowego) to faktycznie jest ok i program fizycznie zapisuje pliki w tej lokalizacji, ale przecież wiadomo, że problem w tym, żeby program miał takie prawa od razu na stałe. No ale przynajmniej wiem, że to o to chodzi.
Na forum lub z odnośników podanych na forum znalazłem dwie treści pliku manifest, dla porządku podaję:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="MojProgram"
type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Niestety żaden z nich nie robi efektu praw administratora.
Oczywiście plik nazwałem tak jak program, czyli MojProgram.exe.manifest i jest w tym samym katalogu.
Próbowałem też różne wartości zmiennej requestedExecutionLevel (są trzy), ale nic to nie daje.
Co jest nie tak?
Odkryłem (mam Win Vista), że bez praw administratora program zapisuje i odczytuje pliki, ale nie tam gdzie pokazuje, czyli:
C:\ProgramFiles\MojProgram
tylko w:
C:\Users\MojaNazwaUzytkownika\AppData\Local\VirtualStore\Program Files\MojProgram
Jak go zmusić, żeby zapisywał tam, gdzie mu każę, czyli C:\ProgramFiles\MojProgram ?