簡體   English   中英

在Windows7上注冊BHO

[英]Registering BHO on Windows7

我已經寫了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下完成嗎?

我認為這不是“注冊dll”問題。 我的BHO已正確注冊,但不適用於非管理員帳戶(當IE未以管理員身份運行時)。 可能Webbrowser事件發生問題或未在保護模式下調用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;
    }
        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

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM