Přístup k souborům app (ve W7)   zodpovězená otázka

C#

Dobrý den,

rád bych se poradil v čem je problém, nebo respektive jak nejlépe toto řešit. Pro konfigurační soubory aplikace používám adresář vytvořený pomocí Environment.SpecialFolder.CommonApplicationData a v případě W7 a přihlášení jako User se nedaří přístup k těmto souborům.

Přitom se jedná o adresář pro All Users.

předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je v tom, že nepoužíváte standardní konfigurační systém .NET aplikací který funguje spolehlivě na všech systémech a není potřeba vyvíjet vlastní řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je sice pravda a možná to není to nejlepší řešení, nicméně bych potřeboval stávající soubory zpřístupnit aplikaci.

Ono totiž potřebuji ukládat nejenom konfiguraci aplikace, ale i jiná zadávaná data aplikace a nechtěl jsem tato data dávat do složky dat uživatele (v Dokumetech).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To znamená, že neznáte konfigurační systém .NET Frameworku (který je mimochodem plně přizpůsobitelný a lze si napsat vlastní providery konfiguračních dat) a nevíte, že konfigurační data lze uchovávat jak pro jednotlivé uživatele (složka uživatele) tak pro všechny uživatele (složka pro všechny uživatele).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za vaše odpovědi, nicméně otázkou zůstává, jak vyřešit stávající stav a ne jak to nejlépe řešit celé znovu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě bych si dovolil vás citovat:

...Do souborů vytvořených ve složce CommonApplicationData mají plný přístup všichni uživatelé, takže v tom není problém.

viz: http://vbnet.cz/forum-tema--3181-um_237_...

a dále

... Do Program Files nikdy neukládejte data, která mohou být změněna uživatelem, nebo programem samotným. K tomu slouží následující složky (konstanty pro GetFolderPath):

ApplicationData: Úložiště pro data aplikace v cestovním profilu uživatele.

CommonApplicationData: Úložiště pro data aplikace společné pro všechny uživatele.

LocalApplicationData: Úložiště pro data aplikace v místním profilu uživatele.

viz.http://vbnet.cz/forum-tema--3163-um_237_...

Tudíž bych se zeptal v čem je tedy problém, použít pro nějaký soubor se kterým pracuje aplikace (ukládá, čte) CommonApplicationData ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém není ve složce pro ukládání dat, ale ve vlastním řešení konfigurace, které je zcela zbytečné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tomto konkrétním případě se jedná o soubor kam jsou ukládána určitá data (ne konfigurace app.) a tento soubor má být (již existuje):

1. být samostatným souborem

2. být případně přenositelný

Jedná se data aplikace a ne uživatele a proto to zvolení umístění (ne v Dokumentech).

Potřebuji nějaké rychlé řešení na odstranění problému. Mohl bych soubor přesunout do složky Dokumenty, ale z logiky obsahu dat se mi zdá původní umístění správnější, takže bych se rád dopátral proč vlastně počítač nedovolí přístup k tomuto souboru když se nachází se složce Data aplikací (pro všechny uživ.) a i toto umístění bylo viz výše doporučováno.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K jaké vyjímce přesně dochází?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

System.UnauthorizedAccessException: Access to the path ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě sem vložte přesně ten kód který provádí to ukládání dat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

zde:

public static void SaveTxtFile(String strFileName, String strDoc)
        {
            try
            {
                using (StreamWriter sw = new StreamWriter(strFileName, false))
                {
                    sw.Write(strDoc);
                    sw.Close();
                }
            }
            catch (IOException)
            {
               
            }
        } 

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak ještě co se přesně předává do strFileName. Mimochodem pokud používáte Using u objektů Stream, není nutné volat Close.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je tam sestavená cesta pomocí Environment.SpecialFolder.CommonApplicationData, která v tomto konkrétním případě (na W7) je :

C:/ProgramData/NazevAplikace/App Data/JmenoSouboru.moje

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte vypnuté UAC? Je uživatel pod kterým běží Visual Studio v Administrators?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Visual Studio (na mém počítači) běží na WinXP a aplikace kde je daný problém běží na zmíněném W7.

Problém je údajně jak při přihlášení jako user tak i jako administrátor (u uživatele na W7). Každopádně chybové hlášení (viz popis chyby výše) pochází z počítače uživ. s W7.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže vypnutí UAC pomohlo, nicméně by mě stále zajímalo jestli to jde nějak ošetřit, umožnit přístup k souborům i přes zapnuté UAC.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém bude v tom, že ten humus prostě odepře přístup do některých složek pokud proces běží v omezeném režimu (některé složky a větve registru se virtualizují, některé zřejmě ne).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback