Kliens beállítások gyik

Annak ellenére, hogy az új funkció átlátszó ahhoz, hogy használni, gyakran kapnak kérdések felhasználók számára, hogy saját scripteket használja - miért <это> működik, és hogyan lehet <то> Úgy működik, egy kicsit másképp.

Azt vettem észre, hogy van két fajta beállítások - az alkalmazás beállításait (Application távcsöves) és a felhasználói preferenciák (Felhasználó hatókörű). Sőt, az alkalmazás beállításait, úgy tűnik, hogy csak olvasható, és nem tudom megváltoztatni őket futás közben. Miért?

Két alapvető típusú opció által használt alkalmazások:

  1. Néhány adat, mint például az adatbázis-kapcsolat húrok vagy internetes hivatkozásokat, amelyek nem változnak gyakran, de mégis, rendelkezésre kell állnia a szerkesztéshez a rendszergazda, és ezért nem lehet „varrni” a kérelem kódot.
  2. Felhasználói beállítások és preferenciák, amelyek bármikor változhat.

Alkalmazás távcsöves beállítások felhasználásra szánt első forgatókönyv szerint, egy felhasználói távcsöves - a második. Ezek a megfontolások miatt is és a viselkedés SettingsProvider alapértelmezett - az alkalmazás konfigurációs fájlban tárolt app.exe.config mellett a futtatható fájlt, és a felhasználói beállítások - a user.config fájl a mappában a felhasználói adatokat. By app.exe.config fájlokat nem lehet írási futásidőben, például, ha az alkalmazás telepítve van ac: \ Program Files \. ahol csak a jogosult felhasználók férhetnek hozzá a felvételt. Még ha ez a hozzáférés - ez általában nem jó ötlet, hogy módosítsa a beállításokat, amelyek befolyásolják az összes többi felhasználó az alkalmazás.

Azt mondta, hogy user.config fájlok a mappát a felhasználó adatait. Hogyan találom ezt a fájlt? Ő 1-1 alkalmazás vagy több?

Mint már említettük, SettingsProvider alapértelmezett kliens alkalmazások (LocalFileSettingsProvider) menti meg az alkalmazás beállításait konfigurációs fájlokat. A .NET 1.0 és 1.1 volt két szintje konfigurációs fájlok - machine.config és app.exe.config (ahol „app.exe” - az alkalmazás fájl neve). A .NET 2.0, van hozzá még két szinten tárolni érvényes beállítások a felhasználó - a központi felhasználói profil mappát a mappa helyi felhasználói profil. XP lesz valami, mint a „c: \ Documents and Settings \\ Application Data 'és a' c: \ Documents and Settings \\ Local Settings \ Application Data”, ill. Ezek a könyvtárak - ajánlott (és a Windows embléma - szükséges) tárhely felhasználói adatok és a legtöbb alkalmazás (például az Outlook és a Visual Studio) tegye a felhasználó adatait.

A pontos elérési utat user.config lesz, mint ez:

  • - katalógus roaming vagy helyi felhasználói profil. Az alapértelmezett beállítások vannak tárolva user.config a helyi profilt. A beállítás tárolásához a roaming profile kell jelölni azt SettingsManageability SettingsManageabilityAttribute attribútum értékének Roaming.
  • - általában egy megadott karakterláncot AssemblyCompanyAttribute (esetleg rövidített és a meglévő néhány karaktert. Ha AssemblyCompanyAttribute soha nem használt, használt vonal másik tulajdonság.)
  • - általában egy megadott karakterláncot AssemblyProductAttribute (azonos jegyzetek a cég neve)
  • és - tájékoztatás a bizonyítékok (származás) az alkalmazási területen.
  • - Általában ez a változat meghatározott AssemblyVersionAttribute. Használt működésének különböző változatai a kérelem mellé.

Valójában a fájl neve mindig csak „user.config”.

Miért van ez a módja annak, hogy user.config zamorochenny?

Egy algoritmust építeni utakat kell biztosítani bizonyos szigorú követelményeket támasztanak a védelem, a szigetelés és a megbízhatóság. Bár már megpróbálta ezt az utat, amennyire csak lehetséges, könnyen érzékelhető felhasználásával barátságos meghatározott vonal által a kérelem nem volt lehetséges, hogy hagyja annyira elemi, ne álljon a konfliktus más alkalmazások, hamisítás, stb

Lehet-e valahogy változtatni?

LocalFileSettingsProvider nem ad módszert változtatni az elérési utat a konfigurációs fájlban. Kérjük, vegye figyelembe, hogy a tényleges szolgáltató, és nem határozza meg az utat, hogy a konfigurációs fájlban az első esetben - ez a konfiguráció a rendszer. Ha kell tárolni a beállításokat, bármilyen okból, egy másik helyen, az ajánlott módja az, hogy írjuk meg SettingsProvider. A nagyon könnyen megvalósítható, példákat találunk a .NET 2.0 SDK. Tartsuk azonban szem előtt, hogy lehet, hogy szembe a fent említett problémák az elszigeteltség.

