gpt4 book ai didi

c# - java不可见的环境变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:51 26 4
gpt4 key购买 nike

项目

该项目是一个大型 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com