Question

J'essaie de maintenir un projet d'installation dans Visual Studio 2003 (oui, c'est une application héritée).Le problème que nous avons actuellement est que nous devons écrire des entrées de registre dans HKCU pour chaque utilisateur de l'ordinateur.Ils doivent être dans le HKCU plutôt que HKLM car ce sont les paramètres utilisateur par défaut et ils changent par utilisateur.Mon sentiment est que

  1. Ce n'est pas possible
  2. Ce n'est pas quelque chose que l'installateur devrait faire, mais quelque chose que l'application devrait faire (après tout, que se passe-t-il lorsqu'un profil utilisateur est créé après l'installation ?).

Dans cet esprit, je souhaite toujours modifier le moins possible l'application. Ma question est donc la suivante : est-il possible d'ajouter des entrées de registre pour chaque utilisateur dans un Visual Studio 2003 projet d'installation ?

Et, pour le moment, le projet répertorie cinq clés racine de registre (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, et Ruche utilisateur/machine).Je ne connais pas vraiment rien à la clé racine des utilisateurs et je n'ai pas vu User/Machine Hive.Quelqu'un peut-il m'éclairer sur ce qu'ils sont ?Peut-être qu'ils pourraient résoudre mon problème ci-dessus.

Était-ce utile?

La solution

D'abord:Oui, c'est quelque chose qui appartient à l'application pour la raison exacte que vous avez spécifiée :Que se passe-t-il après la création de nouveaux profils utilisateur ?Bien sûr, si vous utilisez un domaine, il est possible que certains éléments soient placés dans le registre lors de la création, mais ce n'est pas vraiment un cas d'utilisation.L'application doit vérifier s'il existe des paramètres et utiliser les paramètres par défaut dans le cas contraire.

Cela étant dit, il EST possible de modifier les clés d'autres utilisateurs via la ruche HKEY_USERS.

Je n'ai aucune expérience avec le projet d'installation de Visual Studio 2003, voici donc un peu de code VBScript (totalement sans rapport) qui pourrait simplement vous donner une idée où chercher :

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

(Code avec l'aimable autorisation de Jeroen Ritmeijer)

Autres conseils

Je suppose que parce que vous souhaitez le définir pour tous les utilisateurs, vous êtes sur une sorte d'ordinateur partagé, qui fonctionne probablement sous un domaine ?

VOILÀ DES DRAGONS

Disons que Joe et Jane se connectent régulièrement à l'ordinateur, ils auront alors chacun des « registres ».

Vous installerez ensuite votre application et le programme d'installation emploiera des hacks géants et des choses dégoûtantes pour définir des éléments sous HKCU pour eux.

ALORS, Bob viendra se connecter (lui et 500 autres personnes ont des comptes dans le domaine et peuvent donc le faire).Il n'a jamais utilisé cet ordinateur auparavant, il n'a donc pas de registre.La première fois qu'il se connecte, Windows lui en crée un, mais il n'aura pas votre paramètre.

Votre application tombe alors ou se comporte incorrectement, et Bob se plaint bruyamment de ces produits merdiques de Raynixon incorporés.

La bonne réponse est d'avoir simplement quelques paramètres par défaut dans votre application, qui peuvent les écrire dans le registre si elle ne les trouve pas.Il est de bonne pratique générale que votre application ne dépende jamais du registre et qu'elle crée des éléments selon les besoins, pour toute entrée de registre, pas seulement HKCU, de toute façon.

Malgré ce que Article MSDN Archives de l'article MSDN dit à propos de User/Machine Hive, il n'écrit pas sur HKEY_USERS.Il écrit plutôt sur HKCU si vous sélectionnez Just Me et HKLM si vous sélectionnez tout le monde.

Ma solution va donc être d'utiliser la ruche utilisateur/machine, puis dans l'application, elle vérifie si les entrées de registre sont dans HKCU et sinon, les copie depuis HKLM.Je sais que ce n’est probablement pas la façon la plus idéale de procéder, mais c’est celle qui comporte le moins de changements.

Je suis à mi-chemin de ma solution avec cette entrée sur MSDN (je ne sais pas comment je ne l'ai pas trouvée avant).

Ruche utilisateur/machine
Les sous-clés et les valeurs saisies sous cette ruche seront installées sous la ruche HKEY_CURRENT_USER lorsqu'un utilisateur choisit « Just Me » ou la ruche HKEY_USERS ou lorsqu'un utilisateur choisit « Tout le monde » lors de l'installation.

Éditeur de registre Archives de l'article MSDN

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top