1 votes

Y a-t-il un moyen de définir des variables d'environnement pour explorer.exe qui ne sont pas là lorsque Windows redémarre?

Est-il possible de définir des variables d'environnement pour explorer.exe qui ne sont pas là lorsque Windows redémarre?

Je regardais certains commentaires Voir les variables d'environnement des processus dans Windows et ils soulèvent ce point intéressant.

Ils indiquent que lorsque vous définissez une variable d'environnement à partir de la fenêtre "Variables d'environnement", vous définissez des variables d'environnement système là-bas. Ensuite, cela les définit pour le processus explorer.exe. Ainsi, toute nouvelle fenêtre cmd les reçoit. Parce que le processus cmd.exe enfant créé à partir du processus parent explorer.exe hérite de ces variables. Et la raison pour laquelle lorsque vous utilisez la commande SET dans cmd.exe, c'est seulement pour cette fenêtre cmd, c'est parce que cela les définit uniquement pour ce processus cmd.exe particulier. Ainsi, les commentaires indiquent que les variables d'environnement sont toujours propres à un processus.

Lorsque Windows redémarre, les variables d'environnement définies dans cette fenêtre "Variables d'environnement" persistent, de sorte que lorsque Windows redémarre, elles sont toujours là. Et je sais que les variables d'environnement définies là-bas sont écrites dans le registre.

Je me demande s'il est possible de définir des variables d'environnement pour explorer.exe sans qu'elles aillent dans le registre et donc sans qu'elles soient là après le redémarrage de Windows?

Remarque- Je demande dans ma question "sans qu'elles aillent dans le registre". Donc une solution qui les écrit dans le registre puis les supprime, n'est pas une solution. SETX n'est pas une solution car SETX est juste une version en ligne de commande de ce que le paramétrage des variables dans la fenêtre des variables d'environnement fait, et cela les définit dans le registre. La commande REG peut également être utilisée pour ajouter/supprimer du registre https://stackoverflow.com/questions/1472722/how-to-remove-an-environment-variable-from-the-system-configuration-with-a-batch ou https://stackoverflow.com/questions/13222724/command-line-to-remove-an-environment-variable-from-the-os-level-configuration Mais ce n'est pas une solution / ce n'est pas de cela dont je parle.

1voto

James Mertz Points 390

La fenêtre "Variables d'environnement" ne défini pas vraiment définit directement les variables d'environnement pour explorer.exe - elle diffuse simplement une annonce de "modification des paramètres système", sur réception de laquelle explorer.exe recharge son environnement à partir du Registre. Il n'existe donc pas de mécanisme standard pour changer son environnement sans compter sur le Registre.

