Forum LiberKey


https://www.liberkey.com/forum/

LPF - Utiliser le Portabilizer pour les clés de registre

https://www.liberkey.com/forum/viewtopic.php?f=11&t=6283

Page 1 sur 2

LPF - Utiliser le Portabilizer pour les clés de registre

MessagePosté: 16 Octobre 2012, 17:38
de Atlankey
Salut, je suis en train de tester le portabilizer (c'est de la bombe !!!! simple et centraliser :woohoo: )
par contre j'ai un probleme, je n'arrive pas a changer une vaulleur dans le registre ( le mode Admin est activer)

Code: Tout sélectionner
        <Registry>
           <RegReplace>
                        <RegVar>
                                <RegValue>HKLM\SOFTWARE\Collectorz.com\Movie\MCE</RegValue>
                      <StringID>Folder Path</StringID>
                      <Replace compare="txt">%LBK_APP_PATH%\App\AppData_ORI\Local\Collectorz.com\Movie Collector\MCE\</Replace>
                        </RegVar>
                </RegReplace>
        </Registry>



j'ai essayer de rajouter "regfile" pour un .reg par default mais idem.
origine:
Code: Tout sélectionner
                <RegSettings regfile="Data\MovieCollector.reg" level="required">
                </RegSettings>

ajout:
Code: Tout sélectionner
                <RegReplace regfile="Data\DEF_MovieCollector.reg" level="required">
                </RegReplace>

Quelqu'un aurait une solution?

Edit de Dji: je me suis permis de modifier le titre du post afin de le rendre plus clair par rapport au contenu ;-)
Edit Atlankey: pas de souci, c'est vrai que je suis tellement plonger dans la regRuche que j'avoue metre focaliser juste sur le minimun de mise en page ;)

Re: Help. impossible de remplacer une valeur dans le registr

MessagePosté: 17 Octobre 2012, 14:38
de Dji
Il te faut commencer par paramétrer les clés qui seront sauvegardées à la fin de ton programme et restaurées avant l'exécution de ton programme dans le .reg comme suit:

Code: Tout sélectionner
<Registry>
  <RegSettings regfile="Data/settings/un fichier.reg" level="optional">
    <Value>HKCU\Software\7-zip\Options\WorkDirPath</Value>
  </RegSettings>
</Registry>


Ensuite, tu va paramétrer les variables de ce .reg qui seront remplacées/restaurées par %LBK_ROOT%
Code: Tout sélectionner
<RegReplace>
   <RegVar>
      <RegValue>HKCU\Software\7-zip\Options\WorkDirPath</RegValue>
      <StringID>_LBK_APP_PATH_</StringID>
      <Replace compare="txt">%LBK_APP_PATH%</Replace>
   </RegVar>
</RegReplace>

Re: Help. impossible de remplacer une valeur dans le registr

MessagePosté: 17 Octobre 2012, 15:02
de Atlankey
oui c'est ce que je fait depuis ce matin mais ca ne fonctionne pas.

<RegVar> ne change pas le chemin donc du coup j'ai essayer d'adapter cela avec un 2eme .reg qui contien les chemins path par default.

Code: Tout sélectionner

<Registry>
        <RegSettings regfile="Data\MovieCollector_ConfigUser.reg" level="required">
                <Section>HKCU\Software\Collectorz.com\Movie</Section>
                <Section>HKLM\SOFTWARE\Classes\.mvc</Section>
                <Section>HKLM\SOFTWARE\Classes\Movie Collector</Section>
                <Section>HKLM\SOFTWARE\Collectorz.com\Movie</Section>
        </RegSettings>
        <RegSettings regfile="Data\MovieCollector_ConfigDefaultPath.reg" level="required">
                <Value>HKCU\Software\Collectorz.com\Movie\Databases</Value>
                <Value>HKLM\SOFTWARE\Collectorz.com\Movie\MCE</Value>
        </RegSettings>

        <RegReplace>
                <RegVar>
                        <RegValue>HKCU\Software\Collectorz.com\Movie\Databases</RegValue>
                   <StringID>CurrentDatabase</StringID>
                   <Replace compare="txt">%LBK_APP_PATH%\Documents\Movie Collector\Test.mvc</Replace>
                </RegVar>
                <RegVar>
                        <RegValue>HKLM\SOFTWARE\Collectorz.com\Movie\MCE</RegValue>
                   <StringID>XML Path</StringID>
                   <Replace compare="txt">%LBK_APP_PATH%\App\AppData\Local\Collectorz.com\Movie Collector\MCE\movies.mcexml</Replace>
                </RegVar>
        </RegReplace>