Kinyitottam az app segítségével ClickOnce, és megmarad néhány beállítást, de nem találja a fájlt user.config.

algoritmus elkészítése az út felett nem használható abban az esetben, ClickOnce. Ehelyett user.config helyi fájlt a könyvtárban ClickOnce adatok (a rész is szerepel a path). Roaming user.config ha ClickOnce alkalmazás nem alkalmazható.

Ahogy én erősen típusos tulajdonságokat sorozatban a beállítás? Nem tudtam <вставьте ваш тип здесь> szerializált helyesen.

Sorozatprogramozásának beállítások ApplicationSettingsBase használni a két fő mechanizmus:

  1. Ha TypeConverter, ami elvégzi az átalakítás a húrok, és egy sor, akkor használják.
  2. Ellenkező esetben a XmlSerializer.

Általában működik egy ilyen mechanizmusok, de vannak típusok, melyek ezek a módszerek nem működnek. Ebben az esetben, akkor a következő lehetőségek közül:

  • Végrehajtja a típus TypeConverter, amelyek átalakítani a karakterlánc és egy string. A megvalósítás használhat bármilyen alkalmas mechanizmus szerializálásáról FW, vagy a maga módján. Ezután megadhatja ezt TypeConverter a tulajdonságait az osztály beállításokat.
  • Írja be a kívánt értéket a SettingsSerializeAs segítségével SettingsSerializeAsAttribute. Például, ha azt szeretnénk, hogy szerializálni a beállítás bináris formában adja SettingsSerializeAs.Binary.

Az alkalmazás egy pár egyéni (felhasználó távcsöves) beállításokat, de a Visual Studio lehetővé teszi számukra, app.config. Azt hittem, hogy meg kell user.config fájlt?

A konfigurációs rendszer hierarchikus, és a következő sorrendben: a gép (gép) -> (bejelentési) -> barangoló felhasználó (barangoló felhasználó) -> helyi felhasználó (helyi felhasználói). Ha kérjen konfiguráció részben bármely szinten, akkor kap egy egyesített nézet ebben a szakaszban az ilyen szintű és minden szint alatt (a szint gép - a legalacsonyabb, és a helyi felhasználó - a legmagasabb). Processzor szakasz határozza meg, milyen az egyesítés, és meghatározzák a prioritást, például konfiguráció helyi felhasználói config egy magasabb prioritású, mint a kérelem config.

Így a felhasználói beállítások, használt alapértelmezett, akkor lehet összetéveszteni az értékek app.config. Ha a beállítások mentésre kerülnek user.config, új értékek helyett a paramétereket az alapértelmezett. Megjegyezzük, hogy az alapértelmezett értékek is meghatározható DefaultSettingValueAttribute. A szolgáltató használja ezeket az értékeket, ha nincs más érték nincs megadva a konfigurációs szinten.

Miért van szükség a verziószámot a fájl elérési útját user.config? Mert ez a telepítés során az új verzió, a felhasználók elveszítik tárolt beállítások korábbi verziója az adott alkalmazásnak.

Számos oka van annak, hogy miért az utat user.config Sensitive készül a verziószám:

  1. Ahhoz, hogy telepíteni side-by-oldalán több verziója ugyanazt a kérelmet (például, ha használja ClickOnce). Különböző változatai alkalmazások használhatják különböző beállításokat.
  2. Amikor frissít az alkalmazás beállításait tartalmazó osztály lehet változtatni, és kompatibilis lesz a beállításokat korábban mentett, ami problémákhoz vezethet.

Ugyanakkor, már feltéve, hogy könnyen át a beállításokat egy korábbi verziója az adott alkalmazásnak. Csak hívja ApplicationSettingsBase.Upgrade () és a beállítások az előző változat, amelyek megfelelnek a jelenlegi változata az osztály beállítás mentésre kerül az aktuális verzió user.config. Ott van még a lehetőségét, hogy a túlterhelés e funkciót a tantermi beállításait, vagy a szolgáltató végrehajtását.

OK, akkor hogyan tudom meghatározni, hogy mikor hívja Cseréld ()?

Jó kérdés. A ClickOnce, ha telepítve van az új verzió az alkalmazás, ApplicationSettingsBase felismeri és automatikusan frissíti a beállításokat. Ha ClickOnce nincs használatban, akkor hívja a frissítés () magad. Ez az egyik lehetőség, mert lehetséges, hogy meghatározza, hogy mikor kell hívni Frissítés ():

Befelé beállítások CallUpgrade logikai és állítsa az alapértelmezett érték true. Amikor elindítja az alkalmazást tenni valamit, mint ez:

Egy ilyen kiviteli alak biztosítja, hogy a frissítés () függvény csak akkor, ha az első megkezdődik az új verzió.

