该项目是一个大型C#项目,用于测试自动化。为此,我将使用java工具,该工具将所有结果保存到可以加载到测试环境中的文件中。
我从使用C ++构建的测试环境的供应商处获得了一个DLL,这个DLL加载了java环境并加载了jar文件。
java环境加载成功,使用此方法在C#中设置环境变量:
String java = GetJavaInstallationPath();
Environment.SetEnvironmentVariable("PATH", String.Format("{0};{1}", Environment.GetEnvironmentVariable("PATH"), Path.Combine(java, @"bin\client")), EnvironmentVariableTarget.Process);
在此之后,我使用以下代码设置了java类的路径:
Environment.SetEnvironmentVariable("ITEPCLASSPATH",
String.Format("{0};{1}",
Path.Combine(iTepPath, "itep.jar"),
Path.Combine(iTepPath, "libs\\itorx.jar")), EnvironmentVariableTarget.Process);
实际应该有效,它在使用Environment.GetEnvironmentVariable("ITEPCLASSPATH")
时显示正确的值,但C ++ - DLL告诉我它不起作用。
使用外部bat文件设置类路径时,它可以正常工作。更多事实:
似乎java没有访问我在C#中设置的env.-variable,但认识到我在bat文件中设置了它。
我真的需要通过C#设置变量,如何存档?
答案 0 :(得分:1)
它没有明确写在Microsoft System.Environment documentation中,但目标值Process
似乎只限制了当前进程的范围。默认情况下,the CreateProcess method会继承子进程的当前进程环境。也许在那里使用的参数打破了这种默认行为。
所以我建议您先在EnvironmentVariableTarget.User
中使用SetEnvironmentVariable
进行测试,看看它是否效果更好。
顺便说一句,我认为您必须使用Process Monitor等工具诊断更多环境变量并创建流程操作。
答案 1 :(得分:1)
确保环境变量适用于每个目标:Process,User和Machine。请参阅此MSDN文章。
// Set the environment variable for the default target (the current process).
Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
Environment.SetEnvironmentVariable(myVarA, existsA);
// Set the environment variable for the the current process.
Console.WriteLine(fmt2x, "Process", myVarB, existsB);
Environment.SetEnvironmentVariable(myVarB, existsB,
EnvironmentVariableTarget.Process);
// Set the environment variable for the the current user.
Console.WriteLine(fmt2x, "User", myVarC, existsC);
Environment.SetEnvironmentVariable(myVarC, existsC,
EnvironmentVariableTarget.User);
// Set the environment variable for the the local machine.
Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
Environment.SetEnvironmentVariable(myVarD, existsD,
EnvironmentVariableTarget.Machine);
答案 2 :(得分:0)
Java允许您使用以下命令将环境变量作为参数传递:
java -DMYPROP=MYVALUE myclass.class
参数语法。看看-D标志。
然后,这些系统属性将应用于该JVM流程实例。这不比试图修改操作系统环境简单吗?