2008-08-03 51 views
15

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 pour le moment est que nous devons écrire des entrées de registre à HKCU pour chaque utilisateur sur l'ordinateur. Ils doivent être dans le HKCU plutôt que HKLM parce qu'ils sont les paramètres utilisateur par défaut, et ils changent par utilisateur. Mon sentiment est queProjet d'installation de Visual Studio - Paramètres du registre d'utilisateurs

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

Avec cela à l'esprit, je veux encore changer aussi peu que possible dans l'application, donc ma question est, est-il possible d'ajouter des entrées de registre pour chaque utilisateur dans un projet d'installation Visual Studio 2003?

Et, au moment où le projet énumère cinq clés racine de registre (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS et utilisateur/machine Ruche). Je ne sais pas vraiment quoi que ce soit à propos de 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.

+0

merci pour cette question –

Répondre

5

Première: Oui, cela est quelque chose qui appartient à la demande de l'Reson que vous avez spécifié: Qu'est-ce qui se passe après les nouveaux profils d'utilisateurs sont créés? Bien sûr, si vous utilisez un domaine, il est possible de mettre des choses 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 y a des seetings et utiliser les paramètres par défaut sinon. Cela étant dit, il est possible de changer d'autres clés d'utilisateurs via la HKEY_USERS Hive.

Je n'ai aucune expérience avec le Visual Studio 2003 Projet d'installation, est donc ici un peu de (totalement sans rapport) code VBScript qui pourrait 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 de l'aimable autorisation de Jeroen Ritmeijer)

1

Je suis en partie à ma solution avec cette entrée sur MSDN (je ne sais pas comment je ne pouvais pas le trouver avant).

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

Registry Editor

5

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

ICI DRAGONS SOYEZ

Disons que Joe et Jane régulièrement connecter sur l'ordinateur, ils auront chacun « registres ». Vous allez ensuite installer votre application, et l'installateur emploiera des hacks géants et des choses dégoûtantes pour régler les objets sous HKCU pour eux.ALORS, Bob viendra et se connectera (lui, et 500 autres personnes ont des comptes dans le domaine et peuvent le faire). Il n'a jamais utilisé cet ordinateur auparavant, donc il n'a pas de registre. La première fois qu'il se connecte, Windows lui en crée un, mais il n'aura pas votre réglage.

Votre application tombe ensuite ou se comporte mal, et bob se plaint à haute voix de ces produits merdiques de raynixon incorporés.

La bonne réponse est d'avoir quelques paramètres par défaut dans votre application, qui peuvent les écrire dans le registre s'il ne les trouve pas. C'est une bonne pratique générale que votre application ne dépende jamais du registre, et doit créer des choses au besoin, pour n'importe quelle entrée de registre, pas seulement HKCU, de toute façon

1

En dépit de ce que le MSDN article dit à propos de User/Machine Hive, il ne le fait pas. écrire à HKEY_USERS. Il écrit plutôt à HKCU si vous sélectionnez Just Me et HKLM si vous sélectionnez tout le monde. Donc, ma solution va être d'utiliser User/Machine Hive, puis dans l'application, il vérifie si les entrées de registre sont dans HKCU et sinon, les copie à partir de HKLM. Je sais que ce n'est probablement pas la façon la plus idéale de le faire, mais elle a le moins de changements.