Cependant, vous pouvez quitter explorer.exe et le redémarrer à partir de votre fenêtre cmd.exe, ce qui permettra au nouveau processus Explorer d'hériter à nouveau de toutes les variables d'environnement de son parent. (Ctrl-Shift-cliquez sur l'horloge de la barre des tâches et choisissez "Quitter l'Explorateur", puis exécutez simplement explorer depuis cmd.)

L'application "Gestionnaire de tâches Informateur système" (anciennement appelée "Process Hacker") peut être utilisée pour modifier les variables d'environnement de n'importe quel processus en utilisant des API de débogage, depuis la fenêtre "Propriétés" d'un processus. (Ignorez le fait qu'elle regroupe les variables par origine; elles se retrouvent quand même dans une seule liste par processus.)

1voto

Carl Walsh Points 253

Je ne vois pas de bonne façon d'atteindre des variables explorer.exe "temporaires" qui resteront si un autre outil exécute SETX, mais qui ne resteront pas après la déconnexion/redémarrage.

Par exemple, vous pourriez utiliser SETX, mettre à jour manuellement le registre, puis diffuser "modification des paramètres système", utiliser une API de débogage, etc., pour définir la variable d'environnement dans le processus explorer.exe. Ensuite, vous pourriez éditer manuellement le registre pour ne pas contenir la nouvelle variable d'environnement, de sorte que la prochaine fois au démarrage du système, explorer.exe ne chargera pas la variable d'environnement. Mais je suis assez confiant que si un autre outil déclenche la diffusion de "modification des paramètres système", alors EXPLORER oubliera la variable d'environnement que vous vouliez ?


Vous pourriez créer un outil de démarrage du système (par exemple avec shell:startup ou le planificateur de tâches ou un service) qui supprime la variable d'environnement avec SETX la prochaine fois que vous redémarrez. Mais il y aurait alors une condition de concurrence car certains autres processus de démarrage du système auraient déjà été lancés avant votre outil. Ce compromis sera acceptable si vous vous souciez uniquement des processus lancés de manière interactive par l'utilisateur.

1voto

barlop Points 21549

D'après ce que je peux dire, ce n'est pas possible.

On peut voir depuis C# qu'un processus peut définir ses propres variables d'environnement Environment.SetEnvironmentVariable("MY_ENV_VARIABLE", "valeurQuelconque", EnvironmentVariableTarget.Process) https://learn.microsoft.com/en-us/dotnet/api/system.environmentvariabletarget?view=net-7.0

Mais il ne peut pas définir celles d'autres processus. (à moins qu'on puisse somehow écrire dans le bloc de mémoire associé à ce processus!). (ou à moins qu'un processus lise ses variables d'environnement à partir d'un fichier ou du registre et que d'autres processus changent ce fichier ou cet emplacement du registre)

Un expert m'a fait remarquer qu'explorer.exe définit ses variables d'environnement sur la base de deux listes. Cela semble logique.

Ainsi, explorer.exe consulte ce qui se trouve dans le registre pour les soi-disant "variables d'environnement utilisateur" et les "variables d'environnement machine" (chacune d'elles étant simplement une notion de niveau supérieur), et définit ses variables d'environnement en fonction de ces listes.

Tous ou la plupart des processus, sont générés à partir de explorer.exe qui est donc leur processus parent https://stackoverflow.com/questions/51176823/why-most-processes-have-the-explorer-exe-as-their-parent-process et héritent donc des variables d'environnement de explorer.exe

Si vous regardez la réponse de Jamie ici https://stackoverflow.com/questions/13222724/command-line-to-remove-an-environment-variable-from-the-os-level-configuration Explorer.exe a un moyen de lui indiquer de relire les variables d'environnement à partir du registre. Un script PowerShell peut diffuser un "message Windows (WM_SETTINGCHANGE)". Ainsi explorer.exe peut mettre à jour ses variables d'environnement sans avoir à redémarrer explorer.exe.

Donc, pour répondre à la question posée dans le titre, "Est-il possible de définir des variables d'environnement pour explorer.exe qui ne sont pas présentes lorsque Windows redémarre?"

La réponse stupide est d'ouvrir la fenêtre des variables d'environnement, définir la variable d'environnement, puis explorer.exe aura cette variable d'environnement. Ensuite, lorsque vous ne la voulez plus, ouvrez la fenêtre des variables d'environnement et supprimez-la de là. Ensuite, elle ne sera pas présente lorsque Windows redémarrera.

Évidemment, je mentionne dans ma question

"Je me demande, s'il est possible de définir des variables d'environnement pour explorer.exe sans qu'elles aillent dans le registre "

Certains suggèrent setx.. Mais cela fait simplement en ligne de commande ce que la fenêtre des variables d'environnement fait pour ajouter une variable, donc inclut l'écriture dans le registre. Et setx n'offre actuellement pas d'option pour supprimer du registre, on utiliserait par exemple la commande reg pour cela. Et setx enverrait je suppose le message pour que explorer.exe sache de relire à partir du registre, comme le fait probablement la fenêtre des variables d'environnement. Ainsi les nouveaux processus héritent/vont voir les nouvelles variables d'environnement. Mais comme les méthodes mentionnées ci-dessus. Commandes reg pour ajouter/supprimer du registre, et une commande pour diffuser.. Tout cela utilise/implique le registre. Parce que c'est le chemin que explorer.exe donne aux processus pour définir ses variables d'environnement.

Ainsi

La réponse doit être Non. (à moins que quelqu'un pirate somehow le processus explorer.exe!)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X