7

该项目

该项目是一个用于测试自动化的大型 C# 项目。为此,我必须使用 java-tool,它是将所有结果保存到可以加载到测试环境中的文件中的工具。

界面

我从 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# 中设置的 env.-variable,但认识到我在 bat 文件中设置了它。

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

4

3 回答 3

1

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

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

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

于 2012-05-14T20:12:13.190 回答
1

确保环境变量适用于每个目标:进程、用户和机器。请参阅此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);
于 2012-05-15T00:25:30.253 回答
0

Java 允许您使用以下方式将环境变量作为参数传递:

java -DMYPROP=MYVALUE myclass.class

参数语法。检查 -D 标志。

然后,这些系统属性将应用于该 JVM 进程实例。这不是比尝试修改操作系统环境更简单吗?

于 2012-05-15T17:18:53.060 回答