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:
- 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. - 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
aveccmd.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.
Vous devez vous connecter pour publier un commentaire.
Quel est ton problème en fait?
System.Environment.SetEnvironmentVariable
modifie les variables d'environnement de la processus actuel. Si vous souhaitez modifier les variables d'un processus de création, il suffit d'utiliser laEnvironmentVariables
dictionnaire de la propriété:new ProcessStartInfo()
?new ProcessStartInfo()
remplit le dictionnaire.Il existe de nombreux types de variables d'environnement, comme le niveau du système et des utilisateurs. Cela dépend de vos exigences.
Pour la définition des variables d'environnement, il suffit d'utiliser la Obtenir la méthode de Jeu. Passer des variables Nom et la Valeur des paramètres et, si l'utilisation de définir le niveau d'accès doit alors passer avec elle. Pour accéder à la valeur de l'utilisation de la méthode de Jeu pour passer le niveau d'accès paramètre trop.
Par exemple, je suis définir au niveau de l'utilisateur variables: