Регистрация BHO на Windows7 - PullRequest
       25

Регистрация BHO на Windows7

1 голос
/ 30 декабря 2011

Я написал 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;
    }

Ответы [ 2 ]

0 голосов
/ 03 октября 2012
        RegistryKey registryKey =
        Registry.LocalMachine.OpenSubKey(BHO_REGISTRY_KEY_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);

        if (registryKey == null)
            registryKey = Registry.LocalMachine.CreateSubKey(
                                    BHO_REGISTRY_KEY_NAME, RegistryKeyPermissionCheck.ReadWriteSubTree);

        string guid = type.GUID.ToString("B");
        RegistryKey ourKey = registryKey.OpenSubKey(guid);

        if (ourKey == null)
        {
            ourKey = registryKey.CreateSubKey(guid, RegistryKeyPermissionCheck.ReadWriteSubTree);
        }

        ourKey.SetValue("NoExplorer", 1, RegistryValueKind.DWord);
        registryKey.Close();
        ourKey.Close();


I'm hope this one is good
0 голосов
/ 30 декабря 2011

На MSDN есть вопрос, в котором обсуждается эта же проблема.Возможно ли в вашей ситуации использовать HKCU вместо HKLM?

public static string RegistryKeyLocation = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";

[ComRegisterFunction]
public static void Register(Type type)
{
    RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(RegistryKeyLocation, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

    if (registryKey == null)
    {
        registryKey = Registry.CurrentUser.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.CurrentUser.OpenSubKey(RegistryKeyLocation, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
    string guid = type.GUID.ToString("B");

    if (registryKey != null)
    {
        registryKey.DeleteSubKey(guid, false);
    }
}
...