我有一个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执行相同操作?
任何帮助将不胜感激!
卡皮尔西
答案 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。