Van egy módja annak, hogy hozzáférjen a beállításokat a konfigurációs fájl, ha nincs megfelelő osztályra beállításokat?

Ez egy nagyon erőteljes funkció. Ez egy biztonsági rést? Bárki hozzáférhet a beállításokat a tudtom nélkül vagy engedély!

Ez nem egy biztonsági rést két oka van:

  1. C védelme szempontjából, szigetelés van az alkalmazás szintű domain. Ajánlott a CLR módja az, hogy egy nem megbízható (megbízhatatlan) kód egy külön alkalmazási területen. Amikor létrehoz egy alkalmazási területen, akkor létrehozhatunk egy egyedi barátságos nevét, és adja az alkalmazás konfigurációs fájlt. Egyedi barátságos név biztosítja, hogy az alkalmazási területen kap egy külön felhasználói beállításokat tartalmazó fájl. Így, egy másik domain-kód nem lesz képes hozzáférni a beállításokat, mivel nincs hozzáférése a konfigurációs fájlt. Fordítva, minden kódot, amely hozzáférést biztosít a konfigurációs fájlok kérheti a beállítások nélkül is SettingsGroupNameAttribute. például bármilyen alacsony szintű API (bár ez megköveteli ConfigurationPermission olvasási feladatok, és egy kicsit nagyobb a rekord).
  2. Ha teljesen paranoiás, és nem akarja, hogy hozzáférést biztosítsanak a beállításokat, anélkül, hogy az osztály, még kód fut ugyanabban a tartományban, akkor titkosítja a beállításokat átvitel előtt az ISP és visszafejteni olvasása közben. Beállítások API nem ad erre a különleges módszerek, de akkor a Crypto API a .NET-keretrendszer. Configuration API is lehetővé teszi, hogy titkosítja konfigurációs profilok - lásd ezt a cikket több információt ..

Mindez azt jelenti, hogy nem tudok, ha a beállítás mód részleges bizalmát?

Egyáltalán nem. által végzett munka számunkra biztosítja, hogy nyugodtan beállítások elérése a módban a részleges bizalom. Tény, hogy úgy néz ki, valamint az olvasás és írás az alkalmazás. Az egyetlen különbség - nem írhat korlátlan mennyiségű adat, nyilvánvaló okokból. A bájtok számát tudja égetni a beállítások API (LocalFileSettingsProvider) a részleges bizalom korlátozott adminisztratív segítségével IsolatedStoragePermission osztályban. Ie sőt, valamint az elkülönített tárolás (elkülönített tárolási) általában.

Említette többször Configuration API. Mi ez és miben különbözik a beállítások API?

Van egy alapvető különbség a beállítások API and Configuration API. Az első, egy objektum modellt irányító alkalmazás beállításait. Ez a modell egy természetvédelmi program által nyújtott, hogy a tényleges megtakarítás meglehetősen elvont. Ha a beállítások tárolódnak, a kérdés a végrehajtási szolgáltató - képes tárolni őket nyers fájlokat, SQL Server, a registry, vagy okozhat egy távoli web-szolgáltatás. Szolgáltató által szállított alapértelmezett használatát config-fájl, mert ez a legkézenfekvőbb adattár kliens alkalmazások beállításait. Így, Configuration API - alacsonyabb szintű API, amely lehetővé teszi frissítés konfiguráció részben a konfigurációs fájlban. Bizonyos szempontból beállítások API ül a tetején a Configuration API.

Tehát, ha kell dolgozni az alkalmazás beállításait és a felhasználói preferenciák, meg kell beállítások API. Ha szükség van, hogy végre egy konfiguráció részben, vagy nézze meg a konfiguráció részben közvetlenül - a Configuration API-t.

Beállítások API csak a Windows Forms alkalmazások?

Tulajdonképpen beállítások API nincs korlátozás - akkor tudja használni mindenféle alkalmazások - klientstkih, web, VSTO (Visual Studio Tools for Office Developer), konzol, WPF (Windows Presentation Foundation), stb Az alapértelmezett szolgáltatót, LocalFileSettingsProvider. Ez használ config-fájl tárolja a beállításokat, amelyek bizonyos mértékben korlátozza. Például az ASP.NET alkalmazásokat nem user.config fájlokat, így nem lehet menteni az egyéni beállításokat ez a szolgáltató. Természetesen, akkor használhatja a Profiles ASP.NET 2.0 tárolja a felhasználói preferenciák. User.config fájlok nem támogatottak VSTO-alkalmazások (azaz ott, ahol a mag natív alkalmazás, például az Outlook, a Word vagy IE). Ebben az esetben meg kell írni a saját beállítások-szolgáltató (ami mellesleg elég egyszerű, és vannak jó példák és dokumentációt MSDN ebben a témában), hogy egy olvasó / író felhasználói beállításokat. A főbb típusai irányított kliens alkalmazások - konzol, Windows Forms és a WPF, LocalFileSettingsProvider teljes mértékben támogatott.