Diskuze: Práva do program files
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Neregistrovaný
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Windows jsou multiuživatelský systém (tím myslím ty nové od XP výše)
a platí v nich přístupová práva. Funguje to tak, že uživatel smí měnit
jen data ve své složce a nesmí zapisovat do obecných složek jako např.
program files, protože ty jsou brány jako data všech uživatelů, resp.
administrátora.
Nic obejít nejde a je to tak dobře, že to nejde. Svůj program máš špatně
napsaný a musíš ho upravit tak, aby si vytvořil složku se svým názvem v
%appdata% (tedy například %appdata%jmeno_mého_programusoubor.txt), to je
složka konkrétního uživatele určená pro data jeho programů a tam máš
pak volnou ruku cokoli ukládat.
Ono by tam na Vista/7 měla být nějaká virtualizace souborového systému, která za určitých podmínek zajistí (myslím ale, že jen u programů, které nic o Vista neví, tzn. byly kompilovány ještě předtím, než překladače znaly Vistu) přesměrování zápisů a čtení z Program Files někam do uživatelského profilu.
Podobná virtualizace funguje i v registru.
Jinak má sdraco samozřejmě pravdu. Program Files jsou určené pro ukládání souborů programů, nikoliv jejich dat či natavení. Na to máš dočasné složky a registry.
Samozřejmě se to dá všechno obejít tím, že při instalaci nastavíš na svůj adresář zápisová práva pro všechny, ale to je hodně nebezpečné. Dovolíš tím neautorizovanému kódu provádět některé útoky jako je DLL Hjacking a obejdeš bezpečnostní mechanismus, který je speciálně nasazen od Vista (možná až od 7) proti jedné z metod detekce stisku kláves (key logging).
Jinak i XPčka jsou víceuživatelský systém . Ale nemají tam proto moc podpůrných mechanismů (UAC, virtualizace). Je to poslední verze Windows, ve které tyhle technologie nedělají programátorům potíže.
Měl jsem na mysli XP a další To je myslím první systém, kde byla ta složka appdata, i když s Windows 2000 si nejsem jistý.
Budu mluvit jen o Vista/Seven.
Svůj program máš špatně napsaný a musíš ho upravit tak, aby si vytvořil složku se svým názvem v %appdata% (tedy například %appdata%jmeno_mého_programusoubor.txt), to je složka konkrétního uživatele určená pro data jeho programů a tam máš pak volnou ruku cokoli ukládat.
v podstatě ano, ale tohle neřeší způsob přístupu k datům sdíleným několika uživateli, v takovém případě je vhodné využít adresář ProgramData (proměnná systému %programdata%)
Ono by tam na Vista/7 měla být nějaká virtualizace souborového systému,
která za určitých podmínek zajistí (myslím ale, že jen u programů,
které nic o Vista neví, tzn. byly kompilovány ještě předtím, než
překladače znaly Vistu) přesměrování zápisů a čtení z Program Files
někam do uživatelského profilu.
>>na virtualizaci bych nespoléhal, jedná se o mechanismus, který je
určený k zachování funkčnosti aplikací nevyvíjených pro vista. tzn.
aplikací, které nemají manifest, nebo jeho obdobu, který říká, že jsou
vista kompatibilní. Virtualizace probíhá při vyžádání akce, která není
povolena právy (typický zápis do HKLM klíče registru, nebo právě zápis
do ProgramFiles). v případě filesystému probíhá transparentní
přesměrovnání do %AppData%\..\Local\VirtualStore v případě registru
do HKU\(SID)_classes\VirtualStore. podmínkou virtualizace je samozřejmně
aktivní UAC.
K lepšímu pochopení jak se takovýmto problémům vyhnout ještě určitě stojí za studium jednotlivé runlevely programů, jejich oprávnění pro systém a vzájemnou interakci. Mechanismus UAC. Windows Side by Side (WinSXS), manifesty jednotlivých knihoven a pořadí v jakém se DLL načítají.
Zobrazeno 6 zpráv z 6.