【问题标题】:C# dllImport and Environment VariablesC# dllImport 和环境变量
【发布时间】:2014-07-08 03:11:07
【问题描述】:

这很难解释,但我会尽力而为。 我编写了一个 C# 程序,并且正在使用 DLLImport 访问外部 C++ DLL 中的非托管代码。 C++ DLL 是 Java 程序的包装器。 如果我在 DOS 批处理文件中调用我的 C# 程序,该文件设置 C++/Java 外部函数所需的各种环境变量,我只能让它工作。 我希望能够不使用 DOS 批处理文件并使用我的 C# 程序设置和控制环境变量。 向任何人寻求提示,因为我还没有找到一种方法来做到这一点,或者知道它是否可能。 谢谢。

【问题讨论】:

  • 这无法完成,因为每个 .NET 应用程序都有自己的环境变量“缓存”。这些与操作系统隔离。此外,即使使用本机 P/Invoke 调用来设置环境变量,“缓存”也不会更新。这意味着启动应用程序的堆栈不会看到这些更改。
  • 我知道您已经说过这无法完成,但是当我以管理员身份运行我的应用程序时,DLL 调用所有工作。所以他们似乎可以访问设置的用户环境变量。

标签: java c# variables dllimport environment


【解决方案1】:

关于什么

public static void SetEnvironmentVariable(
    string variable,
    string value,
     EnvironmentVariableTarget targer
)

这个函数设置环境变量

using System
....
Environment.SetEnvironmentVariable(envName, envValue,EnvironmentVariableTarget.Machine);

看msdn的例子 http://msdn.microsoft.com/en-us/library/z46c489x%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

【讨论】:

  • 谢谢。我已经在使用显示的代码来设置环境变量。然而,这似乎不是我的问题。当我调用使用 DLLImport 声明的函数时,它们似乎只在我以管理员身份运行我的应用程序时才起作用。
  • 您是否尝试将 SetEnvironmentVariable 与树参数 public static void SetEnvironmentVariable( string variable, string value, EnvironmentVariableTarget target ) 一起使用,您可以在其中设置变量目标:Machine,Process,User ???
  • 是的,我有。当我将目标设置为用户时,用户 Enviroment Varialbes 在我设置它们时会发生变化。进程不执行任何操作,并且机器因权限问题而失败。再次指出,这些调用都在工作,是我调用的外部 DLL 不起作用。如果我在批处理文件中设置所有环境变量并调用它可以工作的应用程序,并且如果我以管理员身份运行我的应用程序(没有批处理文件)它也可以工作。问题似乎是环境变量对我正在调用的外部 DLL 的可访问性。
  • 我想我已经接近完成这项工作了。你所展示的一切都在工作,但我认为问题是由于设置了环境变量“PATH”。运行我的应用程序后,我检查了用户环境变量,它们都设置正确。PATH=%PATH%;C: \SomeOtherPath\ ,但是当我转到 DOS 提示符并调用它们时,PATH 会返回给我 System Enviroment Vaible 而不是 USer 。这可能是我的问题。所以我仍在寻找如何排序。
  • 工作代码示例:string NEW_DIR = @"C:\AnyOldPath"; Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + NEW_DIR + @"\Bin", envt); Environment.SetEnvironmentVariable("SPECIAL_LIB_PATH", NEW_DIR + @"\Lib\", envt);
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 2014-06-10
  • 2019-08-21
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多