[英]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.