2009-03-28 8 views
3

OK, wahr Geständnis zuerst: Vielleicht ist es nur ich, aber manchmal "Best Practices für Programmeinstellungen" auf Windows-Maschinen fühlt sich wie es mehr als Microsoft geändert Datenzugriffsstrategien. Ich laufe immer noch XP, und irgendwo auf dem Weg nur irgendwie "verglaste" darüber, wo MS wollte, dass ich alle Daten meiner App, etc. Ich kontrollierte alle Maschinen, die ich für codiert, so dass es wirklich keine Rolle spielte.Universal-Ansatz zum Speichern von INI-Typ Einstellungen und/oder DB-Dateien auf verschiedenen Windows-Maschinen

Jetzt schreibe ich Apps für "in the wild", unterstützt Win98SE auf. Ich muss das alles noch einmal beachten. : - \

Aus Gründen, die hauptsächlich mit der einfachen Migration auf neue Computer zu tun haben, bin ich kein großer Fan der Verwendung der Registrierung für App-Einstellungen - ich bevorzuge INI-Dateien und habe einige ältere INI-Komponenten, die ich Verwenden Sie für die Aufgabe (in der Regel zu erhöhen). Ich bin offen für Vorschläge zu anderen Komponenten von Drittanbietern, wenn sie dies einfacher/weniger Aufwand machen.

Grundsätzlich muss ich App-Einstellungen (wie das Erinnern von Optionseinstellungen usw.) speichern.

Ich habe gelesen: Registry vs. INI file for storing user configurable application settings
Where to store program settings instead of HKEY_LOCAL_MACHINE?
Where should my win32 program keep its files?
Best place to store configuration files and log files on Windows for my program?

... so zumindest bin ich nicht allein in dieser Frage ...;)
(w/Entschuldigung für was ist eine Frage der Wiederholung, wenn auch aus einem etwas anderen Blickwinkel).

es sich anhört, wie ich gerade% APPDATA%/MyProgram verwenden können, und speichern Sie alle Daten vorhanden, ABER ist diese allgemein gültig für alle Windows-Varianten von Win98 auf bis? Wenn nicht, was ist der beste Ansatz, und wann ist dieser Ansatz entstanden?

Was ich wirklich suche, ehrlich gesagt, ist der einfachste Weg, um dieses Problem verschwinden zu lassen - ich will nur eine (wenn möglich), einfache, einfache, zuverlässige Möglichkeit, "Mein Programm Data Folder" in alle und alle Instanzen. Wird das oben das erreichen?

Antwort

5

Wechseln Sie zu Making Delphi programs Vista-Ready und scrollen Sie nach unten für: "Wo speichern Sie Ihre Anwendungsdaten?"

Funktion GetRoamingUserAppDataPath: string; // solange Menschen arbeitet mindestens IE 4. (und Win95 oder besser)

+0

Ich hatte diesen Artikel in meiner Recherche gesehen, wusste aber nicht, wie "universal" diese Lösung war. Ihre "IE 4" Klärung ist hier sehr hilfreich. Vielen Dank! – Jamo

0

Ich kann nicht sagen, ob es auf allen Versionen funktioniert, aber ich stimme sicherlich zu, dass .ini-Dateien die richtige Antwort sind. Als XP sagte, die Registrierung zu benutzen, habe ich es versucht - für ein Programm. Die interne Bereitstellung zeigte, dass die Einstellungen von Maschine zu Maschine kopiert werden mussten - die nächste Aktualisierung erfolgte zurück auf INI-Dateien.

Ich denke, das ganze Registrierungsbit war eine Anti-Piraterie-Maßnahme von ihnen, die sie als Best Practice verstecken wollten.

+0