</Registry>



Le .reg n°2 ( MovieCollector_ConofigDefaultPath.reg) se lance bien en second, et met donc a jour le path du .reg1 (MovieCollector_ConfigUser.reg) lancer en 1er.
mais lors de la fermeture su soft, le reg2 et vide, car la modif <RegVar> ne change pas le chemin et donc RegSettings enregistre un reg. MovieCollector_ConofigDefaultPath.reg vide (meme si le reg et en lecture seule)


Cepandant, le probleme reste le meme, que je passe par 1 RegSettings & <RegVar>, ou bien, par 2 RegSettings & 2fichier Reg.

Re: Help. impossible de remplacer une valeur dans le registr

MessagePosté: 17 Octobre 2012, 15:16
de Dji
Qu'y a t'il exactement à l'emplacement HKCU\Software\Collectorz.com\Movie ? (fais un export partiel et copie colle le contenu ici, pas de fichier joint, stp)

Sinon , il vaut mieux préférer l'utilisation d'un et un seul .reg mais une fois que ton appli est fermée, tu édite le .reg qu'il aura sauvé et tu y mets (si on se base sur mon exemple) _LBK_APP_PATH_ dans les valeurs de clés souhaitées, puis tu relance le .lpf via le portabilizer.

Re: Help. impossible de remplacer une valeur dans le registr

MessagePosté: 17 Octobre 2012, 15:35
de Atlankey
justement c'est que j'ai tester avec le Reg.2. a la fermeture je copie le reg 2, quand le soft demarre, le reg2 et pris en compte et les chemins mis a jour. mais lors de la fermeture du soft. le reg2 et vierge.


Le fichier Reg.2 et celui qui contient les path car je n'arrive pas a modifié avec <RegVar> les valeurs dans l'utilisation d'un et un seul .reg

Reg.2 (copié manuelement dans Data avant l'ouverture du soft)
Code: Tout sélectionner
REGEDIT4

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Databases]
"CurrentDatabase"="..\\..\\-- DataBase --\\MovieCollector - Films\\db-films.mvc"

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Folders]
"Data"="..\\..\\-- DataBase --\\MovieCollector - Films\\"
"App"=""
"Backup"="..\\..\\-- DataBase --\\MovieCollector - Films\\Backup\\"
"UserTemplates"="..\\..\\-- DataBase --\\MovieCollector - Films\\Templates\\"
"UserFiles"="..\\..\\-- DataBase --\\MovieCollector - Films\\"
"MediaFiles"="..\\..\\-- DataBase --\\MovieCollector - Films\\"

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Settings]
"ImageBaseFolder"="..\\..\\-- DataBase --\\MovieCollector - Films\\Images\\"
"ThumbnailBaseFolder"="..\\..\\-- DataBase --\\MovieCollector - Films\\Thumbnails\\"
"LookupItemImagesFolder"="..\\..\\-- DataBase --\\MovieCollector - Films\\Images\\Listitemimages\\"

[HKEY_LOCAL_MACHINE\Software\Collectorz.com\Movie\MCE]
"XML Path"="..\\DefaultData\\localappdata\\Collectorz.com\\Movie Collector\\MCE\\movies.mcexml"


Reg.2 a la fermeture du soft
Code: Tout sélectionner
REGEDIT4

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Databases]

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Folders]

