dos_regsetstr de DOSlib

dos_regsetstr de DOSlib

Anonymous
Non applicable
1 132 Visites
11 Réponses
Message 1 sur 12

dos_regsetstr de DOSlib

Anonymous
Non applicable

Bonjour à tous,

Svp pourquoi ce code

(dos_regsetstr "HKEY_LOCAL_MACHINE" "SOFTWARE\\Myapp\\R1.0\\R17.2\\ACAD-7001:40C" "AcadVersion" "AutoCAD 2009 Français")

retourne nil

C'est une fonction doslib de mcneel et je suis sous windows 10

Merci infiniment

0 J'aime
Solutions acceptées (1)
1 133 Visites
11 Réponses
Replies (11)
Message 2 sur 12

_gile
Consultant
Consultant

Je ne connais pas cette fonction (je n'utilises pas DOSLIB) donc je ne sais pas si elle est censée créer la clé ("SOFTWARE\\Myapp\\R1.0\\R17.2\\ACAD-7001:40C") et/ou la valeur ("AcadVersion") si celles-ci n'existent pas, ce qui pourrait expliquer qu'elle renvoie nil.

 

La fonction "native" vl-registry-write crée bien la clé et la valeur.

(vl-registry-write "HKEY_CURRENT_USER\\SOFTWARE\\Myapp\\R1.0\\R17.2\\ACAD-7001:40C" "AcadVersion" "AutoCAD 2009")

 

 



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 3 sur 12

Anonymous
Non applicable

Merci infiniment gile pour ta réponse,

Oui effectivement cette fonction fait la même chose que vl-registry-write. Avec HKEY_CURRENT_USER ca marche nickel

Mais avec HKEY_LOCAL_MACHINE

(vl-registry-write "HKEY_LOCAL_MACHINE\\SOFTWARE\\Myapp\\R1.0\\R17.2\\ACAD-7001:40C" "AcadVersion" "AutoCAD 2009")

renvoie nil

Le problème vient de là peut être

Merci

0 J'aime
Message 4 sur 12

_gile
Consultant
Consultant

L'aide pour vl-registry-write est claire à ce sujet :

You cannot use vl-registry-write for HKEY_USERS or KEY_LOCAL_MACHINE.

 

Par contre celle de dos_regsetstr stipule bien qu'on peut écrire aussi dans LOCAL_MACHINE:

dos_regsetstr.png



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 5 sur 12

Anonymous
Non applicable

Ok gile,

Le problème vient justement de là. dos_regsetstr devrait avoir la même restriction mais ce n'est pas mentionné dans l'aide de Doslib.

Sinon comment ecrire dans le HKEY_LOCAL_MACHINE ?

Merci

0 J'aime
Message 6 sur 12

Anonymous
Non applicable

Ah j'ai pas fait attention à cette portion d'aide

Pourtant ça renvoie nil, et dès que j'ai changé en HKEY_CURRENT_USER ca marche

0 J'aime
Message 7 sur 12

_gile
Consultant
Consultant

Ce ne sont que des suppositions, mais j'imagine que dos_regsetstr permet de faire plus que vl-registry-write (on n'écrit pas une bibliothèque d'extension de fonction LISP pour reproduire ce que font déjà les fonctions natives), donc je pense que dos_regsetstr permet bien d'écrire dans LOCAL_MACHINE (à vérifier) mais peut-être juste pour y modifier des valeurs, pas y créer de nouvelles clés.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 8 sur 12

Anonymous
Non applicable

Jusqu'à preuve du contraire, je pense que c'est une erreur dans l'aide de Doslib. Après avoir tout essayer, je pense que dos_regsetstr ne peut pas écrire ni modifier une clé dans HKEY_LOCAL_MACHINE.

Merci gile pour toute l'aide et le temps consacré

0 J'aime
Message 9 sur 12

Anonymous
Non applicable

Problème résolu

C’était une question d'autorisations et de droits. Et au passage (dos_regsetstr) ne permet que de modifier une clé déjà créée, c'est (dos_regset) qui permet d'écrire. Dans l'aide c'est écrit que c'est une fonction obsolète... !

Merci beaucoup gile

 

0 J'aime
Message 10 sur 12

_gile
Consultant
Consultant
Solution acceptée

Oui, dans tous les cas, par défaut, il faut des droits administrateur pour écrire dans LOCAL_MACHINE. Même avec des environnements de programmation plus bas niveau comme .NET on doit faire un "manifeste d'application" pour modifier le niveau du contrôle de compte utilisateur et requérir les droits d'administrateur.

 

PS: la solution proposée sur le forum LISP de changer les permissions d'accès à HKEY_LOCAL_MACHINE à tout le monde n'est pas sans risque surtout s'il faut le faire sur tous les postes qui utiliseront ton programme. Je ne sais pas s'il y a dans doslib une fonction qui permette de requérir des droits d'administrateur (dos_adminp ?), mais ça serait grandement préférable.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime
Message 11 sur 12

Anonymous
Non applicable

parfaitement raison, de toute façon il va falloir remettre les autorisations à leur état initial une fois terminé.

(dos_adminp) ne résout pas le problème dans ce cas précis, et une pareille fonction serait plus que souhaitable

Cœur Cœur Cœur

0 J'aime
Message 12 sur 12

patrick.emin
Alumni
Alumni

Bonjour @Anonymous 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton "Approuver la solution" en bas de la réponse qui apporte une solution?

Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime