web-dev-qa-db-ja.com

プロセスの環境変数を設定する

環境変数の概念とは何ですか?

C#プログラムでは、実行可能ファイルを呼び出す必要があります。実行可能ファイルは、同じフォルダーにある他のいくつかの実行可能ファイルを呼び出します。実行可能ファイルは、2つの環境変数「PATH」と「RAYPATH」に依存して正しく設定されます。次の2つのことを試しました。

  1. プロセスを作成し、StartInfoで2つの変数を設定しました。変数は既に存在しますが、必要な情報が欠落しています。
  2. System.Environment.SetEnvironmentVariable()で変数を設定しようとしました。

プロセスを実行すると、システムは実行可能ファイル( "executeable1")を見つけることができません。 StartInfo.FileNameを「executeable1」のフルパスに設定しようとしましたが、「executeable1」内のformと呼ばれるEXEファイルが見つかりません...

これにどう対処しますか?

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

実際にあなたの問題は何ですか? 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);
76
ken2k

システムレベルやユーザーなど、環境変数には多くの種類があります。要件によって異なります。

環境変数を設定するには、Get Setメソッドを使用します。変数としてNameとValueをパラメーターとして渡します。アクセスレベルの定義に使用する場合は、一緒に渡す必要があります。値にアクセスするには、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);
5
Dikchani