Registrierungseinstellungen können mit den Dienstprogrammen reg/regedit problemlos in eine Textdatei exportiert, kommentiert und kopiert werden. Ein weiterer Vorteil (abgesehen von Hierarchie, Backup, Sicherheit, Datentypen oder ACID auf NT6) ist, dass Sie nur Unterschiede in einen Basiszustand übertragen können. Das ist bei Textdateien nicht möglich. –

+0

Sicher, wenn alles ordentlich in einem Zweig wäre. Microsoft Zeug ist nie. Gehen Sie zu einer bestehenden Installation einer App und Sie können nicht hoffen, dass Sie all die Dinge finden, die Sie kopieren müssen. –

+0

Ich liebte die Registrierung, aber es wurde einfach zu viel Mühe und ich würde zurück zu Ini-Dateien für alles andere als eine wichtige Anwendung. Ich denke, sie haben es erstellt, um über die 32k-Grenze von Ini-Dateien zu gewinnen. 95/98 –

3

% APPDATA% scheint auf Win95 nicht vorhanden zu sein. Ich würde SHGetSpecialFolderPath verwenden, die auf Win98 oder Win95 mit IE4 verfügbar ist.

0

Ich neige dazu, XML-Dateien in% APPDATA% zu verwenden, um meine Einstellungen zu halten. Nur weil xml einfacher ist als ini für C#. Trotzdem scheint% APPDATA% eine sichere Wette zu sein.

Ich kann nicht darauf hinweisen, ob 98SE dies unterstützt.

2

Die Antworten, die Sie bisher bekommen haben, sind gut, ich denke jedoch, dass Sie Dinge in Ihrer Frage mischen, die nicht zusammen gehören, also ist es nicht möglich, Ihre Frage vollständig zu beantworten.

Ihre Frage Titel besagt

INI-Typ-Einstellungen und/oder DB-Dateien

und diese können zwei ganz verschiedene Dinge sein. Sie müssen zwischen Dateien unterscheiden, die benutzerspezifisch sind, Dateien, die allen Benutzern gemeinsam sind, aber schreibgeschützt sind, und allgemeinen Dateien, mit denen jeder Benutzer arbeiten kann.

Die erste Kategorie ist einfach, ein geeignetes Verzeichnis unter einem der PERSONALCSIDL _ APPDATA oder CSIDL _ Ordner verwenden.

Die zweite Kategorie ist auch einfach, Dateien müssen nur an der richtigen Stelle vom Setup-Programm installiert werden, das mit den richtigen Berechtigungen ausgeführt werden muss, weil Standardbenutzer (begrenzt) nicht in der Lage sein werden, an die richtigen Speicherorte zu schreiben .

Die letzte Kategorie ist jedoch schwierig, da es einfach kein Verzeichnis in allen Windows-Installationen gibt, von dem angenommen werden kann, dass es für alle Benutzer schreibbar ist. Insbesondere in Geschäftseinstellungen mit gesperrten Benutzerkonten kann es sein, dass der Benutzer überhaupt keine Schreibrechte für den lokalen Datenträger hat, sondern nur für sein Benutzerverzeichnis irgendwo auf einem Server im Netzwerk. Es gibt also keinen einzigen einfachen Weg, den Speicherort für Ihr Programm zu finden und sicher zu gehen, dass es funktioniert - das ist etwas, das Sie möglicherweise für alle Programme und alle Anwendungsfälle erneut aufsuchen müssen.

Für Bonuspunkte sollten Sie auch immer überlegen, ob die Dateien in das Roaming-Profil aufgenommen werden sollen und auf allen Rechnern einer Domäne verfügbar sein sollen, oder ob sie maschinenspezifisch sind.

Ein Tipp, den ich geben würde, ist weg von Desktop-Stil-Datenbank-Dateien wie Paradox oder Access-Dateien für Anwendungen, die Daten zwischen Benutzern auf einer Maschine freigeben müssen. Nur mit realen (lokalen) Datenbankservern können Sie Daten für mehrere Benutzer auf gesperrten Konten/Maschinen haben.

Verwandte Themen