Avatar
Peter
Neregistrovaný
Avatar
Peter:

Ahoj, kluci. Rad bych Vas poprosil o radu. Kdyz jsem udelal program, pak jsem pro neho vytvoril v Inno Setup instalacni balicek. Tak ten program ma pracovat tak, ze udaje, ktere se v nem napisou, tak se ulozi do souboru, ktery je umisten ve slozce programu v Program Files. Ale kdyz program spustim jiz naistalovany, tak mi pocitac odepre pristup. Da se to nejak obejit? Aby to do te slozky mohl ulozit kdokoliv, kdo si program nainstaluje? Predem dekuji za odpoved :)

 
Odpovědět 28.2.2011 11:04
Avatar
sdraco
Tým ITnetwork
Avatar
Odpovídá na Peter
sdraco:

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_programusou­bor.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.

Nahoru Odpovědět 28.2.2011 13:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Peter
Neregistrovaný
Avatar
 
Nahoru Odpovědět 28.2.2011 21:43
Avatar
vrtulex
Redaktor
Avatar
Odpovídá na Peter
vrtulex:

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.

Nahoru Odpovědět 11.7.2011 12:29
2 + 2 = 5 for extremely large values of 2
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
David Čápka:

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ý.

Nahoru Odpovědět 1.8.2011 14:27
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
nohandle
Neregistrovaný
Avatar
nohandle:

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_programusou­bor.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%\..\Lo­cal\VirtualSto­re v případě registru do HKU\(SID)_clas­ses\VirtualSto­re. 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í.

 
Nahoru Odpovědět 27.2.2012 18:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.