Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java C#dllImport和环境变量_Java_C#_Variables_Dllimport_Environment - Fatal编程技术网

Java C#dllImport和环境变量

Java C#dllImport和环境变量,java,c#,variables,dllimport,environment,Java,C#,Variables,Dllimport,Environment,这很难解释,但我会尽全力。 我编写了一个C语言程序,AM使用DLIMPORT访问外部C++ DLL中的非托管代码。 C++ DLL是java程序的包装器。 只有在调用我的C#程序时,我才能让它工作。该程序是在DOS批处理文件中调用的,该文件设置了C++/Java外部函数所需的各种环境变量。 我不想使用DOS批处理文件,也不想用我的C#程序设置和控制环境变量。 向任何人寻求建议,因为我还没有找到这样做的方法,也不知道这是否可能。 谢谢。什么事 public static void SetEnvir

这很难解释,但我会尽全力。 我编写了一个C语言程序,AM使用DLIMPORT访问外部C++ DLL中的非托管代码。 C++ DLL是java程序的包装器。 只有在调用我的C#程序时,我才能让它工作。该程序是在DOS批处理文件中调用的,该文件设置了C++/Java外部函数所需的各种环境变量。 我不想使用DOS批处理文件,也不想用我的C#程序设置和控制环境变量。 向任何人寻求建议,因为我还没有找到这样做的方法,也不知道这是否可能。 谢谢。

什么事

public static void SetEnvironmentVariable(
    string variable,
    string value,
     EnvironmentVariableTarget targer
)
此函数用于设置环境变量

using System
....
Environment.SetEnvironmentVariable(envName, envValue,EnvironmentVariableTarget.Machine);
看看msdn的例子

这无法完成,因为每个.NET应用程序都有自己的环境变量“缓存”。这些是与操作系统隔离的。此外,即使在使用本机P/Invoke调用来设置环境变量时,“缓存”也不会更新。这意味着启动应用程序的堆栈将看不到这些更改。我知道您已声明这无法完成,但当我以管理员身份运行应用程序时,DLL调用所有工作。因此,他们似乎可以访问设置的用户环境变量。谢谢。我已经在使用显示的代码来设置环境变量。然而,这似乎不是我的问题。当我调用使用DLLImport声明的函数时,它们仅在我以管理员身份运行应用程序时才起作用。您是否尝试将SetEnvironmentVariable与树参数一起使用
public static void SetEnvironmentVariable(字符串变量、字符串值、EnvironmentVariableTarget)
可以设置变量目标的地方:
机器、过程、用户
??是的,我有。当我将目标设置为用户时,用户环境会随着我的设置而变化。进程不执行任何操作,机器因权限问题而失败。再次指出,这些调用都是有效的,我调用的外部DLL不起作用。如果我在批处理文件中设置了所有环境变量并调用应用程序,它就会工作,如果我以管理员身份运行应用程序(没有批处理文件),它也会工作。问题似乎是环境变量对我正在调用的外部DLL的可访问性。我想我正在接近实现这一点。您所展示的一切都是有效的,但我认为问题在于设置环境变量的路径“。运行应用程序后,我会检查用户环境变量,它们都设置正确。路径=%PATH%;C:\SomeOtherPath\,但当我转到DOS提示符并调用它们时,该路径返回的是系统环境变量,而不是用户环境变量。这可能是我的问题。所以我仍然在寻找如何对其进行排序。工作代码示例:string NEW_DIR=@“C:\AnyOldPath”;Environment.SetEnvironmentVariable(“PATH”,Environment.GetEnvironmentVariable(“PATH”)+“;”+NEW_DIR++“\Bin”,envt);SetEnvironmentVariable(“特殊的库路径”,新的目录+@“\LIB\”,环境);