Frage

Ich versuche, ein Setup-Projekt in zu verwalten Visual Studio 2003 (Ja, es ist eine Legacy-Anwendung).Das Problem, das wir im Moment haben, ist, dass wir Registrierungseinträge schreiben müssen HKCU für jeden Benutzer auf dem Computer.Sie müssen in der sein HKCU statt HKLM weil es sich um die Standardbenutzereinstellungen handelt und sie sich je nach Benutzer ändern.Mein Gefühl ist das

  1. Das ist nicht möglich
  2. Dies sollte nicht das Installationsprogramm tun, sondern die Anwendung (was passiert schließlich, wenn nach der Installation ein Benutzerprofil erstellt wird?).

Vor diesem Hintergrund möchte ich dennoch so wenig wie möglich an der Anwendung ändern, daher lautet meine Frage: Ist es möglich, Registrierungseinträge für jeden Benutzer in einem hinzuzufügen? Visual Studio 2003 Setup-Projekt?

Und im Moment listet das Projekt fünf Registrierungs-Root-Schlüssel auf (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, und Benutzer-/Maschinenstruktur).Ich weiß nicht wirklich etwas über den Root-Schlüssel des Benutzers und habe User/Machine Hive noch nicht gesehen.Kann mir jemand erklären, was sie sind?Vielleicht könnten sie mein obiges Problem lösen.

War es hilfreich?

Lösung

Erste:Ja, das gehört genau aus dem von Ihnen angegebenen Grund in den Antrag:Was passiert, nachdem neue Benutzerprofile erstellt wurden?Sicher, wenn Sie eine Domain verwenden, ist es möglich, dass bei der Erstellung einige Dinge in die Registrierung aufgenommen werden, aber das ist kein wirklicher Anwendungsfall.Die Anwendung sollte prüfen, ob Einstellungen vorhanden sind, und andernfalls die Standardeinstellungen verwenden.

Allerdings ist es möglich, die Schlüssel anderer Benutzer über den HKEY_USERS-Hive zu ändern.

Ich habe keine Erfahrung mit dem Visual Studio 2003-Setup-Projekt, deshalb hier ein bisschen (völlig unabhängiger) VBScript-Code, der Ihnen vielleicht eine Vorstellung davon gibt, wo Sie suchen müssen:

const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next

(Kodex mit freundlicher Genehmigung von Jeroen Ritmeijer)

Andere Tipps

Ich vermute, dass Sie sich auf einer Art gemeinsam genutztem Computer befinden, der wahrscheinlich unter einer Domäne ausgeführt wird, weil Sie es für alle Benutzer festlegen möchten.

HIER SIND DRACHEN

Nehmen wir an, Joe und Jane melden sich regelmäßig am Computer an, dann verfügen sie jeweils über „Registrierungen“.

Sie installieren dann Ihre App und der Installer wird riesige Hacks und eklige Dinge einsetzen, um Elemente für sie unter HKCU festzulegen.

DANN kommt Bob vorbei und meldet sich an (er und 500 andere Personen haben Konten in der Domäne und können dies tun).Er hat diesen Computer noch nie zuvor benutzt und verfügt daher über keine Registrierung.Wenn er sich zum ersten Mal anmeldet, erstellt Windows eins für ihn, aber er hat Ihre Einstellung nicht.

Ihre App stürzt dann ab oder verhält sich falsch, und Bob beschwert sich lautstark über die beschissenen Produkte von Raynixon.

Die richtige Antwort besteht darin, einfach einige Standardeinstellungen in Ihrer App zu haben, die sie in die Registrierung schreiben können, wenn sie nicht gefunden werden.Es ist eine allgemeine gute Praxis, dass Ihre App niemals von der Registrierung abhängig sein sollte und bei Bedarf Dinge für jeden Registrierungseintrag erstellen sollte, jedenfalls nicht nur für HKCU

Ungeachtet dessen, was die MSDN-Artikel Archiv des MSDN-Artikels sagt über User/Machine Hive, es schreibt nicht in HKEY_USERS.Vielmehr wird an HKCU geschrieben, wenn Sie „Nur ich“ auswählen, und an HKLM, wenn Sie „Alle“ auswählen.

Meine Lösung besteht also darin, die Benutzer-/Maschinenstruktur zu verwenden und dann in der Anwendung zu prüfen, ob sich die Registrierungseinträge in HKCU befinden, und sie, wenn nicht, aus HKLM zu kopieren.Ich weiß, dass dies wahrscheinlich nicht die idealste Vorgehensweise ist, aber es bringt die geringsten Änderungen mit sich.

Ich bin mit diesem Eintrag auf MSDN auf halbem Weg zu meiner Lösung (ich weiß nicht, warum ich ihn vorher nicht finden konnte).

Benutzer-/Maschinenstruktur
Unter dieser Struktur eingegebene Unterschlüssel und Werte werden unter der Struktur HKEY_CURRENT_USER installiert, wenn ein Benutzer „Nur ich“ oder die Struktur HKEY_USERS auswählt oder wenn ein Benutzer während der Installation „Jeder“ auswählt.

Registierungseditor Archiv des MSDN-Artikels

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top