Зарегистрируйте Com c # BHO DLL с помощью NSIS

Прежде всего, я новичок в программировании 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'

У меня ничего не работает. Что я делаю неправильно? Какой правильный путь?


person Honey Goyal    schedule 03.08.2014    source источник
comment
Правильно только второе. Ваши регистрационные функции - ерунда, это было намеренно? Что именно значит "не работает"?   -  person Hans Passant    schedule 03.08.2014
comment
Вы не должны писать BHO в управляемый код ...   -  person Anders    schedule 03.08.2014
comment
Спасибо за ваш ответ. Я следую ссылке в этой статье, чтобы создать BHO. Вот почему я написал эти методы. Но эта команда ExecWait 'regasm.exe $ INSTDIR \ ie \ HelloBHOWorld.dll / register / codebase / tlb' у меня не работает. Вы хотите предложить мне какие-либо изменения в нем?   -  person Honey Goyal    schedule 03.08.2014


Ответы (1)


Инструкция ExecWait NSIS просто использует функции CreateProcess() и WaitForSingleObject() WinAPI, поэтому вы, вероятно, можете сначала запустить regasm.exe вручную, чтобы убедиться, что он действительно работает.

Вы можете попытаться увидеть, где что-то пошло не так (не удается загрузить dll? Не удается записать в реестр?) С помощью Монитор процессов ...

person Anders    schedule 03.08.2014