2017-09-01 2 views
3

Ich habe ein Programm, das Registrierungsdateien liest und schreibt, um sich an die Fensterposition usw. zu erinnern. Dies ist sehr einfach, wenn es nur um den Administrator geht, aber nicht so sehr, wenn Sie nur ein Benutzer sind das System.Registrierungswerte für jeden einzelnen Benutzer

Ich benutze erweiterte Installer, wenn Sie irgendwelche coolen Vorschläge zu diesem Zweck haben.

  1. Wo sollten die Registrierungsparameter für jeden Benutzer gespeichert werden, um meine Anwendung mit ihren eigenen Registrierungswerten zu verwenden?
  2. Ist dieser Pfad allgemein genug, damit das Programm diesen Ordner finden kann, ohne dass Probleme auftreten?

Edits/Updates:

Frage 1: Wo bist du Dinge, wenn nicht in HKEY_CURRENT_USER setzen?

Antwort: Wenn ich die Dateien unter HKEY_CURRENT_USER legte, würde es nur unter diesem Benutzer platzieren. Wenn ich also das Programm als Administrator installieren würde, hätte nur dieser Benutzer die Dateien. Da ich das erweiterte Installationsprogramm verwende, bin ich mir nicht sicher, ob das unter einigen Einstellungswerten liegt.

Statement 1 von Bogdan Mitrache: Wenn Sie möchten, können Sie auch die Selbstheilungsunterstützung von Windows Installer (unterstützt von Advanced Installer) nutzen, damit das Installationsprogramm die Standardeinstellungen unter HKCU für jeden Benutzer der App schreibt. auch wenn sie vom Administrator installiert wurden. Hier ist ein Beispiel mit Dateien, aber es gilt auch für die Registrierung: advancedinstaller.com/user-guide/qa-self-healing.html

Antwort: Dies ist eine gute Lösung, außer für das Problem, dass ich eine bedingte Installation habe . Der Benutzer kann auswählen, ob das eine oder das andere Feature installiert werden soll, wenn beide diese Registrierungswerte verwenden. Dies ist wahrscheinlich, warum es für mich nicht funktioniert. Ich werde über das Duplizieren der Dateien in einem logischen Sinn in AI nachsehen.

+1

Wo setzen Sie Dinge, wenn nicht in HKEY_CURRENT_USER? – molbdnilo

+0

vielleicht sollten Sie HKCU anstelle von HKLM verwenden – Federico

+0

Wenn ich die Dateien unter HKEY_CURRENT_USER legte, würde es nur unter diesem Benutzer platzieren. Wenn ich also das Programm als Administrator installieren würde, hätte nur dieser Benutzer die Dateien. Da ich das erweiterte Installationsprogramm verwende, bin ich mir nicht sicher, ob das unter einigen Einstellungswerten liegt. – 413X

Antwort

1

Der richtige Weg, dies zu handhaben ist Standardwerte zu speichern (wie beispielsweise während der Installation) in HKEY_LOCAL_MACHINE (wenn überhaupt), und dann später speichern benutzerspezifischen Werte in HKEY_CURRENT_USER.

Wenn die App einen Wert lesen muss, überprüfen Sie zunächst HKEY_CURRENT_USER, und wenn nicht gefunden, dann überprüfen Sie HKEY_LOCAL_MACHINE (oder verwenden Sie eine fest codierte Standard).

Wenn die App einen Wert speichern muss, speichern Sie sie nur unter HKEY_CURRENT_USER.

Und ja, das bedeutet, dass, wenn Ihre App von einem Admin ausgeführt wird, standardmäßig der Wert aus dem Admin-Schlüssel gelesen wird und der Wert im Admin-Schlüssel gespeichert wird. Und das ist völlig in Ordnung, weil der Administrator der Benutzer der App zu dieser Zeit ist. Wenn die App von einem Nicht-Administrator ausgeführt wird, sind die Werte stattdessen relativ zu diesem Benutzer. In einer Situation, in der die App als Administrator ausgeführt wird, aber einen Wert im Schlüssel HKEY_CURRENT_USER eines anderen Benutzers lesen/speichern muss (z. B. wenn ein Benutzer ohne Administratorrechte bei Windows angemeldet ist und die App mit der Benutzerkontensteuerung ausgeführt wird) Erhebung eines anderen Benutzers Login) verwendet wird, dann kann die App öffnen Sie die HKEY_CURRENT_USER Schlüssel des anderen Benutzers entweder durch:

  • den anderen Benutzer Identitätswechsel und dann RegOpenCurrentUser() verwenden.

  • laden Sie das Profil des anderen Benutzers mit LoadUserProfile(), die (unter anderem) einen Punkt an den Schlüssel HKEY_CURRENT_KEY des geladenen Benutzers zurückgibt.

Wenn Sie eines anderen Benutzers HKEY_CLASSES_ROOT Schlüssel statt HKEY_CURRENT_USER zugreifen möchten, können Sie RegOpenUserClassesRoot() verwenden.

Verwandte Themen