Прежде всего, я новичок в программировании Windows, извините за неправильную терминологию. Я создал c # BHO, и я могу зарегистрировать dll через командную строку Visual Studio (запуск от имени администратора), используя приведенную ниже команду в 64-разрядной версии Windows 7.
regasm.exe HelloBHOWorld1.dll /codebase
как указано в этом вопросе Как отменить регистрацию сборки, зарегистрированной с помощью regasm
Это мой метод RegisterBHO и UnregisterBHO.
public static string BHOKEYNAME =
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
[ComRegisterFunction]
public static void RegisterBHO(Type type)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);
if (registryKey == null)
registryKey = Registry.LocalMachine.CreateSubKey(BHOKEYNAME);
string guid = type.GUID.ToString("B");
RegistryKey ourKey = registryKey.OpenSubKey(guid);
if (ourKey == null)
ourKey = registryKey.CreateSubKey(guid);
ourKey.SetValue("Alright", 1);
registryKey.Close();
ourKey.Close();
}
[ComUnregisterFunction]
public static void UnregisterBHO(Type type)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);
string guid = type.GUID.ToString("B");
if (registryKey != null)
registryKey.DeleteSubKey(guid, false);
}
Я создаю exe с помощью NSIS для регистрации BHO во время установки. Я попробовал следующие команды одну за другой в NSIS, чтобы зарегистрировать его.
ExecWait '"$SYSDIR\regsvr32.exe" /s "$INSTDIR\ie\HelloBHOWorld.dll"'
ExecWait 'regasm.exe "$INSTDIR\ie\HelloBHOWorld.dll" /register /codebase /tlb'
RegDLL "$INSTDIR\ie\HelloBHOWorld1.dll"
ExecWait '"$SYSDIR\rundll32.exe" $INSTDIR\ie\HelloBHOWorld.dll DllRegisterServer'
У меня ничего не работает. Что я делаю неправильно? Какой правильный путь?