2009-11-27 9 views
5

Ich habe eine App (32 Bit C++) unter XP ausgeführt, die ich anpassen muss, um unter Windows 7 und Vista zu laufen. Es muss einige Dutzend Datenbytes irgendwo unabhängig vom Benutzer speichern. Unter XP habe ich die Daten in der Registry unter HKEY_LOCAL_MACHINE \ Software gespeichert. Wenn ich die App unter Windows 7 ausführe, werden die Registrierungseinträge virtualisiert und jeder Benutzer erhält eine separate Kopie der Daten.Windows 7 - Wo und wie kann ich benutzerunabhängige Daten speichern?

Die nicht virtualisierte Registry scheint ein logischer Ort für die Daten zu sein, aber ich habe keine Ahnung, wie ich vorgehen soll. Ich stelle fest, dass es eine Vielzahl von Anwendungen gibt, die Daten dort speichern; Wie gehen sie damit um?

Ich bin auch bereit, die Daten wo sonst zu speichern, gibt es einige gut bekannte globale Repository dafür? Eine einzige kleine Datei ist alles was ich brauche.

Ich bin mehr oder weniger ignorant der gesamten Rechte/Privilegien Geschäft, so dass alle Hinweise, Hinweise usw. sehr geschätzt.

+0

Können Sie weitere Informationen zu diesen Daten bereitstellen? Wird es während der Installation einmal geschrieben und ändert sich danach nie? Kann es sich jederzeit ändern, wenn Ihre Anwendung ausgeführt wird? – reuben

+0

@Reuben: Es wird derzeit zunächst bei der ersten Ausführung erstellt und sehr selten wahrscheinlich nur wenige Male aktualisiert. Es könnte bei der Installation initialisiert werden, müsste aber später aktualisiert werden. –

+0

Warum muss es unabhängig vom Benutzer sein? Warum wäre jeder Benutzer mit einer eigenen Kopie schlecht? –

Antwort

2

Eines der Entwurfsziele von Windows 7 besteht darin, Benutzerdaten und Anwendungen zu isolieren. Dies dient der Verbesserung von Datenschutz, Sicherheit und Anpassung. Tatsächlich können Standardbenutzer in Win 7 die Daten anderer Benutzer nicht ändern.

Die Standardorte zum Speichern von Anwendungsdaten werden von der System.Environment.SpecialFolder-Enumeration zurückgegeben. Beachten Sie, dass nicht alle Ordner für alle Benutzer lesbar oder schreibbar sind. Zum Beispiel ist CommonApplicationData für alle Benutzer lesbar, aber nur für Benutzer mit einer entsprechenden Richtlinie wie Admins schreibbar.

Wenn Sie unbedingt Daten benötigen, die von Benutzern gemeinsam genutzt werden, muss ein Administrator oder ein Benutzer mit Berechtigung diese an einem freigegebenen Speicherort installieren. Wenn Benutzer diese Daten aktualisieren müssen, sollten sie sie an einen Speicherort kopieren, an den sie schreiben können, z. B. ApplicationData, und ihre eigenen privaten Kopien aktualisieren. Diese private Kopie kann nicht von anderen Benutzern geändert werden. Sie sollten keine Daten auf freigegebenen Standorten installieren, es sei denn, Ihre Anwendung funktioniert nicht.

In Win7 sollten Sie alle Anwendungen und Daten in den Anwendungs- und Datenordnern des angemeldeten Benutzers und nicht in freigegebenen Speicherorten installieren. Wenn mehrere Benutzer die Anwendung installieren, erhält jeder Benutzer eine eigene Kopie der Anwendung und der Daten. Das ist fast immer was du willst. Wenn mehrere Benutzer eine Anwendung oder ein Spiel ausführen, möchten Sie nicht, dass ein Benutzer alle anderen ändert. Wenn mehrere Benutzer die gleiche Änderung wirklich benötigen, sollten sie ihre private Kopie bei Bedarf aktualisieren. Wenn das Konto eines Benutzers gehackt wird oder bösartig wird, möchten Sie nicht, dass es die Anwendungen und Daten aller anderen Benutzer zerstört.

Beachten Sie auch, dass sich Benutzer in Win7 remote an einem Computer anmelden können. Daher ist es keine gute Idee, maschinenspezifische Daten wie Bildschirmauflösungen oder IP-Adressen vom Benutzer zu speichern. Überprüfen Sie dies stattdessen jedes Mal, wenn Ihre App ausgeführt wird.

+1

Der empfohlene Ansatz im Vista-Zertifizierungsleitfaden für den Fall, dass Sie schreibbare gemeinsame Daten benötigen, ist, dass das Installationsprogramm der Anwendung einen Ordner unter CommonApplicationData erstellt und seine Berechtigungen entsprechend festlegt (d. H. Schreibbar für die Welt). –

+0

... was bedeutet, dass es kein Verbot für gemeinsame schreibbare Daten oder ähnliches gibt. Es ist bewusst nicht trivial zu tun, aber es ist nicht unmöglich, und es gibt gültige Anwendungsfälle. –

+0

Guter Kommentar Pavel; es ist nicht unmöglich, aber ich stehe zu dem Vorschlag, dass Sie das nicht tun sollten. –

0

IMHO, es ist unvernünftig zu denken, dass viele Leute gehen haben individuelle Benutzer ihre eigenen Kopien eines Softwarepakets zu installieren. Tatsächlich werden viele Pakete erst installiert, wenn sie unter ADMIN (ALLUSERS = 1) ausgeführt werden. Wenn angemessene Mittel zur Erleichterung der systemweiten Installation auf einer geringeren Schutzebene als ADMIN nicht zur Verfügung stehen, bleiben ADMIN-Level-Installationen die Norm.

Zum Beispiel warum konnte nicht einige Nicht-ADMIN-Benutzer (mit Zwischenberechtigungen) Registrierungsschlüssel in einem eingeschränkten Teil der Registrierung (HKLM \ SOFTWARE \ package) und Verzeichnisse in ALLEN BENUTZERN \ ANWENDUNGSDATEN erstellen \Paket?

Ich habe beschlossen, eine ADMIN-Datei (ALLUSERS = 1) .msi zu erstellen und Registrierungsschlüssel mit geändertem Schutz zu erstellen.

0

Also, in einer Situation, wo mein Kunde eine dedizierte Workstation hat, unsere Anwendung (die Daten aus einer guten alten INI-Datei, die wir r + w zu erhalten) unsere Nachricht an ihre IT-Mitarbeiter ist, dass sie müssen Installieren Sie es auf demselben Computer für jeden Benutzer, den sie haben?

Wir müssen lesen/schreiben, um (unter Windows 7/Vista): Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) + @ "\ GoScan \ GoScan.ini"

aber wie andere haben herausgefunden, Die Berechtigungen für einen typischen Benutzer reichen nicht für r + w. Ist es eine "akzeptable" Vorgehensweise, die Verzeichnis-/Dateiberechtigungen nach Abschluss des Installationsprogramms oder während der Installation zu ändern (nicht sicher, wo dies in VS 2008 Setup-Projekt zu tun ist)?

-Paul

Verwandte Themen