环境变量对java不可见

Fel*_* K. 7 c# java environment-variables

该项目

该项目是一个大型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);
Run Code Online (Sandbox Code Playgroud)

在此之后,我使用以下代码设置java类的路径:

Environment.SetEnvironmentVariable("ITEPCLASSPATH",
                String.Format("{0};{1}",
                Path.Combine(iTepPath, "itep.jar"),
                Path.Combine(iTepPath, "libs\\itorx.jar")), EnvironmentVariableTarget.Process);
Run Code Online (Sandbox Code Playgroud)

实际应该工作,它在使用时显示正确的值,Environment.GetEnvironmentVariable("ITEPCLASSPATH")但C++ - DLL告诉我它不起作用.

使用外部bat文件设置类路径时,它可以正常工作.更多事实:

  • 该应用程序由bat文件启动
  • 从我生成的dll路径复制路径
  • 我没有评论任何东西,所以路径仍由C#设置

似乎java没有访问我在C#中设置的env.-variable但是认识到我在bat文件中设置它.

我真的需要通过C#设置变量,我该如何归档?

Yve*_*tin 1

它没有明确写入Microsoft System.Environment 文档中,但目标值Process似乎仅将范围限制为当前进程。默认情况下,CreateProcess 方法继承子进程的当前进程环境。也许那里使用的参数破坏了这种默认行为。

所以我建议你先用EnvironmentVariableTarget.Userin进行测试SetEnvironmentVariable,看看是否效果更好。

顺便说一句,我认为您将必须进一步诊断环境变量并使用Process Monitor等工具创建流程操作。