[HKEY_CURRENT_USER\Software\Collectorz.com\Movie\Settings]

[HKEY_LOCAL_MACHINE\Software\Collectorz.com\Movie\MCE]




D'ou mon probleme. dans le cas l'utilisation d'un et un seul .reg, je n'arrive pas a Paraméter <RegVar>.

Par exemple pour
Code: Tout sélectionner
[HKEY_LOCAL_MACHINE\Software\Collectorz.com\Movie\MCE]
"XML Path"="..\\DefaultData\\localappdata\\Collectorz.com\\Movie Collector\\MCE\\movies.mcexml"


j'ai fait dans le cas l'utilisation d'un et un seul .reg:
Code: Tout sélectionner
                       
<RegVar>
        <RegValue>HKLM\SOFTWARE\Collectorz.com\Movie\MCE</RegValue>
        <StringID>XML Path</StringID>
        <Replace compare="txt">%LBK_APP_PATH%\App\AppData\Local\Collectorz.com\Movie Collector\MCE\movies.mcexml</Replace>
</RegVar>


mais apparaement ce n'est pas bon?

Re: Help. impossible de remplacer une valeur dans le registr

MessagePosté: 17 Octobre 2012, 16:22
de Dji
C'est parce que tu ne renseigne pas les nom des clés à sauvegarder ! :)

Essaye ceci:
Code: Tout sélectionner
<Registry>
  <RegSettings regfile="Data/settings/un fichier.reg" level="optional">
    <Value>HKCU\Software\Collectorz.com\Movie\Databases\CurrentDatabase</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\Data</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\App</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\Backup</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\UserTemplates</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\UserFiles</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Folders\MediaFiles</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Settings\ImageBaseFolder</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Settings\ThumbnailBaseFolder</Value>
    <Value>HKCU\Software\Collectorz.com\Movie\Settings\LookupItemImagesFolder</Value>
    <Value>HKLM\Software\Collectorz.com\Movie\MCE\XML Path</Value>
    <SectionKill force="no">HKCU\Software\Collectorz.com\Movie</SectionKill>
    <SectionKill force="no">HKLM\Software\Collectorz.com\Movie</SectionKill>
  </RegSettings>
</Registry>


Ne mets rien dans <RegReplace> si les chemins en relatifs fonctionnent, sinon mets les chemins complets en dur et stipule ceci :
Code: Tout sélectionner
<RegReplace>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Databases\CurrentDatabase</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\Data</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\App</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\Backup</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\UserTemplates</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\UserFiles</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Folders\MediaFiles</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Settings\ImageBaseFolder</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Settings\ThumbnailBaseFolder</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Settings\LookupItemImagesFolder</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
  <RegVar>
    <RegValue>HKLM\Software\Collectorz.com\Movie\MCE\XML Path</RegValue>
    <StringID>_LBK_APP_PATH_</StringID>
    <Replace compare="txt">%LBK_APP_PATH%</Replace>
  </RegVar>
</RegReplace>

Re: LPF - Utiliser le Portabilizer pour les clés de registre

