使用NSIS注册Com c#BHO DLL

时间:2014-08-03 06:59:39

标签: c# dll com nsis bho

首先,我是Windows编程的新手,抱歉使用了任何错误的术语。 我创建了一个c#BHO,我能够通过Visual Studio命令提示符(以管理员身份运行)在Windows 7 64位上使用以下命令注册dll。

regasm.exe HelloBHOWorld1.dll /codebase

在这个问题How to unregister the assembly registered using 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);
    }

我正在使用NSIS创建exe以在安装期间注册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'

没有什么对我有用。我究竟做错了什么?什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

ExecWait NSIS指令只使用CreateProcess()WaitForSingleObject() WinAPI函数,因此您可以先手动运行regasm.exe以确保它实际正常工作。

您可以尝试使用Process Monitor尝试查看出错的地方(无法加载dll?无法写入注册表?)