Définir des variables d'environnement d'un processus

Qu'est-ce que la variable d'environnement concept?

Dans un programme C# j'ai besoin d'appeler un fichier exécutable. L'exécutable va appeler certains autres fichiers exécutables qui résident dans le même dossier. Les exécutables compter sur les deux variables d'environnement "PATH" et "RAYPATH" d'être réglée correctement. J'ai essayé les deux éléments suivants:

  1. J'ai créé un processus et de définir les deux varables dans StartInfo. L'
    les variables existent déjà, mais sont absents les informations nécessaires.
  2. J'ai essayé de définir les variables avec
    Système.De l'environnement.Lesetenvironmentvariable().

Quand je lance le processus, le système ne peut pas trouver le fichier exécutable ("executeable1"). J'ai tenté de StartInfo.Nom de fichier pour le chemin d'accès complet de "executeable1" - cependant les fichiers EXE qu'on appelle le formulaire dans "executeable1" ne sont pas trouvés...

Comment puis-je gérer cela?

string pathvar = System.Environment.GetEnvironmentVariable("PATH");
System.Environment.SetEnvironmentVariable("PATH", pathvar + @";C:\UD_\bin\DAYSIM\bin_windows\;C:\UD_\bin\Radiance\bin\;C:\UD_\bin\DAYSIM;");
System.Environment.SetEnvironmentVariable("RAYPATH", @"C:\UD_\bin\DAYSIM\lib\;C:\UD_\bin\Radiance\lib\");

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.WorkingDirectory = @"C:\UD_\bin\DAYSIM\bin_windows";

//string pathvar = p.StartInfo.EnvironmentVariables["PATH"];
//p.StartInfo.EnvironmentVariables["PATH"] = pathvar + @";C:\UD_\bin\DAYSIM\bin_windows\;C:\UD_\bin\Radiance\bin\;C:\UD_\bin\DAYSIM;";
//p.StartInfo.EnvironmentVariables["RAYPATH"] = @"C:\UD_\bin\DAYSIM\lib\;C:\UD_\bin\Radiance\lib\";


p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;

p.StartInfo.FileName = "executeable1";
p.StartInfo.Arguments = arg1 + " " + arg2;
p.Start();
p.WaitForExit();
  • La variable PATH doit inclure les différentes Fenêtres du système de répertoires ou de tout casser. Ajoutez vos répertoires à la valeur existante de CHEMIN plutôt que de remplacer CHEMIN d'accès à vos répertoires.
  • Merci Harry. J'ai édité ma question. Toutefois, le problème demeure...
  • Vous avez laissé de côté le premier point-virgule.
  • Ok - ajouté le premier point-virgule - maintenant "executable1" se trouve et fonctionne - ce qui est excellent. Cependant, les processus qu'on appelle le formulaire dans "executable1" semblent toujours en panne... une idée?
  • Peut-être vous devriez essayer de remplacer executable1 avec cmd.exe de sorte que vous pouvez voir à quoi ressemble? Il pourrait vous donner un indice.
  • Merci Harry - c'est très utile!
  • Pourriez-vous m'indiquer une bonne explication de ce qu'est la différence entre le Système.De l'environnement.Lesetenvironmentvariable() et de les mettre en StartInfo?
  • Pas désinvolte. La version courte: Lesetenvironmentvariable modifie les variables d'environnement pour le processus en cours. Ces changements sont probablement hérité par le processus de l'enfant. StartInfo affecte le processus de l'enfant uniquement. Il est probable que par la mise en StartInfo le processus de l'enfant ne reçoit que les variables d'environnement que vous incluez, donc si vous le faites de cette façon, vous aurez probablement besoin d'énumérer les variables d'environnement existant et de les copier sur, l'ajout, la modification ou l'exclusion en tant que de besoin.

InformationsquelleAutor timkado | 2013-01-28