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:
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();
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);
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);