【问题标题】:EntryPointNotFoundException in kernel32.dll SetEnvironmentVariablekernel32.dll SetEnvironmentVariable 中的 EntryPointNotFoundException
【发布时间】:2015-09-29 15:39:54
【问题描述】:

我正在使用 mono 和 xamarin 作为 IDE 在 mac 上运行 c# 应用程序。 在我的主要方法中,我有:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling=false)]
 public static extern bool SetEnvironmentVariable(string lpName, string lpValue);

然后当我调用它时:

SetEnvironmentVariable("PATH", path);

我得到一个 EntryPointNotFoundException

System.EntryPointNotFoundException: SetEnvironmentVariable
at at (wrapper managed-to-native) EICService.Program:SetEnvironmentVariable (string,string)
at EICService.Program.Main (System.String[] rawArgs) [0x00031] in (*my path*)/Program.cs:34

现在我知道在 mac 上调用 kernel32.dll 是一个问题,但我认为它正在找到它或任何单声道作为它的替代品,因为如果我在那里放置一些虚拟 dll 文件名,我会得到一个找不到 dll错误。

我是 C# 的菜鸟,但是这段代码在 windows 上运行,我们只想让它在 unix 上运行。

有什么想法吗?

【问题讨论】:

    标签: c# xamarin mono


    【解决方案1】:

    这是一个 Windows API 函数。它根本不存在于 Mac 上。因此出现错误。

    您无需 p/调用此函数即可在流程环境中设置变量。您可以使用本机 .net 功能。那是Environment.SetEnvironmentVariable

    更重要的是,您应该在 Windows 上做同样的事情。 p/invoke 本地函数来执行 .net 运行时库提供的功能从来都不是一个好主意。

    【讨论】:

    • System.Environment.SetEnvironmentVariable 是否与 Environment.SetEnvironmentVariable 相同?
    • 是的。为了更简洁,我在答案中省略了 System 命名空间。
    • 顺便说一句,我注意到你已经问了 17 个问题,没有接受任何答案,只投了 4 次。也许您可以多参与社区活动。
    • 哦,对不起,我不知道我应该接受答案...并投票... :) 从现在开始!
    • 谢谢。您可以查看您之前的问题:stackoverflow.com/users/3058468/ido-flax?tab=questions
    猜你喜欢
    • 2011-04-14
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2011-04-24
    • 1970-01-01
    • 2018-07-22
    • 2016-02-28
    相关资源
    最近更新 更多