Я написал Browser Helper Object, который отлично работает на компьютере с Windows XP.На машине с Windows 7 что-то не так (когда UAC включен).Я думаю, что при регистрации BHO возникла проблема.Это мой код, используемый для регистрации BO:
public static string RegistryKeyLocation = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
[ComRegisterFunction]
public static void Register(Type type)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(RegistryKeyLocation, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
if (registryKey == null)
{
registryKey = Registry.LocalMachine.CreateSubKey(RegistryKeyLocation,);
}
string guid = type.GUID.ToString("B");
RegistryKey bhoKey = registryKey.OpenSubKey(guid, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
if (bhoKey == null)
{
bhoKey = registryKey.CreateSubKey(guid);
}
bhoKey.SetValue("IExplorer Extension", 1);
registryKey.Close();
bhoKey.Close();
}
[ComUnregisterFunction]
public static void Unregister(Type type)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(RegistryKeyLocation, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
string guid = type.GUID.ToString("B");
if (registryKey != null)
{
registryKey.DeleteSubKey(guid, false);
}
}
Как это можно сделать под Windows 7?
Я думаю, что это не проблема 'Registring dll'.Мой BHO зарегистрирован правильно, но не работает с учетной записью без прав администратора (когда IE не запускается как администратор).может быть что-то не так с событиями веб-браузера или метод setsit не вызывается в защищенном режиме ...
public int SetSite(object site)
{
if (site != null)
{
webBrowser = (WebBrowser)site;
webBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
webBrowser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(this.OnBeforeNavigate2);
webBrowser.OnQuit += new DWebBrowserEvents2_OnQuitEventHandler(webBrowser_OnQuit);
timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(timer_ElapsedEvent);
timer.Interval = 125000;
timer.Start();
}
else
{
webBrowser.DocumentComplete -= new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
webBrowser.BeforeNavigate2 -= new DWebBrowserEvents2_BeforeNavigate2EventHandler(this.OnBeforeNavigate2);
webBrowser.OnQuit -= new DWebBrowserEvents2_OnQuitEventHandler(webBrowser_OnQuit);
webBrowser = null;
}
return 0;
}