Подтвердить что ты не робот

Установите переменные среды для процесса

Какова концепция переменной среды?

В программе С# мне нужно вызвать исполняемый файл. Исполняемый файл вызывает другие исполняемые файлы, которые находятся в одной папке. Исполняемые файлы полагаются на две переменные среды: "PATH" и "RAYPATH" для правильной установки. Я пробовал следующие две вещи:

  • Я создал процесс и задал две переменные в StartInfo. переменные уже существуют, но отсутствуют необходимая информация.
  • Я попытался установить переменные с   System.Environment.SetEnvironmentVariable().

Когда я запускаю процесс, система не может найти исполняемый файл ( "executeable1" ). Я попытался установить StartInfo.FileName на полный путь "executeable1" - однако тогда файлы EXE, называемые формой внутри "executeable1" , не найдены...

Как я могу справиться с этим?

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

Ответ 1

Какова ваша проблема на самом деле? System.Environment.SetEnvironmentVariable изменяет переменные среды текущего процесса. Если вы хотите изменить переменные создаваемого процесса, просто используйте свойство словаря 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);

Ответ 2

Существует много типов переменных среды, таких как системный уровень и пользователей. Это зависит от ваших требований.

Для установки переменных среды просто используйте метод Get Set. Передать переменные Имя и значение в качестве параметров, и если использование для определения уровня доступа должно пройти вместе с ним. Для доступа к значению используйте метод Set, чтобы передать параметр уровня доступа.

Например, я определяю переменные уровня пользователя:

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