【发布时间】:2012-05-10 07:59:55
【问题描述】:
项目
该项目是一个用于测试自动化的大型 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# 设置变量,我该如何存档?
【问题讨论】:
-
一种解决方法是从 c# 使用
System.IO.Process.Start启动 bat 文件。你真的需要使用DLL吗?否则,请尝试找出环境是如何通过 dll 传递的。我不明白为什么它不起作用。我认为应该。 -
@DarenThomas 这是一种解决方法,但会为我做更多的工作。 :-/ 当然,我必须使用 DLL,并且无法访问这些 DLL 的代码。
-
有问题的DLL什么时候初始化?也许它会读取环境。变量并记住值,然后再在代码中设置值。
-
@Matej 在设置所有变量后,我使用 Kernel32.dll 方法
LoadLibrary初始化 DLL。 -
如果 Environment.GetEnvironmentVariables() 是由批处理文件启动/不是由批处理文件启动,您是否会在 C# 应用程序中获得相同的输出?
标签: c# java environment-variables