Pisanie programu kompatybilnego z Vistą/7

0

Chciałem poruszyć pewną kwestię, gdyż w poniższym przypadku nie wiem jak się zachować... otóż:

System Vista, UAC włączone:
Mój program zwany dalej XYZ, jest instalowany z podwyższonymi uprawnieniami do "Program Files".
Podczas normalnej pracy z programem, XYZ zapisuje konfigurację w swojej lokalizacji czyli w "Program Files", ale tam już NIE MA dostępu, więc pozostaje mi zapis ustawień do "AppData".

No dobrze, a co jeśli chcę zmodyfikować już istniejący plik w "Program Files" ? Nie mogę bo nie mam dostępu... co mam zrobić, aby program XYZ poprawnie widział "swoją konfigurację" i jednocześnie nie był to folder "Program Files" ?
I jak zaktualizować automatycznie program XYZ, który jest zainstalowany w "Program Files" ?

0

Najpierw szukaj w AppData, potem w Program Files?

0

To mi nie rozwiązuje sprawy.

Pliki konfiguracyjne zapisują się podczas instalacji do "Program Files".

  1. Jeśli zmodyfikuje te pliki to będę musiał je zapisać do "AppData", a te z "Program Files" będę miał tylko do odczytu ? Bez sensu wtedy...

  2. Jeśli zapiszę wszystkie pliki do "AppData", to uruchamiając program na koncie drugiego użytkownika będzie problem bo dostęp do plików z konta pierwszego użytkownika nie jest możliwy.

  3. Jeśli zainstaluje pierwszy użytkownik program w całości do "AppData", to drugi użytkownik już nie będzie widział programu i będzie musiał instalować go od nowa...

Ogólnie to Vista/7 wprowadziła takie zamieszanie, że głowa mała... skąd zwykły programista ma to wszystko wiedzieć ? Cholera.

0

No ale tak jak Opi napisał, przez UAC nie ma dostępu do Program Files :-/

0

UAC umożliwia zainstalowanie programu w "Program Files". To podwyższone uprawnienia podczas instalacji udostępnione przez UAC po podaniu hasła.

Jednak później program sam z siebie już nic modyfikować w swoim folderze w "Program Files" nie może i stąd te problemy...

Uruchamianie programu wybierając z menu "Uruchom jako administrator" nie pomaga.

0

A czemu nie wrzucisz tego konfiga do AppData dla AllUsers (albo jakoś tak)

0
angel2953 napisał(a)

A czemu nie wrzucisz tego konfiga do AppData dla AllUsers (albo jakoś tak)

To jest rozwiązanie ;-) Dzięki... ale

pozostaje jeszcze kwestia aktualizacji programu.

Co zrobić, aby program, który pobiera sobie aktualizacje, mógł pliki podmieniać w "Program Files" (to nie jest instalator, a cała aktualizacja jest automatyczna) ?

0

Być może to jest rozwiązanie... uruchomić samemu program od razu "jako Administrator" tym sposobem:

procedure RunAsAdmin(hWnd: HWND; aFile, aParam: String);
var
 Sei: TShellExecuteInfoA;
begin
 FillChar(Sei, SizeOf(Sei), 0);
 Sei.cbSize := SizeOf(Sei);
 Sei.Wnd    := hWnd;
 Sei.fMask  := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
 Sei.lpVerb := 'runas';
 Sei.lpFile := pChar(aFile);
 Sei.lpParameters := pChar(aParam);
 Sei.nShow  := SW_SHOWNORMAL;
 if not ShellExecuteEx(@Sei) then RaiseLastOSError;
end;
0

Dodaj Manifesta dla Visty z zaznaczeniem, ze program do dzialania wymaga uprawnien admina. Nie bedzie dzialac?

Making Programs Vista-Ready dla Delphi. Tam jest wszystko praktycznie co bedzie Ci chyba potrzebne.

http://www.theabsolute.net/sware/delphivista.html#userinterface

0

Niestety nie bardzo... gdyż Manifest dla Visty nie jest zgodny z XP.

Natomiast mod Manifestu, który jest na 4p, powoduje że program nie pobiera stylu z Windows XP (i być może z Visty też - nie sprawdzałem).
Także odpada ten sposób... chyba że można generować manifest dla XP i Visty w zależności od systemu na jakim się uruchomi, ale czy Manifest może być jako plik "program.exe.manifest" ? Czy musi być w zasobach ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1