windows - Projet d'installation de Visual Studio

Translate

J'essaye de maintenir un projet d'installation dansVisual 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 dansHKCUpour chaque utilisateur de l'ordinateur. Ils doivent être dans leHKCUplutôt queHKLMcar 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 veux toujours changer le moins possible dans l'application, donc ma question est,est-il possible d'ajouter des entrées de registre pour chaque utilisateur d'unVisual Studio 2003projet 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_USERSet ruche utilisateur / machine). Je ne sais vraiment rien de la clé racine Users et je n'ai pas vu User / Machine Hive. Quelqu'un peut-il m'éclairer sur ce qu'ils sont? Peut-être pourraient-ils résoudre mon problème ci-dessus.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Premièrement: Oui, c'est quelque chose qui appartient à l'application pour le réson exact que vous avez spécifié: 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 de mettre des éléments 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 indépendant) qui pourrait vous donner une idée de l'endroit 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 gracieuseté deJeroen Ritmeijer)

La source
Translate

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?

VOILÀ DES DRAGONS

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

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

ALORS, Bob viendra et se connectera (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. C'est une bonne pratique générale que votre application ne doit jamais dépendre du registre, et doit créer des éléments selon les besoins, pour toute entrée de registre, pas seulement HKCU

La source
Ray
Translate

Malgré ce que leArticle MSDN Archive de l'article MSDNdit à propos de User / Machine Hive, il n'écrit pas à HKEY_USERS. Il écrit plutôt dans 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 à partir de HKLM. Je sais que ce n'est probablement pas la manière la plus idéale de le faire, mais elle comporte le moins de changements.

La source
Ray
Translate

Je suis à mi-chemin de ma solution avec cette entrée sur MSDN (je ne sais pas comment je n'ai pas pu la trouver auparavant).

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 Archive de l'article MSDN

La source