Jag har ett litet program som jag vill skall läsa in några få parametrar vid start. Jag skulle använt xml Ett enkelt sätt är att använda sig av en config fil. Denna placeras i samma mapp som exe filen och döps till dittexe.exe.config. Inställningarna hämtas med en statisk metod System.Configuration.ConfigurationSettings.GetSettings. Typomvandla returvärdet till ett IDictonary objekt. Exempel > <b>som jag vill skall läsa in några få parametrar vid start.</b> Det är en länk, ett användarnamn samt ett lösenord... Lösningen med IDictionary tycker jag verkar ganska simpel. Får söka lite på hur man smidigast sparar ner lösenordet i icke klartext också... :-D Gör en secure hash på lösenordet med ex. MD5 innan du sparar det i filen. Sen hashar du det inskrivna lösenordet och jämför med det sparade. > <b>Det är en länk, ett användarnamn samt ett lösenord</b> Med .NET så försöker MS få utvecklare att sluta spara applikations inställningar i registret. > <b>Med .NET så försöker MS få utvecklare att sluta spara applikations inställningar i registret.</b> Jag har inga direkta länkar, men all kursmaterial är genomsyrat med den rekomendationen. > <b>Jag har inga direkta länkar, men all kursmaterial är genomsyrat med den rekomendationen. </b> http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20040212securityml/manifest.xml Oj, det var en hel del information.Läsa inställningar
Vilket är det smidigaste/enklaste sättet att lösa detta på?
Register, xml, inifil?
/ JimmySv: Läsa inställningar
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=236
du kan ju direkt serialisera ett objekt och sedan läsa in det vid start och spara ut det när det har ändrats. Sv: Läsa inställningar
<code>
IDictionary d = (IDictionary) ConfigurationSettings.GetConfig("appinstallningar");
string inst1 = (string)d["varde1"];
string inst2 = (string)d["varde2"];
string inst3 = (string)d["varde3"];
</code>
configfilen....
<code>
<configuration>
<configSections>
<section name="appinstallningar"
type="System.Configuration.SingleTagSectionHandler" />
</configSections>
<appinstallningar varde1="tjippen" varde2="xxx" varde3="osv" />
</configuration>
</code>
//FreddeSv: Läsa inställningar
Vad för typ av parametrar är det? Vissa lämpar sig bäst i textfiler, typ ini eller XML och andra i registret.Sv: Läsa inställningar
Sv: Läsa inställningar
I övrigt rekommenderar jag att hålla så gott som alla inställningar i textformat (ex xml, eller property-filer) snarare än binära format. Anledningen är att textformat kan användas till så mycket mer och lättare kan flyttas mellan olika system eller anpassas när programmet och kraven ändras. Ett serialiserat objekt blir lätt gammalt.Sv: Läsa inställningar
Spontant och utan att veta mer om din applikation så känns registret som det självklara valet.
> <b>Lösningen med IDictionary tycker jag verkar ganska simpel.</b>
Ska inställingarna vara per användare eller per dator? Ska användaren själv kunna ändra informationen? Om inställingarna är per användare så betänk att en användare inte har annat än skriv och exekveringsrättigheter i C:\Program Files\. Om du då sparar exe-filen där och följer Freddes råd, <b>Denna placeras i samma mapp som exe filen och döps till dittexe.exe.config. </b> så kommer det inte att fungera (om användaren alltså ska kunna ändra parametrarna).
Om inställingarna är per dator har du två val att spara inställningarna (på ett engelskt OS).
* HKLM\Software\Appnamn
* C:\Program Files\Appnamn
Om inställingarna är per användare så har du två val att spara inställingarna.
* HKCU\Software\Appnamn
* C:\Document and Settings\%username%\Application Data\Appnamn
Om du vill att din applikation ska dra nytta av alla trevliga saker som Policies och Group Policies erbjuder i WinNT4, 2000, XP, 2003 så är valet registret och inte textfiler. Textfiler är generellt ett stort aber för oss sysadmins.
Märk väl, det är inte viktigt vad du som utvecklare tycker, utan de krav som sysadmin har för att drifta applikationen.Sv: Läsa inställningar
De vill att man skall gå mer mot configurations filer av något slag.
I mina applikationer skapar jag en settings klass som jag serializerar ner på disk. Om inställningarna skall vara per användare så kan du använda en isolated storage file stream att serializera med. Den sparas i användarens profil under Application Data\ApplikationsNamn\Version\Sv: Läsa inställningar
Jag har märkt i flera forum att de som skriver för .NET mer och mer pratar om att spara i olika konfigurationsfiler. Men, har Microsoft gått ut med sådana rekomendationer? Isåfall ser jag gärna en länk som beskriver det. Inte bara rekomendationen utan även hur Microsoft tänker sig att applikationerna ska kunna administreras. Ur administratörernas synpunkt så pratar Micrsoft hela tiden om AD/GPO. Och då är det registret som gäller. Jag kan varken ur mina teoretiska kunskaper från Microsoft eller genom min erfarenhet från två stora nät, 200.000+ och 18.000+ användare, så någon fördel med konfigurationsfiler jämfört med registret (vad gäller inställingar).
> <b>I mina applikationer skapar jag en settings klass som jag serializerar ner på disk. Om inställningarna skall vara per användare så kan du använda en isolated storage file stream att serializera med. Den sparas i användarens profil under Application Data\ApplikationsNamn\Version\</b>
På helt rätt ställe om man ska använda sig av konfigurationsfiler. Bra att möjligheten finns att lägga det direkt i profilen.
Måste också påpeka att det jag pratar om är alltså _inställningar_, antingen för applikationen eller användaren. _Data_ ska naturligtvis inte sparas i registret. Sv: Läsa inställningar
Du kan ju faktiskt även få ut config filer med GPO, lägg dem i ett MSI paket tex ...
Det är rekomendationen för att distribuera Code Access Security inställningar (vilket är XML filer) på ett stort nät till alla användare.Sv: Läsa inställningar
Synd. Jag får se om jag får tag i någon kursdokumentation att bläddra i. Någon annan kanske vet någon information? Någon från Micrsoft som läser tråden och vill göra ett inlägg?
> <b>Du kan ju faktiskt även få ut config filer med GPO, lägg dem i ett MSI paket tex ... </b>
Ur det hänseendet kan jag distribuera i princip vad jag vill med AD. men ingen vettig människa använder AD som mjukvarudistribution med mer än (på en höft) 50 användare. AD distribution av MSI-paket är trevligt men erbjuder i princip ingenting mer än distributionen. Ingen versionshantering, loggning osv. Det är därför de flesta använder någon form av komplementprodukt, SMS, Tivoli, CA, whatever.
> <b>Det är rekomendationen för att distribuera Code Access Security inställningar (vilket är XML filer) på ett stort nät till alla användare.</b>
Code Access Security inställningar vet jag inte vad det är. Men att det skulle vara rekomenderat att använda AD MSI distribution till stora nät med många användare tror jag helt enkelt inte på.
Ytterligare en sak som du gör via registerbaserade GPO är att styra användarna. Du kan trycka ut ett värde i registret som användaren är tvungen att läsa och använda, men som han inte kan ändra (HKCU|HKLM\Software\Policies\Appnamn). Hur gör du det med en textfil som ligger i användarens profil? Mig veterligen går det inte att skrivskydda valda delar av innehållet i en textfil. Du kan inte heller sätta ACLer på valda delar i en textfil.
Hitentills är det fortfarande registret som gäller för applikationsinställingar i mina ögon.Sv: Läsa inställningar
och
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesssecurity.asp
Kort kan man säga att det är ytterliggare ett säkerhetslager som tittar på applikationens identitet, i motsats till användarens identitet. Det är något som installeras med .NET framework och är således native på windows 2003.
Vad du väljer att tro på och inte tro på är upp till dig, jag förmedlar bara samma sak här som de kurser jag håller.
För XML filer behöver du ex ingen versions hantering på samma sätt som för dller och applikationer. Det enda du behöver göra i ditt msi paket är att kopiera ut den nya xml filen ...Sv: Läsa inställningar
Mycket bra tråd att läsa dock. :-)
Alltid trevligt med lite olika synfallsvinklar på problemen.
Blir nog någon form av xmlfil eller registret, fast jag kommer nog att testa både och bara för att det är kul.
Tack för all "matnyttig" information.
/ Jimmy