通过NSIS安装程序注册BHO

时间:2010-06-21 16:01:25

标签: com nsis bho

我有一个IE BHO,我通过Visual Studio安装和部署项目打包。我现在想通过NSIS安装程序打包它。

我的BHO以下列方式注册:

    [ComRegisterFunctionAttribute]
    public static void Register(Type t)
    {
        string guid = t.GUID.ToString("B");

        RegistryKey rkClass = Registry.ClassesRoot.CreateSubKey(@"CLSID\"+guid );
        RegistryKey rkCat = rkClass.CreateSubKey("Implemented Categories");

        string name = toolbarName;
        string help = toolbarHelpText;

        rkClass.SetValue(null, name );
        rkClass.SetValue("MenuText", name );
        rkClass.SetValue("HelpText", help );

        if( 0 != (style & BandObjectStyle.Vertical) )
            rkCat.CreateSubKey("{00021493-0000-0000-C000-000000000046}");

        if( 0 != (style & BandObjectStyle.Horizontal) )
            rkCat.CreateSubKey("{00021494-0000-0000-C000-000000000046}");

        if( 0 != (style & BandObjectStyle.TaskbarToolBar) )
            rkCat.CreateSubKey("{00021492-0000-0000-C000-000000000046}");

        if( 0 != (style & BandObjectStyle.ExplorerToolbar) )
            Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Toolbar").SetValue(guid,name);

    }

虽然这是由VS制作的msi安装程序处理的,但我想知道如何使用NSIS执行相同操作?

任何帮助将不胜感激!

卡皮尔西

2 个答案:

答案 0 :(得分:1)

您必须在安装(注册)和删除(注销)期间显式调用regsvr32.exe

e.g。在安装过程中:

Exec 'regsvr32.exe /s "$INSTDIR\your_bho.dll"'

......并在搬迁期间:

 Exec 'regsvr32.exe /s /u "$INSTDIR\your_bho.dll"'

...其中your_bho.dll是您的BHO的文件名。 /s标志(顺便说一句)禁止命令向最终用户显示对话框。 regsvr32.exe位于system32目录中,因此您无需担心其路径。

答案 1 :(得分:1)

或者您可以使用NSIS registry plug-in,它为您提供了大量有用的辅助函数。

使用RegDLL注册DLL。