Establecer variables de entorno para un proceso

¿Cuál es el concepto de variable de entorno?

En un progtwig C #, necesito llamar a un ejecutable. El ejecutable llamará a otros archivos ejecutables que residen en la misma carpeta. Los ejecutables dependen de las dos variables de entorno “PATH” y “RAYPATH” para establecerse correctamente. Intenté las siguientes dos cosas:

  1. Creé un proceso y establecí los dos elementos en StartInfo. Las variables ya existen pero faltan la información necesaria.
  2. Intenté establecer las variables con System.Environment.SetEnvironmentVariable ().

Cuando ejecuto el proceso, el sistema no puede encontrar el ejecutable (“ejecutable1”). Intenté establecer StartInfo.FileName en la ruta completa de “executable1”; sin embargo, no se encuentran los archivos EXE llamados dentro de “ejecutable1” …

¿Cómo trato con esto?

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

¿Cuál es tu problema en realidad? System.Environment.SetEnvironmentVariable cambia las variables de entorno del proceso actual . Si desea cambiar las variables de un proceso que crea, solo use la propiedad del diccionario 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); 

Hay muchos tipos de variables de entorno, como el nivel del sistema y los usuarios. Depende de tus requisitos.

Para establecer variables de entorno, solo use el método Get Set. Pase el nombre y el valor de las variables como parámetros y, si se usa para definir el nivel de acceso, debe pasar con él. Para acceder al valor, utilice el método Set para pasar también el parámetro de nivel de acceso.

Por ejemplo, estoy definiendo variables de nivel de usuario:

 //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);