C# SetEnvironmentVariable未更改路径变量
我正在使用Se7enSoft的MozNet插件。这是一个适用于FireFox 3.6的WebBrowser控件。它使用XulRunner 我必须做的第一件事是执行Initialize(…)方法 我必须将安装XulRunner的目录传递给它。 该插件的Initialize方法在内部使用以下DLLImportC# SetEnvironmentVariable未更改路径变量,c#,xulrunner,C#,Xulrunner,我正在使用Se7enSoft的MozNet插件。这是一个适用于FireFox 3.6的WebBrowser控件。它使用XulRunner 我必须做的第一件事是执行Initialize(…)方法 我必须将安装XulRunner的目录传递给它。 该插件的Initialize方法在内部使用以下DLLImport [DllImport("xpcom", CharSet = CharSet.Ansi, EntryPoint = "NS_CStringContainerFinish"
[DllImport("xpcom", CharSet = CharSet.Ansi,
EntryPoint = "NS_CStringContainerFinish",
CallingConvention = CallingConvention.Cdecl)]
internal static extern int Moz_CStringContainerFinish(ACString container);
需要XulRunner的xpcom.dll中的NS_CStringContainerFinish方法
在第一次调用此方法之前,MozNet插件临时更改PATH环境变量
Environment.SetEnvironmentVariable("path",
Environment.GetEnvironmentVariable("path") + ";" +
binDirectory, EnvironmentVariableTarget.Process);
var pluginDirectory = @"C:\....\xulrunner\");
var path = Environment.GetEnvironmentVariable("path");
Environment.SetEnvironmentVariable(
"path",
pluginDirectory + ";" + path,
EnvironmentVariableTarget.Process);
XulRunner的位置临时添加到PATH环境变量中,以确保它可以解析xpcom.dll(以及其他)
但是它仍然找不到它。我收到以下例外情况
Unable to load DLL 'xpcom': Cannot find method.
(Exception from HRESULT: 0x8007007F)
at Se7enSoft.MozNet.Native.MozNativeMethods.Moz_CStringContainerInit(
ACString container)
at Se7enSoft.MozNet.Xpcom.XpCom_Init()
at Se7enSoft.MozNet.Xpcom.Initialize(String mozPath, String profPath)
此问题仅在3台电脑(Windows 2000和XP)上发生。对其他数百人来说效果很好
如果我调试并跳过Environment.SetEnvironmentVariable(…)方法,我可以重现这个问题
SetEnvironmentVariable是否存在任何可能阻止其更改路径环境变量的问题?是的,使用set environment variable时出现问题,它只是为当前进程设置指定环境变量的内容。它不会对变量产生影响
Environment.SetEnvironmentVariable("path",
Environment.GetEnvironmentVariable("path") + ";" +
binDirectory, EnvironmentVariableTarget.Process);
var pluginDirectory = @"C:\....\xulrunner\");
var path = Environment.GetEnvironmentVariable("path");
Environment.SetEnvironmentVariable(
"path",
pluginDirectory + ";" + path,
EnvironmentVariableTarget.Process);
请阅读下面的例子进行解释
此功能对系统环境变量或其他进程的环境变量没有影响。找到了原因
DLLImport语句使用自动查找xpcom.dll文件
简而言之,它搜索:
- nspr4.dll
- nss3.dll
- plc4.dll
- plds4.dll
Environment.SetEnvironmentVariable("path",
Environment.GetEnvironmentVariable("path") + ";" +
binDirectory, EnvironmentVariableTarget.Process);
var pluginDirectory = @"C:\....\xulrunner\");
var path = Environment.GetEnvironmentVariable("path");
Environment.SetEnvironmentVariable(
"path",
pluginDirectory + ";" + path,
EnvironmentVariableTarget.Process);
您正在使用漫游配置文件吗?可能是。通常不会,但我们以前有人使用了不正确的(漫游配置文件)。检查一下,好的。报告此问题的用户没有漫游配置文件。在运行.NET3.5的VB项目中,您仍然推荐MozNET吗?他们的网站上似乎有大量链接被破坏,包括文档。在谷歌将我连接到这里的一个帖子后,我试图在他们的论坛上注册,但似乎最后一个合法帖子是在2012年?我不知道现在该如何使用MozNet…不,我不会用它。它只由一个人维护IIRC。从那时起,我们已经删除了MozNET。从那时起,我们在CefSharp()的帮助下改用铬。我知道。我只想为当前流程更改它。它只是没有注意到当前进程的更改。您是否在管理员权限下运行该应用程序?在哪个操作系统中运行?Win2000、XP和7。仅在3台电脑上报告(2x 2000和1x XP)。管理员权限。不可以。请使用管理员权限运行该应用程序并将其签出。还可以检查SetEnvironmentVariable方法的返回值