Se7enSoftのMozNetプラグインを使用しています。これはFireFox3.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環境変数の変更を妨げる可能性のある問題はありますか?