项目
该项目是一个大型 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 文件设置类路径时,它起作用了。更多事实:
- 应用程序由bat文件启动
- 路径是从我生成的dll路径复制过来的
- 我什么都没注释掉,所以路径还是C#设置的
Java 似乎没有访问我在 C# 中设置的环境变量,但识别出我在 bat 文件中设置了它。
我真的需要通过 C# 设置变量,我该如何存档?
最佳答案
在Microsoft System.Environment documentation中没有明确写明但目标值 Process
似乎仅限于当前进程的范围。默认情况下,the CreateProcess method继承子进程的当前进程环境。也许那里使用的参数打破了这种默认行为。
所以我建议您先在 SetEnvironmentVariable
中使用 EnvironmentVariableTarget.User
进行测试,看看它是否工作得更好。
顺便说一句,我认为您必须进一步诊断环境变量并使用类似 Process Monitor 的工具创建流程操作.
关于c# - java不可见的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529751/