Нужно взять чужой проект BHO - PullRequest
0 голосов
/ 04 мая 2011

Мне нужно заняться чьим-то проектом, который покинул команду.

Проект относится к разработке расширения IE.

Проект, который мне дали, был скомпилирован без .vdproj

Известно, что проект прекрасно компилируется и регистрируется в Internet Explorer как расширение.

Однако предоставленные мне файлы, хотя они прекрасно компилируются, не могут регистрироваться в Internet Explorer как расширение.

Что нужно сделать в этом случае?

// мышь

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using SHDocVw;
using BandObjectLib;

namespace CustomFunction
{
/// <summary>
/// Registration:
/// This is a browser helper object, which is registered as a COM When we register the 
/// SearchBar.dll using the regasm command.
/// Loading:
/// This COM object loaded for each IE window. As a window is created, it creates its own copy of the BHO; 
/// and, when that window is closed, it destroys its copy of the BHO
/// Purpose of implementing this BHO:
/// It loads the toolbar when this BHO is instantiated.
/// Code Reference: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=509297&SiteID=1
/// </summary>
[ComVisible(true)]
[Guid("1D970ED5-3EDA-438d-BFFD-715931E2775B")]
[ClassInterface(ClassInterfaceType.None)]
public class InitToolbarBHO : IObjectWithSite
{
   #region Fields
   private InternetExplorer explorer;
   private const string BHOKeyName =        "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
   #endregion

   #region Com Register/UnRegister Methods
   /// <summary>
   /// Called, when IE browser starts.
   /// </summary>
   /// <param name="t"></param>
   [ComRegisterFunction]
   public static void RegisterBHO(Type t)
   {
       RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKeyName, true);
       if (key == null)
       {
           key = Registry.LocalMachine.CreateSubKey(BHOKeyName);
       }
       string guidString = t.GUID.ToString("B");
       RegistryKey bhoKey = key.OpenSubKey(guidString, true);

       if (bhoKey == null)
       {
           bhoKey = key.CreateSubKey(guidString);
       }

       // NoExplorer:dword = 1 prevents the BHO to be loaded by Explorer
       string _name = "NoExplorer";
       object _value = (object)1;
       bhoKey.SetValue(_name, _value);
       key.Close();
       bhoKey.Close();
   }

   /// <param name="t"></param>
   [ComUnregisterFunction]
   public static void UnregisterBHO(Type t)
   {
       RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKeyName, true);
       string guidString = t.GUID.ToString("B");
       if (key != null)
       {
           key.DeleteSubKey(guidString, false);
       }
   }
  #endregion

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Мне удалось выяснить проблему, и я смог зарегистрировать ее вручную с помощью regsvr32.

0 голосов
/ 04 мая 2011
// NoExplorer:dword = 1 prevents the BHO to be loaded by Explorer
       string _name = "NoExplorer";
       object _value = (object)1;
       bhoKey.SetValue(_name, _value);

там, вероятно, ваш ответ, прямо там с комментариями. установка _value в 1 предотвращает загрузку BHO, и это происходит прямо там внизу.

...