2010-03-05 3 views
0

Système d'exploitation: MS Windows XP Pro (SP3)WiX: Comment écrivez-vous les variables spécifiées lors de l'installation dans la clé de registre de tous les utilisateurs?

Mon application doit accéder aux bases de données externes, dont je spécifie les emplacements lors de l'installation. Les chemins d'accès aux fichiers spécifiés sont ensuite écrits dans le registre, puis l'application extrait ces informations du registre au besoin. J'ai implémenté cela dans WiX comme suit, en utilisant un seul des chemins de fichier comme exemple:

1) Je crée une variable (pour l'un des chemins de fichier), appelée RootDir et lui donne une valeur de chaîne par défaut de " C: \ »

<?define RootDir="C:\"?> 

2) J'insérer une boîte de dialogue supplémentaire dans l'interface utilisateur d'installation et d'avoir une zone d'édition (entre autres) qui affiche le chemin du fichier par défaut ci-dessus. J'ai aussi un composant pour créer la clé de Registre où cette chaîne résidera

<Component Id="RegistryEntries" Guid="04AD0437-89E1-498c-85FF-EE180BEB53E0"> 
    <RegistryKey Root="HKCU" Key="Software\xxx" Action="createAndRemoveOnUninstall"> 
    <RegistryValue Type="string" Name="xxx" Value="[ROOTDIR]" KeyPath="yes"/> 
    </RegistryKey> 
</Component> 

Lorsque le programme d'installation est exécuté

<Dialog Id="FilePathDlg" Width="370" Height ="270" Title ="xxx"> 
    <Control Id="RootDirEdit" Type="Edit" X="20" Y="72" Width="320" Height="18" Property="ROOTDIR" Text="[ROOTDIR]" /> 

3), l'utilisateur peut modifier la zone d'édition décrite dans (2) entrez le chemin de fichier désiré (dites "P: \"). Cette valeur est enregistrée dans RootDir, puis lorsque les entrées de Registre sont installées, la valeur est écrite dans le Registre.

Jusqu'ici, tout va bien. Cela fonctionne, mais le problème est qu'il écrit uniquement la valeur spécifiée par l'utilisateur (dans cet exemple "P: \") à l'entrée de registre dans la clé utilisateur en cours de l'utilisateur effectuant l'installation. Puisque je veux que l'application soit installée par les administrateurs seulement (j'ai une condition pour faire ceci), évidemment les chemins de fichier spécifiés par l'utilisateur sont seulement écrits à la clef actuelle de l'administrateur.

J'ai une ligne qui assure que l'installation par machine, plutôt que par utilisateur (la valeur de ALLUSERS est 1):

<Package InstallerVersion="300" Compressed="yes" Platform = "x86" InstallScope="perMachine"/> 

Ainsi, bien que le programme d'installation crée des clés de registre pour tous les utilisateurs, le La valeur de la variable spécifiée par l'utilisateur reste sur la valeur par défaut (dans ce cas "C: \") pour tous les autres utilisateurs mais change à la valeur spécifiée (P :) pour l'administrateur.

Est-ce que quelqu'un sait comment je peux changer cela afin que les variables spécifiées par l'utilisateur soient écrites dans les entrées de registre de clé utilisateur actuelles de tous les utilisateurs plutôt que seulement celles de l'administrateur?

+0

Corrigez-moi si je me trompe, mais il semble que vous essayez de mettre quelque chose qui devrait être dans HKLM dans HKCU. Lorsque vous configurez quelque chose dans l'utilisateur actuel, c'est juste cela, l'utilisateur actuel.Malheureusement, je ne pense pas qu'il existe un moyen de définir un paramètre utilisateur en cours pour tous les utilisateurs d'un utilisateur. Est-ce que votre programme doit impérativement enregistrer une entrée dans HKCU? –

+0

Vous avez peut-être raison - c'est juste frustrant que ça marche presque mais pas tout à fait! L'application doit avoir certaines variables dans HKCU parce que je veux que les différents utilisateurs puissent avoir des paramètres différents dans l'application, mais je suppose que je vais devoir réécrire le bit avec les chemins de fichiers spécifiés par l'utilisateur pour aller dans HKLM. La seule chose qui me laisse perplexe est que tous les utilisateurs reçoivent les clés de registre que je crée dans HKCU - voir ci-dessus "Bien que l'installateur crée des clés de registre pour tous les utilisateurs ..." - alors pourquoi est-ce si important? certaines des variables pour tous les utilisateurs, pas seulement l'administrateur? – user8445800

Répondre

0

Il y a un moyen mais je déconseille fortement. Il repose sur la réparation de Windows pour propager le composant de registre HKCU à chaque profil d'utilisateur la première fois qu'ils utilisent votre application. Pensez à combien de fois vous avez vu Microsoft Office demander le CD-ROM la première fois que vous utilisez le programme.

Cela appartient à HKLM et vous devez réécrire votre application pour l'accepter. De plus, il y en a qui diraient que les données de configuration n'appartiennent pas à un programme d'installation et que vous devriez les obtenir au premier lancement de votre application. Je ne vais pas vraiment loin dans mes croyances, mais c'est quelque chose que vous devez considérer.

3

Votre programme d'installation doit écrire sur HKLM. Votre application, au démarrage, doit vérifier les valeurs dans HKCU et, si elles n'existent pas, elle doit être copiée à partir de HKLM.

Questions connexes