2016-11-02 2 views
1

Je crée l'encapsuleur pour mon application via l'installation de NSIS. Dans le wrapper, j'ai besoin de faire quelques entrées de registre pour mon application. Les entrées seront dans le chemin du registre "HKLM \ SOFTWARE \ Wow6432Node \ Microsoft" et "HKLM \ SOFTWARE \ Microsoft". Le problème est que lorsque j'importe le registre via la commande [ExecWait "regedit.exe/s registry.reg"] dans le NSIS, l'entrée de registre ne sera pas ajoutée au chemin "HKLM \ SOFTWARE \ Microsoft" , seulement dans une autre entrée, il sera ajouté. Et avec cela dans l'installation de NSIS il y aura une nouvelle entrée dans le chemin "HKLM \ SOFTWARE \ Wow6432Node \ Wow6432Node \ Microsoft" qui vient de nulle part, parce que je n'ai inclus aucune entrée de registre mentionnée comme cela dans le fichier de registre. J'ai vérifié le fichier de registre et il n'y avait aucun problème à l'intérieur de celui-ci. J'ai essayé en exécutant directement le fichier de registre et ai également essayé la même commande directement dans un dossier de bat aussi bien que CMD (regedit.exe/s registry.reg). Tout fonctionne bien. Seulement dans NSIS cela ne fonctionne pas. Toute aide est la bienvenue.Erreur lors de l'importation des entrées de registre dans NSIS

EDIT: Système d'exploitation: Windows 7, 64 bits

Version NSIS: 2,46

Répondre

1

Je suppose que votre application installateur NSIS est pour 32bit. Comme il s'agit d'un programme d'installation 32 bits, chaque opération de registre est automatiquement convertie par Windows en appliquant la clé de compatibilité "Wow6432Node". voir cette link sur la redirection de Registre

pour la commutation entre 32 bits et le registre 64 bits votre code devrait ressembler à:

SetRegView 64 
WriteRegDWORD HKLM "SOFTWARE\<Key1>\<Key2>" "Value" 0 
SetRegView 32 
WriteRegStr HKLM "SOFTWARE\<Key1>\<Key2>" "Value" "1" 

depuis nsis a ses propres fonctions natives pour modifier le registre de Windows, en utilisant ExecWait regedit.exe /s registry.reg Ce n'est pas une bonne idée

+0

J'ai un fichier reg pour mes entrées de registre. Et oui je peux utiliser les fonctions par défaut comme WriteRegStr et SetRegView en utilisant l'application 'Reg2nsis' pour convertir mon fichier reg mais le problème est, il y a un bug dans cette application de convertisseur qui donne des valeurs de registre erronées lors de la conversion. Donc, j'ai abandonné l'option d'utiliser les fonctions par défaut –

+0

si vous essayez de convertir un fichier de registre qui contient une référence directe à Wow6432Node probablement Reg2nsis ne fonctionnera jamais correctement, vous devez le faire manuellement – cristallo

+0

vous pouvez essayer d'exécuter C: \ Windows \ Syswow64 \ REGEDIT/s MYapp.reg c'est une solution assez sale et je ne suis pas sûr si cela va fonctionner correctement – cristallo

1

Le simple fait d'appeler Exec "regedit.exe" à partir d'une application 32 bits lancera Regedit 32 bits et provoquera le problème Wow6432Node \ Wow6432Node.

La vraie solution est d'utiliser Reg2Nsis ou un autre outil de conversion pour convertir votre fichier .reg en instructions WriteRegStr et SetRegView.

Vous pouvez essayer d'exécuter Regedit 64 bits avec ce hack laid:

!include x64.nsh 
${DisableX64FSRedirection} 
ExecWait '"$WinDir\Regedit.exe" /whatever' 
${EnableX64FSRedirection} 
+0

Je ne sais pas pourquoi" DisableX64FSRedirection "ne fonctionne pas aussi bien que" RunningX64 "ne fonctionne pas non plus qui est de x64.nsh. Maintenant, le problème résolu lorsque je redirige manuellement lorsque cela est nécessaire. –