我正在使用 Se7enSoft 的 MozNet 插件。这是 FireFox 3.6 的 WebBrowser 控件。它使用 XulRunner。
我要做的第一件事是执行 Initialize(...) 方法。
var binDirectory = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location);
var xulRuntimeDirectory = Path.Combine(binDirectory, "xul");
Se7enSoft.MozNet.Xpcom.Initialize(xulRuntimeDirectory, null);
我必须将我们安装 XulRunner 的目录传递给它。该插件的 Initialize 方法在内部使用以下 DLLImport。
[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);
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 台 PC(Windows 2000 和 XP)上。适用于数百人。
如果我调试并跳过 Environment.SetEnvironmentVariable(...) 方法,我可以重现该问题。
SetEnvironmentVariable 是否有任何问题可能会阻止它更改 PATH 环境变量?