MessagePosté: 17 Octobre 2012, 17:16
de Atlankey
Excellent, maintenant que j'ai compris comment paramettrer le <regvalue> grace a ton exemple, j'ai pu cernet le probleme.
En fait cela vien de "<Replace compare="txt">", en fait lors du premier demarage ( ou dans le cas d'une valeur vide) comme le <StringID></StringID> doit etre identique a la valeur du registre du coup elle ne fait que comprarer et remplacer. et non plas creer ou ecraser.
(donc dansle cas d'une valeur VIDE ou NON ORIGINEL) seul la valeur Original et conserver.

voila ce qu'il me faudrait donc : -->sans la ligne StringID></StringID> avec,
a la place de "<Replace compare="txt">" :
- il faut un truc du genre "<Replace create/compare="txt">" ou bien "<Replace forcereplace="txt">"

Code: Tout sélectionner
 
<RegVar>
    <RegValue>HKCU\Software\Collectorz.com\Movie\Databases\CurrentDatabase</RegValue>
    <Replace create/compare="txt">%LBK_APP_PATH%</Replace>
</RegVar>


seulement le wiki ne detail pas cela.tu connait la bonne commande?

Re: LPF - Utiliser le Portabilizer pour les clés de registre

MessagePosté: 18 Octobre 2012, 08:29
de Dji
As tu seulement essayé ma config ? ;-)

Au démarrage, le portabilizer enregistre les noms des clés qu'il doit restaurer (les <Value> dans <RegSettings>), ensuite il lance l'application (pour le moment, ne parlons pas du .reg, si mauvaises valeurs il y a dedans, ce n'est pas grave)
A la clôture de l'application, il regarde dans ces mêmes clés, s'il y a quelque part la valeur %LBK_APP_PATH% et la remplace dans le ficher .reg spécifié par _LBK_APP_PATH_ (pas toute la valeur, seulement le chemin correspondant à %LBK_APP_PATH%)
Au lancement suivant de l'appli, il ouvrira à nouveau le .reg et remplacera pour chaque clé (<RegValue> dans <RegVar>) la valeur _LBK_APP_PATH_ par %LBK_APP_PATH% (pas toute la valeur, seulement _LBK_APP_PATH_)

P.S : Je le répète: ne mets rien dans <RegReplace> si les chemins en relatifs fonctionnent !

Re: LPF - Utiliser le Portabilizer pour les clés de registre

MessagePosté: 18 Octobre 2012, 10:50
de Atlankey
oui c'est ta config je j'ai mis et qui fonctionne. et qui comme je te les dit ma permit de voir d'ou venait le problème.

Au démarrage, le portabilizer enregistre les noms des clés qu'il doit restaurer (les <Value> dans <RegSettings>), ensuite il lance l'application (pour le moment, ne parlons pas du .reg, si mauvaises valeurs il y a dedans, ce n'est pas grave)


Ca oui, ca marche pas de souci,

A la clôture de l'application, il regarde dans ces mêmes clés, s'il y a quelque part la valeur %LBK_APP_PATH% et la remplace dans le ficher .reg spécifié par _LBK_APP_PATH_ (pas toute la valeur, seulement le chemin correspondant à %LBK_APP_PATH%)


le probleme et là.
je veux pas qu'il mette a jour la clé par une comparaison de chemin. mais simplement qu'il ecrive la valeur si elle n'y est pas ou bien la remplacer de force.


car sinon, je suis dependant du reg. et en plus donc fausse toute la config du logiciel car je _LBK_APP_PATH_ et detecter du coup que au 3 démarrage du soft car il compare et met a jour le reg a la fin du 2eme lancement....
Au lancement suivant de l'appli, il ouvrira à nouveau le .reg et remplacera pour chaque clé (<RegValue> dans <RegVar>) la valeur _LBK_APP_PATH_ par %LBK_APP_PATH% (pas toute la valeur, seulement _LBK_APP_PATH_)


donc il me faut une commande <remplace compare=txt> mais pour creer sur une valeur vide ou remplacer de force.

Re: LPF - Utiliser le Portabilizer pour les clés de registre

MessagePosté: 18 Octobre 2012, 15:27
de Dji
Atlankey a écrit:car sinon, je suis dependant du reg.

Je ne vois pas où cela pose un problème, tu embarque le .reg avec le .lpf et ça roule (je fais ça pour portabiliser John's Background Switcher)

Atlankey a écrit:et en plus donc fausse toute la config du logiciel car je _LBK_APP_PATH_ et detecter du coup que au 3 démarrage du soft car il compare et met a jour le reg a la fin du 2eme lancement....

Au premier lancement, les valeurs sont fausses parce qu'on l'a voulu sciemment justement pour qu'il y écrive ce dont il a besoin pour après pouvoir vérifier le .reg à la main.

Sinon au second lancement et les suivants, tout roule normalement. Non ?