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

标签 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);

在此之后,我使用以下代码设置了 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/

相关文章:

c# - 制表符完成方法组时防止添加括号

ruby-on-rails - 如何在本地定义环境变量而不更改它们的定义/将它们推送到 heroku?

Ant 在 Windows 路径中找不到可执行文件

c# - 使用 LINQ to SQL 左连接

c# - 这个 : "double x = x = (a - b)/(c - 1);" 的目的是什么

c# - 违反 PRIMARY KEY 约束 'PK_dbo.AmazonProducts' 。无法在对象中插入重复键

java - Java中替换一行文本

Java语法困惑,调用变量方法?

Java、单例元素修改、软件模式

macos - IBM Worklight - Mac - "' WEBWORKS_HOME 环境变量未定义”