web-dev-qa-db-fra.com

Définir des variables d'environnement pour un processus

Qu'est-ce que le concept de variable d'environnement?

Dans un programme C #, j'ai besoin d'appeler un exécutable. L'exécutable appellera d'autres exécutables qui résident dans le même dossier. Les exécutables s'appuient sur les deux variables d'environnement "PATH" et "RAYPATH" pour être définies correctement. J'ai essayé les deux choses suivantes:

  1. J'ai créé un processus et défini les deux variables dans StartInfo. Les variables existent déjà mais il manque les informations nécessaires.
  2. J'ai essayé de définir les variables avec System.Environment.SetEnvironmentVariable ().

Lorsque j'exécute le processus, le système ne trouve pas l'exécutable ("exécutable1"). J'ai essayé de définir StartInfo.FileName sur le chemin complet de "exécutable1" - mais alors les fichiers EXE appelés sous "exécutable1" ne sont pas trouvés ...

Comment 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();
40
timkado

Quel est ton problème en fait? System.Environment.SetEnvironmentVariable modifie les variables d'environnement de processus en cours. Si vous souhaitez modifier les variables d'un processus que vous créez, utilisez simplement la propriété de dictionnaire EnvironmentVariables:

var startInfo = new ProcessStartInfo();

// Sets RAYPATH variable to "test"
// The new process will have RAYPATH variable created with "test" value
// All environment variables of the created process are inherited from the
// current process
startInfo.EnvironmentVariables["RAYPATH"] = "test";

// Required for EnvironmentVariables to be set
startInfo.UseShellExecute = false;

// Sets some executable name
// The executable will be search in directories that are specified
// in the PATH variable of the current process
startInfo.FileName = "cmd.exe";

// Starts process
Process.Start(startInfo);
76
ken2k

Il existe de nombreux types de variables d'environnement, comme le niveau système et les utilisateurs. Cela dépend de vos besoins.

Pour définir des variables d'environnement, utilisez simplement la méthode Get Set. Passez les variables Nom et Valeur en tant que paramètres et si vous utilisez pour définir le niveau d'accès, vous devez passer avec. Pour accéder à la valeur, utilisez la méthode Set pour transmettre également le paramètre de niveau d'accès.

Par exemple, je définis des variables de niveau utilisateur:

//For setting and defining variables
System.Environment.SetEnvironmentVariable("PathDB", txtPathSave.Text, EnvironmentVariableTarget.User);
System.Environment.SetEnvironmentVariable("DBname", comboBoxDataBaseName.Text, EnvironmentVariableTarget.User);

//For getting
string Pathsave = System.Environment.GetEnvironmentVariable("PathDB", EnvironmentVariableTarget.User);
string DBselect = System.Environment.GetEnvironmentVariable("DBname", EnvironmentVariableTarget.User);
5
Dikchani