web-dev-qa-db-fra.com

La définition des variables d'environnement nécessite un redémarrage sur 64 bits

Je travaille sur un programme d'installation utilisant Wix 3.5 qui doit définir la variable d'environnement PATH du système.

Voici comment je définis la variable d'environnement:

<Directory Id="DirectoryName">
    <Component Id="ComponentID" Guid="{BE20AF67-5943-4AF4-BE66-226E2D4B844F}">
        <Environment Id="EnvironmentID" Name="PATH" Action="set" Value="the path" Part="last" Separator=";" System="yes" />
    </Component>
</Directory>

Cela semble fonctionner sur des systèmes 32 bits sans nécessiter de redémarrage pour que les modifications soient reconnues. Cependant, lorsque je l'essaie sur Windows 7 64 bits, un redémarrage est nécessaire.

Est-ce un problème connu sur les systèmes 64 bits?

La meilleure approche serait peut-être de planifier un redémarrage pour couvrir toutes les bases.

Merci Alan

27
Alan Spark

Vérifiez cette question sur ServerFault: Comment ajouter une variable d'environnement Windows sans redémarrer?

Donc, pour propager le changement dans la liste des variables d'environnement, vous pouvez écrire un petit programme qui diffuse WM_SETTINGCHANGE message comme décrit dans l'article de la base de connaissances Comment propager des variables d'environnement vers le système .

27
Alexey Ivanov

Lorsque vous ajoutez ou définissez une variable d'environnement, un WM_SETTINGCHANGE un message est envoyé à tous les programmes pour les informer du changement. Cependant, tout programme déjà en cours d'exécution n'obtiendra pas l'environnement mis à jour, sauf s'il peut gérer ce message lui-même. Le redémarrage du système met à jour chaque programme.

Une solution de contournement sans redémarrage:

  1. Tuez et redémarrez Explorer.exe, bien que cela ne fonctionne pas pour tous les processus en cours d'exécution et uniquement pour l'utilisateur actuellement connecté.
  2. Redémarrez le processus ou le programme que vous souhaitez utiliser, par exemple. essayez cela avec cmd.exe. Encore une fois, cela ne fonctionne que pour l'utilisateur connecté.

Donc, en résumé, pour que cela fonctionne pour chaque utilisateur, vous devez toujours redémarrer.

5
Kurt Van den Branden